【从零开始学习计算机科学】软件工程(六)软件质量
【从零开始学习计算机科学】软件工程(六)软件质量
-
- 软件质量
-
- 软件质量控制(QC)
-
- 软件评审
- 软件测试
-
- 软件测试的基本原则
- 结构化软件测试
- 面向对象软件测试
- 测试的方法
- 软件质量保证(QA)
-
- QA与QC的区别在于:
软件质量
软件工程中的重要的要求之一便是提高软件质量。
GB/T 11457-2006中定义软件质量为:软件产品能满足给定需要的性质和特性的总体。软件具有所期望的各种属性的组合。顾客和用户觉得软件满足其综合期望的程度。
ANSI/IEEE std 729-1983对软件质量定义为:与软件产品满足规定的和隐含的需求能力有关的特征或特征的全体。
软件质量是很多种质量因素的综合体现,各种质量因素反应了软件质量的不同方面。人们通过改善软件的各种质量因素,从而提高软件的整体质量。
软件质量因素之间可能存在相互冲突或影响。如,由于效率的要求,应该尽可能采用汇编语言。但是用汇编语言实现的程序可靠性、可移植性、可维护性等较差。因此,实际软件开发过程中应该根据具体情况对各种质量因素进行折中或取舍,以获得用户和开发人员满足的总体质量。
一个软件的质量还体现在后期维护成本上。其主要消耗包括质量规划、正式技术审查、测试设备、培训;内部故障成本包括返工、修复、故障模式分析;外部故障成本为投诉解决、产品退换、帮助热线支持。
从预防到检测,从内部故障到外部故障成本,发现和修复错误或缺陷的相对成本急剧增加。因此,一个软件成功的关键因素在于:软件工程方法、项目管理技术、质量控制、质量保证。
软件质量控制(QC)
为了保证软件质量,我们需要在软件开发中对软件进行质量控制(QC)。QC包括一套软件工程活动,以帮助确保每个工作产品都符合其质量目标。
可以通过一系列指标,如缺陷率、测试覆盖率等反应产品的质量,因此QC是产品质量检查者。
QC主要通过两种方式实现:软件测试、软件评审。
软件评审
软件评审是软件过程的"过滤器"。在软件工程期间审核在不同点应用(如需求评审、设计评审、代码评审) ,并用于发现错误和缺陷,然后可以删除。评审技术是软件早期查错最有效的一种技术。
软件评审的价值在于:早期发现错误,意味着修改的成本更低。错误在软件过程中扩散的可能性更小。
业界统计表明:设计活动中引入的错误占软件过程中所有错误的50~65%。引入设计评审在发现设计缺陷方面有效率达75%。
如:评审系统安全设计情况。是否提供对使用系统资格进行检查的功能;是否提供对系统内重要数据加密的功能等。
评审包括:非正式评审和正式评审。
非正式评审适用于对较简单、还未形成正式工作成果的内容进行检查,没有正式的文档输出。
非正式评审方式包括:
- desk check:由自己或同事对作者的工作产品进行评审(如对代码进行分析,依据编码规范检查源代码)。
- 组队编程:鼓励在创建工作产品(设计或代码)时进行持续审核。
- walk through(走查):由产品的设计者,引导其它成员浏览软件工作产品,并希望他们提给出问题反馈。
- 分发:又称轮查,产品的设计者将要评审的工作产品共享或分发,评审人员以修订标记或批注的方式将意见直接添加到工作产品复件上。
其缺点主要有:由于缺乏事先规划、筹备,没有规范的会议议程,缺乏对错误进行后续的跟踪处理,非正式评审的有效性低于正式评审。
正式评审在软件开发生存周期中每个阶段结束时实施,有明确的评审规程和文档化评审结果。
评审参与者有:生产者 – 开发工作产品的个人;审核领导者 - 评估产品是否准备就绪,生成产品材料的副本,并将其分发给两个或三个审核员,以备提前准备;审阅者预计要花一到两个小时来审阅产品、做笔记,否则就会熟悉工作;记录者-审阅者,记录(书面)审查期间提出的所有重要问题。
正式评审的过程:
- 预备:评审小组先召开一个预备会议,作者会针对工作产品向大家做一个总体的介绍,例如本产品的目标,相关的实现细节、开发标准等。
- 审查:在预备会和正式评审会之间,评审小组成员会对工作产品进行彻底审查,并依据相关标准和准则评审工作产品。
- 评审:在预定时间,评审小组成员以会