第9章ソフトウェア工学
LINK TO LEARNING学習リンク
Which programming language to learn often depends upon the type of programming that needs to be done or what a business currently uses. While there is no perfect way to determine which programming language is used the most, the Tiobe Index (https://openstax.org/r/76TiobeIndex) gives a general idea of which languages are most popular. This index is updated monthly and provides an indication of the changing popularity of programming languages. The rankings are based on factors including the frequency of searching on related topics, courses taught, and more. Of course, each programming language has strengths and weaknesses, so when choosing which language(s) to learn, sometimes it best to focus on the context of the solution you need to create and not just popularity.
英語のヒント
どのプログラミング言語を学ぶかは、必要なプログラミングの種類や、現在その企業が使っている言語によって決まることが多い。最も多く使われている言語を完全に判定する方法はないが、TIOBE Index(https://openstax.org/r/76TiobeIndex)を見れば、人気の高い言語のおおよその見当がつく。この指数は毎月更新され、言語の人気の変化を示している。順位は、関連する話題の検索頻度や、教えられている講座などの要因に基づく。もちろん、言語ごとに長所と短所があるため、習得する言語を選ぶ際には、人気だけでなく、作る必要がある仕組みの状況へ目を向けるほうがよい場合もある。
Unit, Integration, and System Testing
単体テスト、統合テスト、システムテスト
Unit, integration, and system testing deal with ensuring and verifying that the software system works as expected. It typically involves activities to uncover errors that were made inadvertently during the elaboration and construction phases. Code reviews and unit, integration, and system testing are typically done as part of the construction phase by software developers responsible for writing source code. The process whereby the source code written by one developer is manually inspected by another developer is called code review. This is especially useful when the software team consists of developers with different levels of experience.
英語のヒント
単体テスト、統合テスト、システムテストでは、システムが期待どおりに動作することを確かめ、検証する。通常、推敲や構築のフェーズで不注意により生じた誤りを見つけ出す活動を含む。コードレビューと各種テストは、一般に、ソースコードを書く責任を持つ開発者が構築フェーズの一環として行う。ある開発者の書いたソースコードを、別の開発者が手作業で調べる工程を、コードレビューという。経験の程度が異なる開発者からなるチームでは、特に役立つ。
It is worth noting that while SDLCs often include testing task sets within specific phases, testing is an activity that should happen repeatedly throughout the software process independently from the actual phase (or iteration of such) that is currently being executed.
SDLCでは、テストのタスクを特定のフェーズへ位置づけることが多い。ただしテストは、現在実施しているフェーズやその反復の段階に関係なく、工程全体を通して繰り返し行うべき活動である。
Deployment Framework Activity配備の活動
Deployment is the phase that makes software available to users. Finally, the software is released to the users! This phase involves delivering the software to its intended audience (e.g., launching a mobile app on an app store) and providing ongoing support to address any bugs or issues that arise after deployment. In the past, deployment often meant installing the software on a customer’s computer. Today, software is more likely to be installed on special computers or powerful online systems called cloud servers. When deploying software, some configuration might be needed, especially for complex applications. DevOps uses automation to make deployment faster and more reliable. Modern software is often updated frequently using special tools and techniques. As noted, deployment, especially if it is a nontrivial task that is not expected to be done by the customer, typically involves configuring the software solution. In a typical configuration process, the software solution is containerized, or packaged in such a way that it can run on different computer systems easily, and then deployed via a system, called Kubernetes clusters, that automatically manages scalability and availability.
英語のヒント
配備は、ソフトウェアを利用者が使えるようにするフェーズである。いよいよソフトウェアを利用者へ届ける。たとえばアプリストアでモバイルアプリを公開するなど、想定した利用者へ提供し、その後に生じる不具合や問題へ対応する継続的な支援を行う。かつて配備とは、顧客のコンピューターへインストールすることを指す場合が多かった。現在では、専用のコンピューターや、クラウドサーバーと呼ばれる強力なオンラインシステムへインストールすることが多い。特に複雑なアプリケーションでは、配備時に設定が必要になる場合がある。DevOpsは自動化によって配備を速く、確実にする。現代のソフトウェアは、専用のツールや技法を使って頻繁に更新される。配備が単純でなく、顧客自身が行うとは想定されていない場合には、通常、ソフトウェアの設定を伴う。典型的な設定では、異なる計算機システムでも簡単に動くように、ソフトウェアをコンテナー化、すなわち一式にまとめる。そのうえで、スケーラビリティと可用性を自動管理するKubernetesクラスターというシステムを通じて配備する。
The field of DevOps has introduced additional processes and infrastructure to automate many of the software engineering actions that are part of the deployment phase. Together, Agile methodologies and DevOps’ automation have increased the speed, robustness, and scalability with which software can be deployed today. It is worth noting that modern applications’ deployment techniques have evolved quite a bit as a result of DevOps’ automation. Software updates are deployed frequently today using continuous integration and deployment (CI/CD) techniques and tools.
英語のヒント
DevOpsは、配備のフェーズに含まれる多くのアクションを自動化するため、工程や基盤を追加してきた。アジャイルの方法論とDevOpsの自動化を合わせて用いることで、現在の配備の速さ、堅牢性、スケーラビリティは向上している。DevOpsの自動化によって、現代のアプリケーションの配備技法は大きく進歩した。今日では、継続的インテグレーションと配備(CI/CD)の技法やツールを使い、ソフトウェアの更新を頻繁に配備する。
Maintenance
保守
Most deployed software will eventually need updating to add new requirements or fix issues that might arise. The process of updating software after it is deployed is referred to as maintenance. As mentioned earlier, maintenance is a software engineering action that is part of the software process deployment phase. The cost of maintenance can exceed that of development, especially if software remains in use for a long period of time.
英語のヒント
配備されたソフトウェアの大半は、いずれ、新しい要求への対応や、発生する問題の修正のために更新が必要となる。配備後に更新する工程を保守という。前述のとおり、保守は配備フェーズに含まれるアクションである。特に長期間使われる場合には、保守費用が開発費用を上回ることがある。
You may think of the process of creating software as being analogous to that of building a new car. Maintaining the software is like maintaining the car while you use it. To make the analogy more precise, while software does not wear out like car hardware might, its maintenance involves updates to fix bugs and adding new features as requirements change. Building a new car may take several weeks, but car maintenance will probably last much longer because the car may be used for years. As for expenses, building a new car will cost a significant amount, but costs related to its maintenance will easily exceed the price of the car when it was new. Of course, when the costs of maintaining a car become too high, there is always the option of buying a new car, just as there is the option to build a new software product if maintenance of the legacy software gets too high.
英語のヒント
ソフトウェアを作る工程は、新しい自動車を製造することにたとえられる。保守は、その車を使いながら整備するようなものである。より正確にいえば、ソフトウェアは自動車の部品のように摩耗するわけではないが、不具合を修正し、要求の変化に合わせて新機能を加える更新が、保守に含まれる。新車の製造には数週間かかるかもしれないが、車は何年も使われるため、整備はそれよりずっと長く続くだろう。製造には多額の費用がかかるが、その後の整備費用は、新車時の価格を容易に上回る。もちろん、整備費が高くなりすぎれば、新しい車を購入する選択肢がある。同様に、レガシーソフトウェアの保守費用が高くなりすぎたときは、新しいソフトウェア製品を作るという選択肢がある。
In Agile process models, a lot of the maintenance is not limited to adding new features. Instead, it often involves the following:
アジャイル型モデルの保守は、新機能の追加だけに限られない。次のようなこともよく行う。
• using Scrum sprints to plan the work and address customer needs without overwhelming developers
• Scrumのスプリントを使って作業を計画し、開発者へ過剰な負担をかけずに顧客のニーズへ対応する。
• giving priority to urgent customer requests and allowing corresponding interruptions of planned maintenance sprints to address these urgent requests
• 顧客の緊急の要求を優先し、それに対応するためなら、予定した保守スプリントの中断を認める。
• making it possible for team members to prioritize the handling of customer requests and coordinate their processing as part of the maintenance process
• 保守工程の一環として、チームメンバーが顧客の要求への対応に優先順位を付け、処理を調整できるようにする。
• combining the use of meetings and written documentation to minimize the duration and frequency of meetings and keep them focused
• 会議と文書を組み合わせ、会議の長さや頻度を最小限にし、議題への集中を保つ。
• relying on informal use cases when communicating with stakeholders to supplement existing documentations and keep communication simple
• 利害関係者とやり取りする際には、非形式的なユースケースを使って既存の文書を補い、意思疎通を簡潔にする。
• requiring that developers verify each other’s work; in particular, experienced developers should review the work produced by junior developers, such as defect fixes or code added to support new features, to help them develop their knowledge
英語のヒント
• 開発者同士で互いの作業を検証するようにする。特に経験のある開発者は、若手が行った不具合修正や新機能用コードの追加などをレビューし、知識を伸ばすのを助ける。