プリンキピア

第9章ソフトウェア工学

Figure 9.1

credit left: modification of “Flickr - Nicholas T – Enduring” by Nicholas A. Tonelli/Wikimedia Commons, CC BY 2.0; credit middle: modification of “Lexus LF-A” by Nan Palmero/Flickr, CC BY 2.0; credit right: modification of "M25, Orbital, Approaching Bright - Heads up Display" by Jay Galvin/Flickr, CC BY 2.0 · CC BY 2.0 · Source出典

Figure 9.1 Software engineering is used to develop solutions that are used in everyday life, such as controlling digital instruments on automobiles’ dashboards to optimize the driving experience. (credit left: modification of “Flickr - Nicholas T – Enduring” by Nicholas A. Tonelli/Wikimedia Commons, CC BY 2.0; credit middle: modification of “Lexus LF-A” by Nan Palmero/Flickr, CC BY 2.0; credit right: modification of "M25, Orbital, Approaching Bright - Heads up Display" by Jay Galvin/Flickr, CC BY 2.0)
図9.1 ソフトウェア工学は、運転の体験を最適化するために自動車のダッシュボード上のデジタル計器を制御するなど、日常生活で使われる仕組みの開発に用いられる。(左の出典:Nicholas A. Tonelli/Wikimedia Commons「Flickr - Nicholas T – Enduring」を改変、CC BY 2.0。中央の出典:Nan Palmero/Flickr「Lexus LF-A」を改変、CC BY 2.0。右の出典:Jay Galvin/Flickr「M25, Orbital, Approaching Bright - Heads up Display」を改変、CC BY 2.0。)

Introductionはじめに

