プリンキピア

第9章ソフトウェア工学

CONCEPTS IN PRACTICE概念を実践する
The Ever-Changing World of Software Platforms絶えず変わるソフトウェアプラットフォームの世界
Imagine the life of a software engineer developing programs in the 1980s, which required typing programs on a terminal and printing punch cards that were fed into a mainframe computer! The world of software development is constantly evolving, and the platforms where software runs change rapidly, too. Software engineers need to stay up-to-date on current platforms and also become aware of what is coming next.
英語のヒント
1980年代にプログラムを開発していたソフトウェアエンジニアの生活を想像してみよう。端末でプログラムを入力し、メインフレームへ読み込ませるパンチカードを作成しなければならなかったのである。ソフトウェア開発の世界は絶えず変化しており、ソフトウェアが動作するプラットフォームも急速に変わる。エンジニアは現在のプラットフォームについて最新の知識を保つとともに、次に何が登場するのかも把握しておく必要がある。
A Trip through Time
時代をたどる旅
Can you imagine using a computer without a mouse or a graphical interface? Let us take a look at the way software platforms have evolved over time:
マウスもグラフィカルな画面もないコンピューターを使うところを想像できるだろうか。ソフトウェアのプラットフォームが時代とともにどう変化したかを見てみよう。
• Early Days (1980s): Mainframes and minicomputers were giant, even room-sized, and software was often run from the command line.
• 初期(1980年代):メインフレームやミニコンピューターは巨大で、一部屋を占めるほどのものもあり、ソフトウェアはコマンドラインから実行されることが多かった。
• The Rise of the Desktop (1990s): Welcome to the age of Windows and Mac! Graphical interfaces made computers more user-friendly, and client-server systems allowed applications to run across multiple machines.
• デスクトップの台頭(1990年代):WindowsとMacの時代へようこそ。グラフィカルな画面によってコンピューターは使いやすくなり、クライアント・サーバー方式によってアプリケーションを複数の機械にまたがって実行できるようになった。
• The Web Takes Over (2000s): The Internet exploded, and Java and C# became popular languages for building web applications.
• Webの席巻(2000年代):インターネットが爆発的に普及し、Webアプリケーションを構築する言語としてJavaやC#の人気が高まった。
• Mobile Mania (2010s): Smartphones like the iPhone changed the game. Software development focused on mobile apps that took advantage of constant connectivity.
• モバイル熱(2010年代):iPhoneなどのスマートフォンが状況を一変させた。ソフトウェア開発では、常時接続を生かすモバイルアプリが重視されるようになった。
The Future Is Unknown but Exciting
未来は未知だが、刺激に満ちている
Augmented and virtual reality (AR/VR), machine learning (ML), artificial intelligence (AI), the Internet of Things (IoT), and blockchain are some emerging technologies that are shaping up the future of Metaverse software platforms. Who knows what exciting new platforms await? Curious and adaptable software engineers will be best positioned to thrive in this ever-changing landscape.
英語のヒント
拡張現実・仮想現実(AR/VR)、機械学習(ML)、人工知能(AI)、モノのインターネット(IoT)、ブロックチェーンなどの新技術が、メタバースのソフトウェアプラットフォームの未来を形づくりつつある。この先、どんな魅力的なプラットフォームが待っているのだろう。好奇心があり、変化に適応できるエンジニアこそ、この絶えず変わる世界で活躍するのに最も有利な立場にいる。
Software Requirementsソフトウェアの要求
Software is developed based on requirements, which are categorized as functional and nonfunctional, as shown in Figure 9.2. Functional requirements state what the software needs to do in terms of tangible functionality, such as the login or registration functionality that allows users to access a given piece of software such as their Facebook account. Nonfunctional requirements are measurable qualities of a piece of software, such as usability, performance, and other quality aspects.
英語のヒント
ソフトウェアは要求に基づいて開発される。要求は、図9.2のように機能要件と非機能要件に分類される。機能要件は、ソフトウェアが何をしなければならないかを、具体的な機能として示す。たとえば、Facebookアカウントなどの特定のソフトウェアへアクセスできるようにする、ログインや登録の機能である。非機能要件は、使いやすさ、性能、その他の品質上の側面といった、ソフトウェアの測定可能な性質を表す。
Figure 9.2

attribution: Copyright Rice University, OpenStax, under CC BY 4.0 license · CC BY 4.0 · Source出典

