软件构建(SOFTWARE CONSTRUCTION)
- 软件构建是指通过编码、验证、单元测试、集成测试和调试的组合来详细地创建软件的工作。
- 软件构建知识域与软件设计和测试知识域关联的最为紧密。软件构建是软件设计的后置工作流程,是软件测试的前置工作流程。虽然大部分的软件设计是在构建之前完成的,但是也有与构建同时进行的设计工作。在整个构建过程中,软件工程师要对他们的成果进行单元测试和集成测试,因此软件构建也承担了一部分的测试工作。
- 软件构建通常产生软件项目中需要管理的最多的配置项(源代码、文档、测试用例,等等)。因此,
软件构建也与软件配置管理知识域密切相关。 - 软件质量管理需要监督所有的项目交付产物所以,软件构建与软件质量知识域也密切相关。
- 由于软件构建需要算法和编码实践的知识,它与计算基础知识域紧密相关,这是支持软件产品设计和构建的计算机科学基础。它也与项目管理有关,因为施工管理可以带来相当大的挑战。
软件构建知识域如下图:
1.软件构建基础
软件构建基础包括:
- 减少复杂性
- 拥抱变革
- 构建的验证
- 重复使用
- 标准建设
前四个概念既适用于设计,也适用于施工。下面几节定义了这些概念,并描述如何将它们应用到构造中。
1.1.减少复杂性
大多数人在工作记忆中保存复杂结构和信息的能力有限,尤其是长时间记忆。这被证明是影响人们如何向计算机传达意图的主要因素,并导致软件构建中最强大的驱动力之一:最小化复杂性。减少复杂性的需要基本上适用于软件构建的每个方面,并且对软件构建的测试特别重要。
在软件构建中,通过强调代码创建的简单易读而不是聪明来降低复杂性。它是通过使用标准来实现的
(见第1.5节,施工标准),模块化设计(见第3.1节,施工设计),以及许多其他特定的技术(见3.3节,编码)。它还得到了以施工为重点的质量技术的支持(见3.7节,施工质量)。
1.2.拥抱变革
大多数软件会随着时间的推移而变化,对变化的预期会驱动软件构建的许多方面;软件运行环境的变化也会以不同的方式影响软件。
预测变化有助于软件工程师构建可扩展的软件,这意味着他们可以在不破坏底层结构的情况下增强软件产品。
许多特定的技术都支持预测变化(参见3.3节,编码)。
1.3.构建的验证
构建验证意味着以这样一种方式构建软件。即在独立测试和操作活动期间,编写软件的软件工程师以及测试人员和用户可以很容易地发现错误。
支持为验证构建的特定技术包括遵循编码标准以支持代码评审和单元测试,组织代码以支持自动化测试,以及限制使用复杂或难以理解的语言结构,等等。
1.4.重复使用
重用是指使用现有资产来解决不同的问题。在软件构建中,重用的典型资产包括库、模块、组件、源代码和商用现货资产。根据定义良好的、可重复的过程,最好是系统地进行重用。系统重用可以显著提高软件的生产率、质量和成本。
重用有两个密切相关的方面:“创建重用”和“使用重用”。前者意味着创建可重用的软件资产,而后者意味着在构建新的解决方案时重用软件资产。重用常常超越项目的边界,这意味着重用的资产可以在其他项目或组织中构建。
1.5.构建标准
在建设过程中应用外部或内部的开发标准有助于实现项目的效率、质量和成本目标。
具体来说,选择允许的编程语言子集和使用标准是实现更高安全性的重要手段。
直接影响构建问题的标准包括:
- 沟通方法(例如,文档格式和内容的标准)
- 编程语言(例如,像Java和c++)
- 编码标准(例如,命名约定、布局和缩进的标准)
- 平台(例如,操作系统调用接口标准)
- 工具(例如,符号的图解标准,如UML 统一建模语言)
使用外部标准。构建依赖于构建语言、构建工具、技术接口和软件之间交互的外部标准的使用。标准有很多来源,包括硬件和软件接口规范(例如,对象管理组(OMG))和国际组织(例如IEEE或ISO)。
使用内部标准。标准也可以在公司级别的组织基础上创建,或者用于特定的项目。这些标准支持团队活动的协调、最小化复杂性、预测变更以及为验证进行构造。
2.构建管理
2.1.生命周期模型中的构建
许多模型被用来开发软件。
从构建的角度来看,有些模型更加线性化——比如瀑布模型和分期交付生命周期模型。这些模型将构建视为只有在完成了重要的先决工作(包括详细的需求工作、广泛的设计工作和详细的计划)之后才会发生的活动。更线性的方法倾向于强调构建之前的活动(需求和设计),并在活动之间创建更明显的分离。在这些模型中,构建的主要重点可能是编码。
其他模型的迭代性更强,比如演化原型和敏捷开发。这些方法倾向于将构建视为与其他软件开发活动(包括需求、设计和计划)同时发生的活动,或者与它们重叠的活动。这些方法倾向于混合设计、编码