第9章ソフトウェア工学
9.1 Software Engineering Fundamentals9.1 ソフトウェア工学の基礎
Learning Objectives学習目標
By the end of this section, you will be able to:
この節を終えると、次のことができるようになる。
• Describe the intent of software engineering and how it relates to computer science
• ソフトウェア工学の目的と、コンピューターサイエンスとの関係を説明する。
• Recognize various categories of software
• ソフトウェアのさまざまな分類を見分ける。
• Identify the skills that are required for a software engineer
• ソフトウェアエンジニアに必要な技能を挙げる。
This section introduces software engineering along with the challenges associated with the creation and evolution of software. The various fundamental facets of software engineering are presented including the skills required to properly engineer software and the role that a software engineer is expected to play within a software team.
英語のヒント
この節では、ソフトウェアの作成と発展に伴う課題と併せて、ソフトウェア工学を紹介する。適切にソフトウェアを開発するために必要な技能や、ソフトウェア開発チームのなかでエンジニアに期待される役割など、ソフトウェア工学のさまざまな基本的側面を扱う。
The Intent of Software Engineeringソフトウェア工学の目的
The IEEE1 defines software engineering as the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. It is important to understand how software engineering fits into the larger context of computer science. It is also important to understand the role of a software engineer and how it fits within an organization.
英語のヒント
IEEE1は、ソフトウェア工学を、ソフトウェアの開発・運用・保守に対して、体系的で規律があり、数量化できるアプローチを適用すること、すなわち、ソフトウェアへの工学の適用と定義している。ソフトウェア工学が、コンピューターサイエンスというより大きな領域のなかでどのように位置づけられるのかを理解することが重要である。また、ソフトウェアエンジニアの役割と、その役割が組織のなかにどう位置づけられるかを理解することも重要である。
The reference to “a systematic, disciplined, quantifiable approach” does not mean a bureaucratic, document-laden approach. Software engineering relies on various methodologies/processes, methods and tools that may be used to professionally develop and maintain quality software while optimizing the use of resources such as time and cost. Selecting the right processes and methods for a project and using tools to accelerate the ongoing development of a solution is challenging especially when requirements are changing and many software developers are working together to tackle a large project. Part of the issue is that software engineering as a process cannot (in general) be fully automated and therefore it is difficult to keep all the activities aligned with the end goal of delivering a solution on time and within budget.
英語のヒント
「体系的で規律があり、数量化できるアプローチ」という表現は、官僚的で大量の文書に埋もれるようなやり方を意味するわけではない。ソフトウェア工学は、時間や費用などの資源の使い方を最適化しつつ、品質の高いソフトウェアを専門的に開発・保守するための、さまざまな方法論・工程、手法、ツールに基づいている。プロジェクトに適した工程と手法を選び、ツールによって継続中の開発を加速させることは難しい。要求が変化し、多数の開発者が大規模なプロジェクトに協力して取り組んでいる場合には、なおさらである。その一因は、ソフトウェア工学の工程を一般に完全自動化することはできず、期限と予算を守って成果を届けるという最終目標に、すべての活動の向きをそろえることが難しい点にある。
Selecting and tailoring software engineering processes and methods as well as using the right tools in the right fashion to meet this end goal, which in essence defines a majority of what a software engineer does, is covered in detail as part of this chapter.
英語のヒント
この最終目標を達成するために、ソフトウェア工学の工程や手法を選んで調整し、適切なツールを適切な方法で使うことは、実質的にはソフトウェアエンジニアの仕事の大部分を占める。本章では、この点を詳しく扱う。
CONCEPTS IN PRACTICE概念を実践する
Software and Our Daily Livesソフトウェアと私たちの日常生活
Software is everywhere, and most of us interact with a software system on a daily basis. Yet the importance of software is expected to grow even greater in the coming decades. Although most software revenue comes from a generic software, software systems tailored to specific needs can be found everywhere, from our cars to our smartwatches. Thus, quite a few of us can expect that we will be involved as customers in some software engineering process during our professional lives. People who are familiar with concepts of software engineering can better oversee the projects they are working on by interacting with customers so their needs are clearly specified and by working with developers to smooth out the development process and ensure the final product meets customers’ expectations.
英語のヒント
ソフトウェアは至る所にあり、私たちの大半は毎日のようにソフトウェアシステムを利用している。それでも、今後数十年間でその重要性はさらに高まると見込まれている。ソフトウェアの収益の大部分は汎用ソフトウェアによるものだが、自動車からスマートウォッチまで、特定のニーズに合わせたシステムも至る所で使われている。したがって、私たちの相当数が、仕事をするなかで何らかのソフトウェア工学の工程に顧客として関わることになるだろう。ソフトウェア工学の考え方に通じている人は、顧客とやり取りしてそのニーズを明確にし、開発者と協力して開発を円滑に進め、最終製品が顧客の期待に応えるようにすることで、担当するプロジェクトをより適切に監督できる。
Software Engineering Teamsソフトウェア工学のチーム
In most organizations, software is developed by a team of software engineers, as well as other people with different backgrounds and skills. To be effective, the project team must be organized in a way that maximizes the use of each person’s skills and abilities and emphasizes the importance of teamwork to address all the aspects of the projects. This is especially true for complex projects. Effective project managers focus on problem-solving and end-product quality, and thus they may organize software teams in a variety of ways. The key factors considered when selecting a team organizational model are as follows:
英語のヒント
ほとんどの組織では、ソフトウェアエンジニアに加え、異なる経歴や技能を持つ人々からなるチームがソフトウェアを開発する。効果的に働くためには、一人ひとりの技能や能力を最大限に生かし、プロジェクトのあらゆる側面に対応するためのチームワークを重視する形で、チームを編成しなければならない。複雑なプロジェクトでは、これは特に重要である。有能なプロジェクトマネージャーは、問題解決と最終製品の品質を重視するため、さまざまなやり方でソフトウェア開発チームを編成する。チームの組織モデルを選ぶ際には、主に次の要因を考慮する。
• difficulty of the problem to be solved
• 解決すべき問題の難しさ。
• degree to which the problem can be modularized
• 問題をモジュールに分割できる程度。
1 While IEEE is an acronym for the Institute of Electrical and Electronics Engineers, the organization has expanded to include all technology professionals. This worldwide organization is “dedicated to advancing technology for the benefit of humanity.” Examples of the work it does is publishing journals to disseminate the latest research, creating model curricula that help universities provide up-to-date degree programs, and defining standards that ensure electronic devices are interoperable. You can find more about the IEEE at www.ieee.org.
英語のヒント
1 IEEEはInstitute of Electrical and Electronics Engineers(電気電子技術者協会)の略称だが、同団体はあらゆる技術分野の専門家を対象とするまでに活動を広げている。この世界的な組織は「人類の利益のために技術を前進させることに尽力する」団体である。最新の研究を広める学術誌の刊行、大学が最新の学位課程を提供するためのモデルカリキュラムの作成、電子機器の相互運用性を保証する規格の策定などを行っている。IEEEについて詳しくはwww.ieee.orgを参照。
• required quality, reliability, and other nonfunctional requirements of the system to be built
• 構築するシステムに求められる品質、信頼性、その他の非機能要件。
• delivery date
• 納期。
• budget limitations
• 予算上の制限。
• team lifetime (i.e., overall period of time during which the team members will work together)
• チームの存続期間(メンバーが一緒に働く全期間)。
During the creation of a software solution, software engineer team members may take on various roles, such as:
英語のヒント
ソフトウェアによる仕組みを作成する際、チームのエンジニアは次のようなさまざまな役割を担うことがある。
• project manager, who is responsible for making sure that the project gets completed on time and on budget
• プロジェクトマネージャー:プロジェクトを期限と予算の範囲内で確実に完了させる責任を負う。
• enterprise or solution portfolio architect, who makes high-level design decisions on high-level modeling or solution design building blocks and their interconnections to best address functional requirements as well an nonfunctional ones such as performance and usability
英語のヒント
• エンタープライズアーキテクトまたはソリューションポートフォリオアーキテクト:機能要件に加え、性能や使いやすさなどの非機能要件にも最適に対応するため、高水準のモデリングや仕組みの設計に用いる構成要素、およびそれらの相互接続について、全体に関わる設計上の判断を行う。
• user experience (UX) designer, who plans how users will interact with the software system; this involves tasks like designing the user interface (UI), making wireframes and prototypes, and conducting user testing to ensure the software is user-friendly and meets user needs
英語のヒント
• ユーザーエクスペリエンス(UX)デザイナー:利用者がソフトウェアシステムとどう関わるかを計画する。ユーザーインターフェース(UI)の設計、ワイヤーフレームや試作品の作成、利用者によるテストなどを行い、ソフトウェアが使いやすく、利用者のニーズに応えるようにする。
• software developer, who analyzes requirements, refines the design, writes and tests code, and collaborates with the operations team to deploy the software into testing and production environments
英語のヒント
• ソフトウェア開発者:要求を分析し、設計を練り上げ、コードを書いてテストする。また、運用チームと協力して、ソフトウェアをテスト環境や本番環境へ配備する。
• quality assurance tester, who checks for bugs and validates that the system meets the requirements
英語のヒント
• 品質保証テスター:不具合を調べ、システムが要求を満たしているかを検証する。
It is common for one team member to act in several roles (for example, a solution architect might also be a software developer), and some roles may be filled by multiple team members (for example, there are typically multiple software developers on a project). Additionally, a software engineer may work directly with other people, including:
英語のヒント
一人のメンバーが複数の役割を務めることはよくある。たとえば、ソリューションアーキテクトがソフトウェア開発者を兼ねる場合がある。また、一つの役割を複数人が担う場合もある。たとえば、通常、一つのプロジェクトには複数の開発者がいる。さらに、ソフトウェアエンジニアは、次のような人々と直接協力して働くこともある。
• product owners, who are generally project sponsors and provide the requirements and overall guidance on what is expected from the solution
• プロダクトオーナー:一般にはプロジェクトの支援責任者であり、要求や、成果に何を期待するかという全体的な指針を示す。
• subject matter experts (SMEs), who are specialists in areas such as business, technology, products, or other topics as needed
• 分野の専門家(SME):業務、技術、製品、その他の必要な領域に精通する専門家。
• database administrators, who focus on areas such as data storage, organization, and access associated with a software solution
• データベース管理者:ソフトウェアによる仕組みのデータ保存、整理、アクセスなどを主に扱う。
• operations specialists, who are IT and/or DevOps professionals with a focus on computer hardware and software operations
• 運用の専門家:コンピューターのハードウェアやソフトウェアの運用を専門とする、ITやDevOpsの実務者。
Because projects can involve a large number of people working in many different roles, communication and interaction among team members is critical for a project to succeed. To keep the team running smoothly, projects are ideally structured so they include the following:
英語のヒント
プロジェクトには多様な役割を担う多数の人々が関わることがあるため、メンバー同士の意思疎通ややり取りは成功の鍵となる。チームを円滑に動かすには、プロジェクトが次の事項を備えるよう構成されていることが望ましい。
• deadlines that provide sufficient time for team members to fully complete their tasks and ensure results that match the requirements
• メンバーが自分の作業を最後まで行い、要求に合った成果を確保するのに十分な時間がある締め切り。
• standards for how business and technology decisions are made to avoid business or technology-related disagreements
• 業務や技術をめぐる意見の対立を避けるための、業務上・技術上の意思決定の基準。
• processes and procedures that make it easy for team members to coordinate their activities
• メンバーが互いの活動を調整しやすくする工程と手順。
• clear definitions of each team members’ role and authority so that everyone knows who is accountable for each task and where questions should be directed
英語のヒント
• 各メンバーの役割と権限の明確な定義。これによって、誰が各作業に責任を持ち、質問をどこへ向ければよいのかを全員が把握できる。