Figure 9.2 The various types of software requirements can be organized in hierarchies as functional and nonfunctional requirements based on aspects that relate to what the software does along with the qualities of the software. (attribution: Copyright Rice University, OpenStax, under CC BY 4.0 license)
図9.2 ソフトウェアのさまざまな要求は、ソフトウェアが行うことと、その品質に関わる側面に基づき、機能要件と非機能要件の階層として整理できる。(帰属:Rice University、OpenStax著作権、CC BY 4.0ライセンス。)
As noted earlier, a functional requirement relates to the services the system provides to the users. It reflects the user’s expectation about the inherent characteristics of the software, (i.e., the functions it must perform). Functional requirements can include those phenomena that are generally seen or done when using a software solution, such as the information that is entered or that is generated by the software, the authenticating rules for using the software, or whether there should be an audible alert (such as a beep) when an action is selected. A nonfunctional requirement describes a desired quality or feature (i.e., constraint) and covers aspects of the software such as flexibility, maintainability, performance, portability, reliability, scalability, security, and more. For example, a nonfunctional requirement could specify that responses from the software must occur within a specific time frame, or that a software system must be able to handle a certain number of transactions at any given time. Another example of a constraint that a nonfunctional requirement may express is the need to use a specific programming language or follow a particular standard.
英語のヒント
先に述べたように、機能要件はシステムが利用者へ提供するサービスに関わる。ソフトウェアに備わるべき特性、つまり果たすべき機能についての、利用者の期待を表している。入力される情報やソフトウェアが生成する情報、利用の際の認証規則、操作を選んだときにビープ音などの音による通知を出すかどうかなど、利用時に一般に見られる、または行われる事柄を含む。非機能要件は、望まれる性質や特性、すなわち制約を記述し、柔軟性、保守性、性能、移植性、信頼性、拡張可能性、安全性などを扱う。たとえば、ソフトウェアが一定の時間内に応答することや、任意の時点で一定数のトランザクションを処理できることを指定する場合がある。特定のプログラミング言語を使う、あるいは特定の規格に従う必要性も、非機能要件で表す制約の例である。
Nonfunctional features are sometimes categorized in terms of static or dynamic qualities. A static quality is a nonfunctional feature that is unchangeable and thus might be associated, for example, with the source code and related documentation, or with legal or project-environment specific requirements. A dynamic quality is a nonfunctional feature that relates to the qualitative behavior of software while it is in use, which means that is also depends on the hardware that the system runs on. Both quality types are measurable features rather than functions that are present or absent. Examples of static qualities include:
英語のヒント
非機能的な特性は、静的な品質と動的な品質に分類されることがある。静的な品質は変化しない非機能的特性であり、たとえばソースコードや関連文書、法的な要求、プロジェクト環境に固有の要求に関わる。動的な品質は、利用中のソフトウェアの振る舞いの質に関する非機能的特性であり、そのシステムが動作するハードウェアにも左右される。どちらも、機能があるかないかという区別ではなく、測定できる特性である。静的な品質の例には、次のものがある。
• maintainability, which is a measure of the amount of work required to fix bugs, improve performance, and keep the system running
• 保守性:不具合を修正し、性能を改善し、システムの稼働を維持するために必要な作業量の尺度。
• extensibility, which is a measure of the amount of work and cost of adding new features to software
• 拡張性:ソフトウェアへ新しい機能を追加するために必要な作業量と費用の尺度。
• flexibility, which is a measure of the difficulty of updating the system to meet changing requirements
• 柔軟性:要求の変化に対応するようシステムを更新する際の難しさの尺度。
• portability, which is a measure of the amount of work and cost of migrating software solutions
• 移植性:ソフトウェアによる仕組みを別の環境へ移すために必要な作業量と費用の尺度。
• usability, which is a measure of how intuitive the user interface is
• 使用性:ユーザーインターフェースがどれほど直感的に使えるかの尺度。
Examples of dynamic qualities are:
動的な品質の例は、次のとおりである。
• performance, which is a measurement of how quickly the system responds to requests it receives
• 性能:システムが受け取った要求に、どれほど速く応答するかの尺度。
• throughput, which is a measure of how much input the system can process within a given time frame
• スループット:一定の時間内にシステムが処理できる入力の量の尺度。
• availability, which is a measure of how often the system will be ready and active for users
• 可用性:利用者が使える状態でシステムが待機・稼働している頻度の尺度。
• scalability, which is the measurement of the work and cost to increase a system’s throughput
• スケーラビリティ:システムのスループットを増やすために必要な作業量と費用の尺度。
• security, which is a measure of confidence that data is protected from unauthorized disclosure and that systems are protected from unauthorized access
• セキュリティ:データが不正な開示から、システムが不正なアクセスから守られていると、どの程度確信できるかの尺度。
The relative importance of the preceding characteristics depends on the solution requirements and the environment in which they are to be used. For example, in an Internet banking application, availability and usability are typically key features advertised to customers. Security would also be important, as the software solution would need to comply with regulatory requirements. In a brokerage system, performance would be an important requirement because the software system will need to display prices and process users’ orders in real time.
英語のヒント
以上の特性の相対的な重要性は、その仕組みに対する要求と、利用される環境によって異なる。たとえば、インターネットバンキングでは、可用性と使用性が顧客への訴求点になることが多い。規制上の要求に従う必要もあるため、セキュリティも重要である。証券取引のシステムでは、価格を表示して利用者の注文をリアルタイムに処理しなければならないため、性能が重要な要求となる。