第9章ソフトウェア工学
The Nature and Impact of Softwareソフトウェアの性質と影響
Software has become an essential part of our lives. It has revolutionized how we communicate, work, learn, and entertain ourselves. From the smartphones in our pockets to the complex systems that power hospitals and transportation networks, software is everywhere.
英語のヒント
ソフトウェアは、私たちの生活に欠かせないものになった。意思疎通、仕事、学習、娯楽のあり方を大きく変えてきた。ポケットの中のスマートフォンから、病院や交通網を動かす複雑なシステムまで、ソフトウェアは至る所にある。
Because the focus of software engineering is to build software, it is important to understand what software is. A piece of software is made up of instructions that can be executed and generally includes documentation that describes the software operation and use. These instructions tell computers what to do. They function like a recipe that tells a chef how to cook a meal. Software is designed to accomplish a specific objective or purpose. Word processing software has the objective or purpose to help people create documents. A game has the objective or purpose of providing entertainment. The software built into an automobile has many purposes, including helping a driver drive the car, helping the owner maintain the car, and helping a driver and/or passengers avoid getting lost.
英語のヒント
ソフトウェア工学はソフトウェアを構築することを中心に扱うので、まずソフトウェアとは何かを理解することが大切である。ソフトウェアは、実行可能な命令で構成され、通常、その動作や使い方を説明する文書も含む。命令はコンピューターに何をすべきかを伝える。料理人に料理の作り方を伝えるレシピのように働くのである。ソフトウェアは、特定の目標や目的を達成するために設計される。文書作成ソフトウェアは文書を作るのを助けること、ゲームは娯楽を提供することを目的とする。自動車に組み込まれたソフトウェアには、運転者の運転を助ける、所有者の整備を助ける、運転者や乗客が道に迷わないようにするなど、多くの目的がある。
Software is generally created based on a set of requirements, and although software does not wear out, these requirements often change over time. Software must, therefore, be updated often to respond to these changes. In addition, software can contain defects (i.e., bugs), which are expected to be fixed in a reasonable time after they are reported.
英語のヒント
ソフトウェアは通常、一定の要求に基づいて作られる。ソフトウェアそのものは摩耗しないが、要求は時間とともに変化することが多い。そのため、変化に応じて頻繁に更新しなければならない。また、ソフトウェアには欠陥、つまりバグが含まれることもある。報告された不具合は、妥当な期間内に修正することが期待される。
Over the years, software engineering researchers and practitioners have converged on defining a generic software engineering process model, or process framework, that can be used as a template to characterize the generic activities performed by all the software engineering process models that are used to support the software development life cycle (SDLC). The SDLC is a structured set of the framework activities required to develop a software solution based on a set of requirements. A process framework generally encompasses four framework (or generic) activities: inception, elaboration, construction, and deployment. These activities are also known as phases.
英語のヒント
長年にわたり、ソフトウェア工学の研究者や実務者は、汎用的なソフトウェア工学のプロセスモデル、すなわちプロセスの枠組みの定義について共通の考えへと収束してきた。この枠組みは、ソフトウェア開発ライフサイクル(SDLC)を支えるさまざまなプロセスモデルに共通する活動を特徴づける、ひな型として利用できる。SDLCとは、一定の要求に基づいてソフトウェアによる仕組みを開発するために必要な、枠組み上の活動を構造化したものである。プロセスの枠組みは通常、立ち上げ、推敲、構築、配備という四つの基本的な活動を含む。これらの活動はフェーズとも呼ばれる。
You’ll learn more about each of these phases later in the chapter. In the meantime, it should be noted that the deployment phase covers integration and user acceptance testing, installation, and maintenance/support activities. This means that maintenance is an integral part of the software engineering process. In fact, the cost of software maintenance/continuous deployment today often exceeds the cost of software construction, especially if software remains in use for a long time.
英語のヒント
各フェーズは、本章の後半で詳しく学ぶ。ここではまず、配備のフェーズに、統合テスト、利用者による受け入れテスト、インストール、保守・支援の活動が含まれることを確認しておこう。つまり、保守もソフトウェア工学の工程に欠かせない一部なのである。実際、現在ではソフトウェアの保守や継続的な配備にかかる費用が、構築そのものの費用を上回ることも多い。ソフトウェアが長期間使われ続ける場合には、特にそうである。
Categories of Softwareソフトウェアの分類
There are three main categories of software. Software that enables you to control hardware and provides an environment in which other software can run is called system software. An example of this is an operating system, such as Microsoft Windows, Android, and MacOS, which runs on a laptop or a mobile phone and typically controls and provides access to the computer’s basic functionality. This system software also includes driver software, which is the code used by hardware devices to interact with the operating system.
英語のヒント
ソフトウェアは、大きく三つに分類される。ハードウェアを制御し、ほかのソフトウェアが動作する環境を提供するものを、システムソフトウェアという。たとえば、Microsoft Windows、Android、MacOSなどのオペレーティングシステムがこれに当たる。これらはノートパソコンや携帯電話で動作し、通常、コンピューターの基本機能を制御して、その機能へのアクセスを提供する。システムソフトウェアにはドライバーソフトウェアも含まれる。これは、ハードウェア機器がオペレーティングシステムとやり取りするために使うコードである。
Software that enables you to fulfill common tasks, such as creating a text document, drawing a picture, or playing music, is called application software. Examples include Microsoft Word and Paint, MacOS Pages, and iOS Files. Application software may include specialized categories of software such as scientific (or engineering) software, which is software that aids you in solving mathematical, scientific, and engineering problems, such as finding the roots of an equation. It can also include software services, which are software programs that provide specific responses or actions based on a request, such as returning stock quotes, obtaining weather conditions, or finding what current jobs are available.
英語のヒント
文書の作成、作図、音楽の再生など、一般的な作業を行えるようにするソフトウェアを、アプリケーションソフトウェアという。Microsoft WordとPaint、MacOSのPages、iOSのFilesなどが例として挙げられる。アプリケーションソフトウェアには、科学技術計算用、または工学用ソフトウェアといった専門的な分類も含まれる。これは、方程式の根を求めるなど、数学、科学、工学の問題の解決を助けるソフトウェアである。また、要求に応じて特定の応答や動作を行うプログラムである、ソフトウェアサービスも含まれる。株価情報を返す、天候の情報を取得する、現在募集している仕事を探す、といったものがその例である。
Software that is integrated with hardware and can include both application and system software features is called embedded software. Examples include software in a smartwatch, an automobile control system, or microwave. Interaction with embedded software is usually limited, and users are often unaware that they are interacting with software. With the increased popularity of the Internet of Things (IoT), embedded software development is increasing.
英語のヒント
ハードウェアと一体化し、アプリケーションソフトウェアとシステムソフトウェアの両方の機能を含むことがあるものを、組み込みソフトウェアという。スマートウォッチ、自動車の制御装置、電子レンジに入っているソフトウェアなどが例である。組み込みソフトウェアとの直接のやり取りは通常限られており、利用者はソフトウェアを操作していることに気づかない場合も多い。モノのインターネット(IoT)の普及に伴い、組み込みソフトウェアの開発も増えている。
Software engineers must often deal with legacy software that has been written in the past, relies on obsolete technology, and is still in use today. This software presents special challenges to those who maintain it, especially when they need to adapt it to a new computing environment or technology and when they are to extend its functionality so that it is interoperable with new software systems. The need for software maintenance of legacy software stems from the rapid changes that have taken place in hardware. For example, a common smartphone contains a more powerful processor and more memory than computers that were used just twenty years ago. Changes in hardware are accompanied by changes in software technologies, and these are quickly adopted by users who are then reluctant to use legacy software in its original shape. For example, the graphical user interface of a software system that was developed twenty years ago now looks outdated and leads to an unpleasant user experience.
英語のヒント
ソフトウェアエンジニアはしばしば、過去に書かれ、旧式の技術に依存しながら現在も使われている、レガシーソフトウェアを扱わなければならない。こうしたソフトウェアの保守には特有の難しさがある。新しい計算機環境や技術への対応、あるいは新しいシステムと連携できるようにするための機能拡張が必要な場合には、特に難しくなる。レガシーソフトウェアの保守が必要になる背景には、ハードウェアの急速な変化がある。たとえば、一般的なスマートフォンは、わずか20年前に使われていたコンピューターより強力なプロセッサーと多くのメモリを備えている。ハードウェアの変化に伴ってソフトウェア技術も変わり、利用者は新しい技術をすぐに取り入れる。その結果、古いソフトウェアを元の形のまま使うことに抵抗を感じるようになる。たとえば、20年前に開発されたシステムのグラフィカルユーザーインターフェースは、今では時代遅れに見え、使い心地の悪さにつながる。
There have also been dramatic changes in processor technology. Twenty years ago, most processors consisted of a single core, while now it is common for a processor to have multiple cores and coprocessors. This requires changes in how software is programmed because software that can utilize multiple processor cores has a competitive advantage compared with software that uses only a single core. To support these new capabilities, major programming languages have evolved toward supporting multithreading, which makes maintenance of a legacy code base even more challenging.
英語のヒント
プロセッサーの技術も大きく変わった。20年前は大半のプロセッサーが単一のコアで構成されていたが、今では複数のコアやコプロセッサーを備えることが一般的である。複数のコアを利用できるソフトウェアは、単一コアだけを使うソフトウェアに比べて競争上有利になるため、プログラムの書き方も変える必要がある。この新しい能力に対応するため、主要なプログラミング言語はマルチスレッドを支援する方向へ発展してきた。それによって、レガシーコードの保守はいっそう難しくなっている。