What is software engineering? Why is software engineering important? How is software engineering done? Well, software engineering impacts every industry and all aspects of life. One sector where software engineering has been revolutionary is the automobile industry. Software that has been written to automate the dashboard is being reinvented again and again to augment the driving experience with software solutions such as universal head-up displays for cars. These displays provide speed and navigation information at eye level and thus keep drivers from having to glance down at their dashboards while driving.
英語のヒント
ソフトウェア工学とは何だろうか。なぜ重要なのだろうか。どのように行われるのだろうか。ソフトウェア工学は、あらゆる産業と生活のあらゆる側面に影響を及ぼしている。とりわけ革新的な変化をもたらしてきた分野の一つが自動車産業である。ダッシュボードを自動化するために書かれたソフトウェアは、さまざまな車に使えるヘッドアップディスプレイなどのソフトウェアによる仕組みで運転体験を向上させるため、何度も作り直されている。こうしたディスプレイは速度や経路案内を目の高さに表示する。そのため、運転者は走行中にダッシュボードへ視線を落とさずに済む。
Software is ubiquitous nowadays, and its presence is changing traditional industries. For example, software is more important than ever before in automobiles, and automobile manufacturers are responding by investing more and more on its development. The development of digital health-care devices has similarly caused the health-care industry to invest in software development. Even customer support operations are changing by utilizing Generative AI (GenAI) software such as ChatGPT to answer questions about diseases and how they spread. As spending on software development increases, traditional companies become technology companies in which software and its development play important and most often crucial roles. Advances in embedded systems, communication technologies, machine learning, and intelligent autonomous solutions, such as autonomous cars, large language models (e.g., ChatGPT), and insulin pumps and other wearable health technologies, will further boost this trend across most industries.
英語のヒント
今日、ソフトウェアは至る所に存在し、従来の産業を変えつつある。たとえば、自動車におけるソフトウェアの重要性はかつてなく高まっており、自動車メーカーも開発への投資を増やして対応している。同様に、デジタル医療機器の発展によって、医療業界もソフトウェア開発への投資を進めている。顧客対応の業務さえ変わりつつあり、ChatGPTなどの生成AI(GenAI)ソフトウェアが、病気やその広がり方に関する質問への回答に使われている。ソフトウェア開発への支出が増えるにつれ、従来型の企業は、ソフトウェアとその開発が重要な、しかも多くの場合には決定的な役割を果たすテクノロジー企業へと変わっていく。組み込みシステム、通信技術、機械学習に加え、自動運転車、大規模言語モデル(ChatGPTなど)、インスリンポンプなどの装着型医療技術といった知的な自律型の仕組みが進歩すれば、大半の産業でこの傾向はさらに強まるだろう。
Software engineering focuses on the design and development of software. As companies undergo digital transformations, software engineers must know and apply sound principles to the solutions they help create. They must collaborate with enterprise and solution architects and be familiar with software engineering life cycle processes to address the needs of the companies they work for and to use approaches, techniques, and tools to design and develop meaningful software.
英語のヒント
ソフトウェア工学は、ソフトウェアの設計と開発を中心に扱う。企業がデジタル変革を進めるなかで、ソフトウェアエンジニアは、自らが作成に携わる仕組みに対して、確かな原則を理解し適用しなければならない。所属する企業のニーズに応えるため、エンタープライズアーキテクトやソリューションアーキテクトと協力し、ソフトウェア工学のライフサイクルの工程に精通する必要がある。そして、意義のあるソフトウェアを設計・開発できるよう、各種のアプローチ、技法、ツールを使いこなさなければならない。
As businesses evolve and technology changes, so do the expectations placed on a software engineer. For example, consider how an average automobile from forty years ago had little to no software engineering in its operation. In today’s automobile industry, software engineers are creating a variety of solutions that are incorporated throughout a vehicle. This ranges from the software running on interactive screens on dashboards that feature music systems and navigational aids to the software that allows for control of hands-free phone calling. As software engineering solutions in automobiles continue to evolve and be applied to all aspects of driving, they are paving the way toward self-driving, autonomous vehicles. Software engineers face many challenges because software engineering processes always need to be tailored to each project, and software engineers must be able to help understand, design, construct, and deploy software solutions that move that project forward. Thus, the process of developing software for an automobile that supports embedded features such as heads-up displays, lane departure systems, and even embedded solutions that alert the driver about mechanical issues such as low air pressure in tires would be quite different from that for a smartwatch that features applications that help users track their exercise and monitor their sleep patterns. While software engineers follow a process to derive the solutions they build, they must constantly adapt to handle issues and changes associated to the business environment they work within as well as refine the technology and approaches they use.
英語のヒント
ビジネスが発展し技術が変化すると、ソフトウェアエンジニアに寄せられる期待も変わる。たとえば、40年前の一般的な自動車では、その動作にソフトウェア工学が関わることはほとんど、あるいはまったくなかった。今日の自動車産業では、エンジニアが開発したさまざまな仕組みが車両の至る所に組み込まれている。音楽システムや経路案内の機能を備えたダッシュボードの対話型画面を動かすソフトウェアから、ハンズフリー通話を制御するソフトウェアまで、その範囲は広い。自動車のソフトウェアが発展を続け、運転のあらゆる面に使われるにつれ、自ら走行する自律型の車両への道が開かれている。ソフトウェア工学の工程はプロジェクトごとに調整する必要がある。そのため、エンジニアは多くの課題に直面しながら、そのプロジェクトを前進させるソフトウェアの理解、設計、構築、配備に貢献できなければならない。したがって、ヘッドアップディスプレイ、車線逸脱警報装置、さらにはタイヤの空気圧低下などの機械的な問題を運転者へ知らせる組み込み機能を備えた自動車のソフトウェアを開発する工程は、運動の記録や睡眠の監視を助けるアプリを備えたスマートウォッチの開発工程とは大きく異なる。エンジニアは工程に従って仕組みを生み出す一方で、働く事業環境に伴う問題や変化に対応するため、常にやり方を調整し、使用する技術やアプローチを改善する必要がある。
Software engineers also need to understand business requirements to ensure the software solutions they create are successful. This is made more difficult as requirements constantly change, or as people involved in a project have conflicting expectations. As anyone who has sent a text to a friend about dinner plans only to discover that it has been changed to be a discussion of “ducks” and other ornithological matters, even a seemingly straightforward requirement like “automatically correct misspelled words” has multiple interpretations. Furthermore, assessing whether the misbehavior of solutions results from broken code or a misunderstanding of requirements often leads to confusion and disagreements between the software engineers and their customers. To minimize such issues, it is important for software engineers to understand their role and to familiarize themselves with software engineering processes, the types of solutions and technologies that are available, and their applicability to a given project at a given time.
英語のヒント
ソフトウェアエンジニアは、作成する仕組みを成功させるために、業務上の要求も理解する必要がある。要求が絶えず変化したり、プロジェクトの関係者が相反する期待を抱いていたりすると、その理解はいっそう難しくなる。夕食の相談をするつもりで友人にメッセージを送ったのに、文面が「アヒル」など鳥類学的な話題に変わっていた、といった経験をした人なら分かるだろう。「つづりを間違えた単語を自動修正する」という一見単純な要求にも、複数の解釈がある。さらに、仕組みの誤動作がコードの不具合に由来するのか、それとも要求の取り違えによるのかを判断する際、エンジニアと顧客の間で混乱や意見の対立が生じることも多い。こうした問題を最小限に抑えるには、自分の役割を理解し、ソフトウェア工学の工程、利用できる仕組みや技術の種類、そして特定の時点で特定のプロジェクトにそれらを適用できるかどうかについて、理解を深めることが大切である。
Consider a scenario in which a software engineer is working at a company called TechWorks. The engineering team they are part of is tasked with a project to add new software features to the dashboard of an upcoming electric automobile. Because the process of software engineering cannot (in general) be fully automated, software engineers face the challenge of having to determine the best software process, approaches, and tools to be used for the project. They must do so while collaborating with a number of people and facing changes in requirements, and they still have to deliver solutions on time and within budget. In the example of the automobile dashboard, the design and development of a new digital speedometer requires coordinated efforts from all the team members and their alignment with the same goals. Fortunately, as you will learn in this chapter, there are a variety of software frameworks and tools that the software engineering team can apply to a project to increase its chance of success.
英語のヒント
TechWorksという会社で働くソフトウェアエンジニアを想定してみよう。その人が所属する技術チームは、発売予定の電気自動車のダッシュボードへ新しいソフトウェア機能を追加する仕事を任された。ソフトウェア工学の工程は一般に完全な自動化ができないため、エンジニア自身が、そのプロジェクトに最適な工程、アプローチ、ツールを見極めなければならない。多くの人と協力し、要求の変化に直面しながらそれを行い、なおかつ期限と予算を守って成果を届ける必要がある。ダッシュボードの例でいえば、新しいデジタル速度計の設計・開発には、チームの全員が協調して取り組み、同じ目標に向かって足並みをそろえることが求められる。幸い、本章で学ぶように、ソフトウェア工学のチームがプロジェクトの成功の可能性を高めるために使える枠組みやツールは、さまざまに用意されている。