1.1 软件质量至关重要
软件无处不在,软件越来越复杂、功能越来越强,软件的影响越来越大,软件的受众越来越多。
人们对软件越来越依赖,但是软件是人编写的
1.1.1 软件错误案例研究
Disney的狮子王1994-1995,Intel 奔腾浮点运算1994,美航天局火星极地登陆1999,爱国者导弹防御系统1991,千年虫约1974,“冲击波”计算机病毒2003,放射性设备治死
1.2 何谓软件缺陷
通通称为:软件缺陷(Bug)
1.2.1 软件缺陷的定义
软件缺陷对应于需求(功能)规格书
(1)软件未达到规格书标明的功能
(2)软件出现了规格书标明不会出现的错误
(3)软件功能超出规格书指明范围
(4)软件未达到规格书虽未指出但应达到的功能
(5)软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好
1.3 软件缺陷出现的原因
(1)系统分析的原因
对产品的理解不全面、不到位;
需求不断改动
开发团队重视程度、沟通不够
(2)系统设计的原因
说不出来就做不出来
1.4 软件缺陷的修复费用
(1)费用呈几何级数增加
需求阶段:1
设计阶段:3-6
编程阶段:10
内部测试:20-40
外部测试:30-70
产品发布:40-1000
(2)费用增加的原因
软件范围扩大
关联增大
熟悉程度减少
模块间影响扩大
1.5 软件测试员的职责
观点1: 试图验证软件是“工作的”观点2: 设法证明软件是“不工作的”
(1)发现软件缺陷(2)尽早地发现缺陷(3)确保发现的缺陷被修复
找出软件缺陷,尽可能早一些,并确保其得以修复
1.6 软件测试员应具备的素质
(1)专业技能:
软件工程知识,软件相关知识,熟悉编程知识,相关的业务背景知识
(2)基本素质
有条理地思维,打破砂锅问到底,细心、责任心,有幽默感
(3)专业素质:
探索精神,善于发现缺陷,不懈努力,创造性,追求完美,判断准确,老练稳重,有说服力1.7 软件测试原则————原则是指导测试实践纲领性的指导
1、完全测试是不可能的
输入量、输出量、实现途径多,提交的产品是可接受的,而不是没有缺陷的
2、测试无法显示潜伏的软件缺陷
可报告已发现的缺陷,却无法报告潜伏的缺陷;报告的内容:根据对发现的缺陷进行分析…
3、找到的缺陷越多,说明缺陷越多
一般情况下,缺陷和寄生虫一样,成群出现,程序员的疲倦,程序员常犯同样的错误
经验: 成群的出现可能是大灾难的征兆
4、杀虫剂怪事——软件测试越多,其免疫力越强
出现的原因:相同的方法重复使用,人的因素缺陷性质的因素
应对方法:变换测试方法、测试程序
5、并非所有的缺陷都能修复
没有足够的资源,不算真正的缺陷(也许可说成一项功能),修复的风险太大,不值得修复(商业风险决策)是否修复的决策,需要有项目管理、测试员、程序员共同参与
6、软件测试的其他原则
事先定义好质量标准;测试要随开发的启动而尽早开始;第三方测试更客观、更有效;重视测试计划、重视文档
7、测试是一项讲究条理的技术专业
2.2 何谓软件工程
何谓工程的方法
工程不同于科研、创造
工程:受资源限制、成熟的、可重复的、只许成功
明确地定义试图解决的问题,然后使用和开发标准的工具和技术来解决之
内容:理论、方法学、技术、工具、管理、组织
软件工程定义
系统的、规范的、定量的方法在软件的开发、操作和维护中的应用(IEEE610.12-1990定义)多人构造多版本软件(Parnas定义)
2.1 软件工程简史
软件是伴随着计算机的程序而发展起来的
“软件危机”Software Crisis
现象:普遍超出预算、落后于预定进度
原因:应用广、软件规模、复杂程度、需求理解
应对:管理、组织、工具、标准
软件工程20世纪60年代
明确地定义试图解决的问题,然后使用和开发标准的工具和技术来解决之
内容:管理、组织、工具、理论、方法学和技术
定义软件生命期
2.3 软件工程的知识领域
软件工程管理
软件开发过程管理、项目管理、配置管理;质量管理--软件度量、质量保证及过程改进
软件开发方法与技:开发工具、软件复用(构件)、开发环境
软件生命期:需求分析、系统设计、系统实现、软件测试、软件维护
2.3.1 软件工程下的软件
能够完成预定功能和性能的、可执行的指令;使得程序能够适当地操作信息的数据结构;描述程序的操作和使用的文档。
软件= 程序+ 数据+ 文档+ 服务
软件文档组成:
客户需求-软件规格说明书-技术设计文档–测试文档-在线帮助- 安装手册- 用户手册
2.5 软件质量__质量的不同定义
ISO8492定义:产品或服务所满足明示或暗示需求能力的特性和特征的集合
IEEE定义:系统、部件或过程满足明确需求
RUP(Rational Unified Process)定义:满足或超出认定的一组需求,并使用经过认可的评测方法和标准来评估,还使用认定的流程来生产
2.5.1 对质量的不同理解__质量是一个多层面的概念
先验论——一种可以认识但不可定义的性质
用户角度——满足使用目的的程度
制造者的观点——产品性能符合规格要求的程度
产品观点——连接产品固有性能的纽带
基于价值观点——依赖于顾客愿意付给产品报酬的数量
2.5.2 何谓软件质量__软件质量体现在三个方面
RUP定义(Rational Unified Process)_____满足或超出认定的一组需求,并使用经过认可的评测方法和标准来评估,还使用认定的流程来生产
软件产品质量__满足使用要求的程度、质量度量模型
开发过程质量__好的过程将输出好的产品;软件工程规范:规范软件开发过程
应用领域或业务上的质量(商业环境___市场定位、培训、售后、客户接受程度
2.5.3 软件质量规范
评判软件开发过程的依据、标准描述软件开发过程应遵循的规定、指南
ISO9000体系
关于质量管理和质量保证的一系列标准;其目标在于开发过程,而不是产品;;关心的是工作的组织方式,而不是工作成果;与软件开发、供应有关的:ISO9000-3
CMM/CMMI模型
软件企业CMM/CMMI等级说明
CMM1 --- 初始级
CMM2 --- 可重复/已管理6KPA
有项目级想法,基本的项目管理:跟踪成本、进度和功能;需求管理RM、配置管理、质量保证SQA;有基本的软件测试行为:测试计划、测试用例
CMM3 --- 已定义7KPA
具备组织化思想,管理活动;软件过程被文档化、标准化,有标准过程版本;测试结果可用于确定软件发布时间
CMM4 --- 已管理/定量管理2KPA
产品质量事先由数量指定(定量过程管理)。
;组织收集软件过程和质量的详细措施,软件过程被定量地掌握和控制着
CMM5 --- 不断优化的3KPA
组织能够运用实践中得到的定量反馈,对软件过程进行持续改进;缺陷预防、技术改革、过程改善
2.5.4 软件质量保证SQA Software Quality Assurance
制定规矩——制定软件开发过程规范、质量标准、行为规范
监督执行——检查项目组是否按照制定的规范来进行软件开发
检查结果——检查和评价当前软件开发过程,并设法达到防止软件缺陷出现的目标
针对的是软件开发活动本身,考核的是软件过程,是对过程的管理
SQA与软件测试的关系
SQA如何做到控制软件质量————对项目进行近乎完全的控制;建立标准和方法论,监视和评价开发过程;拥有决定产品何时准备发布的授权
2.6 软件生命期
需求分析——设计——编程——测试——维护
2.6.1 软件开发过程模型
瀑布模型__经典的结构化方法每阶段都有明确定义的起点和终点,有明确的阶段交付物原型模型__
快速应用开发(RAD)模型__
螺旋模型__
测试驱动开发模型TDD。