人们开始用工程的方法进行软件的开发、管理和维护,即“软件工程”。
软件需求是一个为解决特定问题而必须由被开发或被修改的软件展示的特性。
所有软件需求的一个基本特性就是可验证性。
需求分析涉及分析需求的过程,其目的如下。(1)检测和解决需求之间的冲突。(2)发现软件的边界,以及软件与其环境如何交互。(3)详细描述系统需求,以导出软件需求。
架构设计是需求过程与软件或系统设计重叠进行的,将二者截然分开是不可能的。
需求分析方法种类:结构化分析方法、面向对象分析方法、面向问题域的分析方法(Problem Domain Oriented Analysis,PDOA)。
软件设计是“定义一个系统或组件的架构、组件、接口和其他特征的逆程”,并得到这个过程的结果。软件设计由两个处于软件需求和软件构造之间的活动组成。
(1)软件架构设计(有时叫做高层设计):描述软件的结构和组织,标识各种不同的组件。
(2)软件详细设计:详细地描述各个组件,使之能被构造。
软件架构是“一个描述软件系统的子系统和组件,以及它们之间相互关系的学科”。架构试图定义软件的内部结构。通过视图可以从不同角度描述软件结构,主要包括逻辑视图(满足功能需求)、过程视图(并发问题)、组件视图(实现问题)、部署视图(分布问题)。
测试是为评价和改进产品质量、识别产品的缺陷和问题而进行的活动。
测试不再只是一种仅在编码阶段完成后才开始的活动。现在的软件测试被认为是一种应该包括在整个开发和维护过程中的活动,它本身是实际产品构造的一个重要部分。
测试不仅是检查预防措施是否有效的主要手段,而且是识别由于某种原因预防措施无效而产生的错误的主要手段。需要注意的是,在广泛的测试活动成功完成后,软件可能仍包含错误,交付后出现的软件失效的补救措施是由软件维护达成的。
设计测试用例的常用测试方法有白盒测试和黑盒测试两种。其中黑盒测试的测试用例设计方法有等价类划分、边界值分析、错误推测法和因果图等4种。从软件开发的过程按阶段的角度可划分为单元测试、集成测试、确认测试、系统测试和验收测试。
Alpha(α)测试也称内测,是指软件开发公司组织内部人员模拟各类用户的实际使用情况对软件产品(称为α版本)进行测试,试图发现错误并修正。Beta(β)测试也称为公测,是指软件开发公司组织各方面的典型用户实际使用β版本,并要求用户记录并报告异常情况、提出批评或改进意见,然后软件公司再对β版本进行改错和完善。β测试一般包括功能度、安全可靠性、易用性、可扩充性、兼容性、效率、资源占用率、用户文档八个方面。
软件维护包括如下类型。
(1)更正性维护:软件产品交付后进行的修改,以更正发现的问题。
(2)适应性维护:软件产品交付后进行的修改,以保持软件产品能在变化后或变化中的环境中继续使用。
(3)完善性维护:软件产品交付后进行的修改,以改进性能和可维护性。
(4)预防性维护:软件产品交付后进行的修改,以在软件产品中的潜在错误成为实际错误前,检测和更正它们。
软件开发工作的结果是交付满足用户需求的软件产品。
软件复用是指利用已有软件的各种有关知识构造新的软件,以缩减软件开发和维护的费用。
软件复用是一种计算机软件工程方法和理论。主要思想是,将软件看成是由不同功能的“组件”所组成的有机体,每一个组件在设计编写时可以被设计成完成同类工作的通用工具,这样,如果完成各种工作的组件被建立起来以后,编写某一特定软件的工作就变成了将各种不同组件组织连接起来的简单问题,这对于软件产品的最终质量和维护工作都有本质性的改变。
软件制品的复用,按抽象程度的高低,可以划分为如下复用级别:代码的复用、设计的复用、分析的复用、测试信息的复用等。
国际标准ISO14598给出的“软件质量”的定义是:软件特性的总合,软件满足规定或潜在用户需求的能力。质量就是遵从用户需求,达到用户满意。
国际标准ISO9126定义的软件质量包括“内部质量”、“外部质量”和“使用质量”三部分。也就是说,“软件满足规定或潜在用户需求的能力”要从软件在内部、外部和使用中的表现来衡量。
软件需求定义了软件质量特性,并影响评价这些特性的度量方法和接收准则。
软件质量管理过程包括:质量保证过程、验证过程、确认过程、评审过程、审计过程等。
评审与审计过程包括:管理评审、技术评审、检查、走查、审计等。
(1)管理评审的目的是监控进展,决定计划和进度的状态,确认需求及其系统分配,或评价用于达到目标适应性的管理方法的有效性。
(2)技术评审的目的是评价软件产品。
(3)检查的目的是检测和识别软件产品异常。
(4)走查的目的是评价软件产品,走查也可以用于培训软件产品的听众,主要目标是:发现异常、改进软件产品、考虑其他实现、评价是否遵从标准和规范说明。
(5)审计的目的是提供软件产品和过程对于可应用的规则、标准、指南、计划和流程的遵从性的独立评价。
软件开发工具是用于辅助软件生命周期过程的、基于计算机的工具。它们试图让软件工程更加系统化,从而减少手工方式管理的负担。其种类包括但不限于软件:需求工具、设计工具、构造工具、测试工具、维护工具、配置管理工具、工程管理工具、质量工具等。
软件配置管理活动有:软件配置管理过程的管理和计划、软件配置标识、软件配置控制、软件配置状态记录、软件配置审计、软件发布管理与交付。
CMM(Capability Maturity Model)称为软件能力成熟度模型,它将成熟度划分为5个级别,即初始级、可重复级、已定义级、已管理级、优化级。是软件组织在定义、实施、度量、控制和改善软件过程的实践中各个发展阶段的描述。CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化,使企业能够更好地实现商业目标。
CMMI(Capability Maturity Model Integration)是能力成熟度模型集成的简称,CMMI有两种表示方法,一种是阶段式表现方法,另一种是连续式表现方法。与CMM相比,CMMI更关注软件的需求。
软件工程管理集成了过程管理和项目管理,包括以下6个方面:启动和范围定义;软件项目计划;软件项目实施;评审和评价;关闭和软件工程度量。