プリンキピア

第9章ソフトウェア工学

Cost Management費用の管理
An important part of the role of a software engineer is to handle the project management triangle of timeliness, quality, and cost. The goal is to deliver projects as quickly as possible with the highest quality and the lowest cost. Doing this requires good communication, planning, and focus as well as the setting of realistic expectations. Furthermore, because the cost of maintaining a software solution over time can be significant, various cost-management strategies must be used to manage costs effectively. These strategies include the use of estimation techniques, resource allocation, and cost tracking tools. Estimation techniques help create accurate estimates of project scope and effort, and cost, which helps with budgeting and resource allocation. Resource allocation involves assigning the right people (i.e., those with the necessary skills) to complete each task, and this helps optimize efficiency and cost. Cost tracking tools help track project costs and identify areas for potential savings.
英語のヒント
ソフトウェアエンジニアの重要な役割の一つは、納期・品質・費用というプロジェクト管理の三角形を扱うことである。目標は、できるだけ短い期間で、最も高い品質と最も低い費用を実現してプロジェクトを完了させることにある。そのためには、良好な意思疎通、計画、集中力に加え、現実的な期待を設定することが必要になる。さらに、ソフトウェアを長期にわたって保守する費用は大きくなることがあるため、さまざまな費用管理の方策を使う必要がある。これには、見積もり技法、資源の配分、費用の追跡ツールなどが含まれる。見積もり技法は、プロジェクトの範囲、作業量、費用を正確に見積もり、予算編成や資源配分を助ける。資源配分では、各作業を完了させるのに適切な人、つまり必要な技能を持つ人を配置し、効率と費用を最適化する。費用の追跡ツールは支出を把握し、節約できそうな領域を見つけるのに役立つ。
The ongoing evolution of computing technology, such as web, mobile, and cloud computing, has had a significant impact on the way modern software engineering is done. Nevertheless, it is still common to get into trouble when designing and developing high-quality software on time and within budget. The major reasons for that are as follows:
英語のヒント
Web、モバイル、クラウドコンピューティングなど、計算機技術の絶え間ない発展は、現代のソフトウェア工学の実践に大きな影響を与えてきた。それでも、高品質なソフトウェアを期限と予算の範囲内で設計・開発しようとすると、今なお問題に陥ることが多い。主な理由は次のとおりである。
• Software systems are the most complex types of systems humans create.
• ソフトウェアシステムは、人間が作るシステムのうち最も複雑な種類である。
• The pace of change in computer and software technology is high. The programming techniques and related processes that work well when used individually or in a small team fail when applied in a large team developing a large complex system.
英語のヒント
• コンピューターやソフトウェアの技術は変化が速い。個人や小規模なチームではうまく機能するプログラミング技法や関連する工程も、大規模で複雑なシステムを開発する大人数のチームに適用すると、うまくいかない。
• There are not enough qualified software engineers, and thus software systems are designed and developed by people who have insufficient backgrounds or experience.
• 十分な能力を備えたソフトウェアエンジニアが不足しているため、必要な基礎知識や経験が足りない人々によってシステムが設計・開発される。
Software Engineering and Computer Scienceソフトウェア工学とコンピューターサイエンス
Where does software engineering fit within computer science? Both software engineering and computer science deal with the creation of software, and while there appears to be an overlap between these two disciplines, software engineering tends to focus on software applications, more specifically, on the design and development of software solutions. This makes software engineering a branch or subarea of computer science.
英語のヒント
ソフトウェア工学は、コンピューターサイエンスのなかでどこに位置づけられるのだろうか。どちらもソフトウェアの作成を扱うため、二つの分野は重なっているように見える。ただ、ソフトウェア工学はソフトウェアの応用、より具体的にはソフトウェアによる仕組みの設計・開発に重点を置く傾向がある。このため、ソフトウェア工学はコンピューターサイエンスの一分野、あるいは下位分野と位置づけられる。
Computer science focuses on the study of algorithms and their realization in terms of computers, computer systems, and related computational processes. It focuses heavily on the theoretical and mathematical principles involved with the creation of algorithms and data structures. While computer science includes software engineering, it also covers a variety of other disciplines. In comparison, software engineering focuses specifically on the application of engineering principles to understand, design, construct, and deploy production software. It starts with eliciting and analyzing requirements and results in providing a practical software solution that meets those requirements. Computer science goes beyond just creating software solutions, and includes software design and development. While software engineers need to have a solid knowledge of fundamental computer science (e.g., the basics of algorithms and data structures), they are not expected to exhibit the same level of theoretical knowledge as that of a computer scientist. For example, while a computer scientist would need to be able to establish the asymptotic time complexity of the algorithms they pick, a software engineer would not.
英語のヒント
コンピューターサイエンスは、アルゴリズムと、それをコンピューター、計算機システム、関連する計算過程によって実現することの研究を中心に扱う。アルゴリズムやデータ構造を作るうえでの理論的・数学的な原則を重視する。ソフトウェア工学を含む一方で、それ以外のさまざまな分野も扱う。これに対し、ソフトウェア工学が特に重視するのは、実際に運用するソフトウェアを理解・設計・構築・配備するための工学的原則の適用である。要求の引き出しと分析から始まり、それらの要求を満たす実用的な仕組みを提供することを目指す。コンピューターサイエンスは、ソフトウェアによる仕組みを作ることだけにとどまらず、ソフトウェアの設計・開発も含んでいる。ソフトウェアエンジニアにも、アルゴリズムやデータ構造の基礎など、コンピューターサイエンスの基本について確かな知識が必要である。ただし、計算機科学者と同じ水準の理論的知識を示すことまでは求められない。たとえば、計算機科学者は自ら選んだアルゴリズムの漸近的時間計算量を明らかにできる必要があるが、ソフトウェアエンジニアにはそれは求められない。
Software engineering departs from the general focus of computer science and is complementary in the following ways:
英語のヒント
ソフトウェア工学は、次の点でコンピューターサイエンス全体の重点と異なり、これを補完している。
• Software engineering tends to focus on applying technology to create solutions, whereas computer science tends to focus much more on understanding the technology itself.
• ソフトウェア工学は技術を応用して仕組みを作ることを重視する傾向があるのに対し、コンピューターサイエンスは技術そのものの理解に、より大きな重点を置く傾向がある。
• Software engineering tends to focus on software. Computer science can focus on software, hardware, and the interaction between the two.
• ソフトウェア工学はソフトウェアを中心に扱う傾向がある。コンピューターサイエンスは、ソフトウェア、ハードウェア、両者の相互作用を扱うことができる。
• A software engineer tends to focus on developing solutions that meet the requirements of an organization or project. A computer scientist tends to focus on the underlying computational processes required to create solutions in the optimal or most efficient ways.
• ソフトウェアエンジニアは、組織やプロジェクトの要求を満たす仕組みの開発を重視する傾向がある。計算機科学者は、最適な、または最も効率的な方法で仕組みを作るために必要な、その根底にある計算過程を重視する傾向がある。
The essence of the software engineering practice is based on the work of numerous researchers such as the mathematician George Pólya. Pólya’s heuristic for generalized problem-solving includes the following steps:
英語のヒント
ソフトウェア工学の実践の本質は、数学者ジョージ・ポリアをはじめとする、多くの研究者の仕事に基づいている。ポリアによる一般的な問題解決の発見的手順には、次の段階が含まれる。
1. Understand the problem.
1. 問題を理解する。
2. Devise a plan.
2. 計画を立てる。
3. Carry out the plan.
3. 計画を実行する。
4. Look back and examine the solution.
4. 振り返り、解決策を検討する。