笔记-信息技术知识-2.1 软件工程
2.1 软件工程
随着所开发软件的规模越来越大、复杂度越来越高,加之用户需求又并不十分明确,且缺乏软件开发方法和工具方面的有效支持,使得软件成本日益增长、开发进度难以控制、软件质量无法保证、软件维护困难等问题日益突出。人们开始用工程的方法进行软件的开发、管理和维护,即“软件工程”。
2.1.1 软件需求分析与定义
软件需求是针对待解决问题的特性的描述。所定义的需求必须可以被验证。在资源有限时,可以通过优先级对需求进行权衡。
通过需求分析,可以检测和解决需求之间的冲突、发现系统的边界、并详细描述出系统需求。
2.1.2 软件设计、测试与维护
1. 软件设计
软件设计:根据软件需求,产生一个软件内部结构的描述,并将其作为软件构造的基础。通过软件设计,描述出软件架构及相关组件之间的接口;然后,进一步详细地描述组件,以便能构成这些组件。
通过软件设计得到要实现的各种不同模型,并确定最终方案。其可以划分为软件架构设计(也叫作高层设计)和软件详细设计两个阶段。
2. 软件测试
软件测试:测试是为了评价和改进产品质量、识别产品的缺陷和问题而进行的活动。软件测试是针对一个程序的行为,在有限测试用例集合上,动态验证是否达到预期的行为。
测试不再只是一种仅在编码阶段完成后才开始的活动。现在的软件测试被认为是种应该包括在整个开发和维护过程中的活动,它本身是实际产品构造的一个重要部分。
软件测试伴随开发和维护过程,通常可以在概念上划分为单元测试、集成测试和系统测试3个阶段。
3. 软件维护
软件维护:将软件维护定义为需要提供软件支持的全部活动。这些活动包括在交付前完成的活动,以及交付后完成的活动。交付前要完成的活动包括交付后的运行计划和维护计划等。交付后的活动包括软件修改、培训、帮助资料等。
软件维护有如下类型:
- 更正性维护:更正交付后发现的错误;
- 适应性维护:使软件产品能够在变化后或变化中的环境中继续使用;
- 完善性维护:改进交付后产品的性能和可维护性;
- 预防性维护:在软件产品中的潜在错误成为实际错误前,检测并更正它们。
2.1.3 软件质量保证及质量评价
软件质量指的是软件特性的总和,是软件满足用户需求的能力,即遵从用户需求,达到用户满意。软件质量包括 “内部质量”“外部质量”和“使用质量” 三部分。软件需求定义了软件质量特性,及确认这些特性的方法和原则。
软件质量管理过程由许多活动组成,一些活动可以直接发现缺陷,另一些活动则检查活动的价值。其中包括质量保证过程、验证过程、确认过程、评审过程、审计过程等。
- 软件质量保证:通过制订计划、实施和完成等活动保证项目生命周期中的软件产品和过程符合其规定的要求。
- 验证与确认:确定某一活动的产品是否符合活动的需求,最终的软件产品是否达到其意图并满足用户需求。
- 验证过程:试图确保活动的输出产品构造正确,即活动的输出产品满足活动的规范说明;
- 确认过程:则试图确保构造了正确的产品,即产品满足其特定的目的。
- 评审与审计:包括管理评审、技术评审、检查、走查、审计等。
- 管理评审:目的是监控进展,决定计划和进度的状态,或评价用于达到目标所用管理方法的有效性。技术评审的目的是评价软件产品,以确定其对使用意图的适合性。
- 软件审计:目的是提供软件产品和过程对于可应用的规则、标准、指南、计划和流程的遵从性的独立评价。审计是正式组织的活动,识别违例情况,并要生成审计报告,采取更正性行动。
2.1.4 软件配置管理
软件配置管理通过标识产品的组成元素、管理和控制变更、验证、记录和报告配置信息,来控制产品的进化和完整性。软件配置管理与软件质量保证活动密切相关,可以帮助达成软件质量保证目标。
软件配置管理活动包括软件配置管理计划、软件配置标识、软件配置控制、软件配置状态记录、软件配置审计、软件发布管理与交付等活动。
- 软件配置管理计划:制定需要了解组织结构环境和组织单元之间的联系,明确软件配置控制任务。
- 软件配置标识活动识别:要控制的配置项,并为这些配置项及其版本建立基线。
- 软件配置控制:关注的是管理软件生命周期中的变更。
- 软件配置状态记录:标识、收集、维护并报告配置管理的配置状态信息。
- 软件配置审计:是独立评价软件产品和过程是否遵从已有的规则、标准、指南、计划和流程而进行的活动。
- 软件发布管理和交付:通常需要创建特定的交付版本,完成此任务的关键是软件库。
2.1.5 软件过程管理
软件过程管理涉及技术过程和管理过程,通常包括以下几个方面:
(1)项目启动与范围定义:启动项目并确定软件需求。
(2)项目规划:制订计划,其中一个关键点是确定适当的软件生命周期过程,并完成相关的工作。
(3)项目实施:根据计划,并完成相关的工作。
(4)项目监控与评审:确认项目工作是否满足要求,发现问题并解决问题。
(5)项目收尾与关闭:为了项目结束所做的活动。需要项目验收,并在验收后进行归档、事后分析和过程改进等活动。
2.1.6 软件开发工具
软件开发工具是用于辅助软件生命周期过程的基于计算机的工具。通常使用这些工具来支持特定的软件工程方法,减少手工方式管理的负担。工具的种类包括支持单个任务的工具及涵盖整个生命周期的工具。
(1)软件需求工具包括需求建模工具和需求追踪工具。
(2)软件设计工具包括软件设计创建和检查工具。
(3)软件构造工具包括程序编辑器、编译器、代码生成器、解释器、调试器等。
(4)软件测试工具包括测试生成器、测试执行框架、测试评价工具、测试管理工具、性能分析工具。
(5)软件维护工具包括理解工具(如可视化工具)和再造工具(如重构工具)。
(6)软件配置管理工具包括追踪工具、版本管理工具和发布工具。
(7)软件工程管理工具包括项目计划与追踪工具、风险管理工具和度量工具。
(8)软件工程过程工具包括建模工具、管理工具、软件开发环境。
(9)软件质量工具包括检查工具和分析工具。
2.1.7 软件复用
软件复用是指利用已有软件的各种有关知识构造新的软件,以缩减软件开发和维护的费用。复用是提高软件生产力和质量的一种重要技术。
软件复用的主要思想是,将软件看成是由不同功能的“组件”所组成的有机体,每一个组件在设计编写时可以被设计成完成同类工作的通用工具。这样,如果完成各种工作的组件被建立起来以后,编写某一特定软件的工作就变成了将各种不同组件组织连接起来的简单问题,这对于软件产品的最终质量和维护工作都有本质性的改变。
早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决策、架构、需求、设计、代码和文档等一切有关方面。
由于面向对象方法的主要概念及原则与软件复用的要求十分吻合,所以该方法特别有利于软件复用。