1、编码和测试统称为实现
编码:把软件设计结果翻译成用某种程序设计语言书写的程序
选择语言的实用标准:
A.系统用户的要求
B.可以使用的编译程序
C.可以得到的软件工具
D.工程规模
E.程序员的知识
F.软件可移植性要求
G.软件的应用领域
编码语言:
1)汇编语言
2)高级语言
编码风格:
A.程序内部的文档(恰当的标识符、适当的注解和程序的视觉组织)
B.数据说明(数据说明的次序应该标准化)
C.语句构造(每个语句都应该简单而直接)
D.输入输出
E.效率(处理机时间和存储器容量)
2、软件测试基础
1.测试的目标或定义
1)测试是为了发现程序中的错误而执行程序的过程
2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案
3)成功的测试是发现了至今尚未发现的错误的测试
2.测试正确定义:为了发现程序中的错误而执行程序的过程
3.测试根本目标:尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用
4.软件测试准则
A.所有测试都应该能追溯到用户需求
B.应该远在测试开始之前就制定出测试计划
C.把Pareto原理应用到软件测试中
D.应该从“小规模”测试开始,并逐步进行“大规模”测试
E.穷举测试是不可能的
F.为了达到最佳的测试效果,应该由独立的第三方从事测试工作
5.测试方法
1)黑盒测试(功能测试)
把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。黑盒测试是在程序接口进行的测试,只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性。
2)白盒测试(结构测试)
把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。
6.测试步骤
1)模块测试(单元测试)
目的:保证每个模块作为一个单元能正确运行
错误:编码和详细设计的错误
2)子系统测试
子系统测试:把经过单元测试的模块放在一起形成一个子系统来测试,着重测试模块的接口
错误:模块相互间的协调和通信
3)系统测试
系统测试:把经过测试的子系统装配成一个完整的系统来测试
错误:软件设计中的错误,也可能发现需求说明中的错误
4)验收测试(确认测试)
验收测试:把软件系统作为单一的实体进行测试
目的:验证系统确实能够满足用户的需要
错误:系统需求说明书中的错误
5)平行运行
平行运行:同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果
目的:可以在准生产环境中运行新系统而又不冒风险
用户能有一段熟悉新系统的时间
可以验证用户指南和使用手册之类的文档
能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标
7.测试阶段的信息流
1)软件配置:包括需求说明书、设计说明书和源程序清单等
2)测试配置:包括测试计划和测试方案
3、单元测试
1.测试重点
1)模块接口
2)局部数据结构
3)重要的执行通路
4)出错处理通路
5)边界条件
2.代码审查
1)代码审查:人工测试源程序可以由程序的编写者本人非正式地进行,也可以由审查小组正式进行。后者称为代码审查,可以查出30%~70%的逻辑设计错误和编码错误。
2)审查小组组成:组长、程序的设计者、程序的编写者、程序的测试者
3)代码审查比计算机测试优越的是:一次审查会上可以发现许多错误;用计算机测试的方法发现错误之后,通常需要先改正这个错误才能继续测试,因此错误是一个一个地发现并改正的,采用代码审查可以减少系统验证的总工作量。
3.计算机测试
1)驱动程序:是一个“主程序”,接收测试数据,把这些数据传送给被测试的模块,并印出有关的结果
2)存根程序(虚拟子程序):代替被测试的模块所调用的模块。使用被它代替的模块的接口,可能做最少量的数据操作,印出对入口的检验或操作结果,并把控制归还给调用它的模块
3)缺点:驱动程序和存根程序代表开销,为了进行单元测试必须编写测试软件,但是通常并不把它们作为软件产品的一部分交给用户
4、集成测试
1)集成测试是测试和组装软件的系统化技术。
2)模块组装成程序的两种方法
(1)非渐增式测试方法
定义:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。
优缺点:测试时会遇到许许多多的错误,改正错误更是极端困难
(2)渐增式测试
定义:把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。
优缺点:比较容易定位和改正错误;对接口可以进行更彻底的的测试;可以使用系统化的测试方法
3)渐增测试的两种集成策略
(1)自顶向下集成
定义:从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来。
步骤:1)对主控制模块进行测试,测试时用存根程序代替所有直接附属于主控制模块的模块
2)根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代换一个存根程序
3)在结合进一个模块的同时进行测试
4)为了保证加入模块没有引进新的错误,可能需要进行回归测试
(2)自底向上集成
步骤:1)把低层模块组合成实现某个特定的软件子功能的族
2)写一个驱动程序,协调测试数据的输入和输出
3)对由模块组成的子功能族进行测试
4)去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族
(3)不同集成测试策略的比较
自顶向下测试方法的主要 优点(自底向上测试方法的缺点):不需要测试驱动程序,能够在测试阶段的早期实现并验证系统的主要功能,能在早期发现上层模块的接口错误。
自顶向下测试方法的缺点(自底向上测试方法的优点):需要存根程序,可能遇到与此相联系的测试困难,低层关键模块中的错误发现较晚,且在早期不能充分展开人力。
4)回归测试
定义:重新执行已经做过的测试的某个子集,以保证没有非预期的副作用。
作用:保证由于调试或其他原因引起的变化,不会导致非预期的软件行为或额外错误的测试活动
5、确认测试
1)定义:确认测试也称为验收测试,目标是验证软件的有效性,必须有用户积极参与或者以用户为主进行,通常使用黑盒测试法。
✬验证:保证软件正确地实现了某个特定要求的一系列活动
✬确认:为了保证软件确实满足了用户需求而进行的一系列活动
2)软件有效性:软件的功能和性能如同用户所合理期待的那样,软件就是有效的。
3)确认测试的结果
(1)功能和性能与用户要求一致,软件是可以接受的
(2)功能和性能与用户要求有差距
4)软件配置复查:目的是保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节,且已经编号目录。
5)Alpha测试:由用户在开发者的场所进行,在开发者对用户的“指导”下进行测试。开发者负责记录发现的错误和使用中所遇到的问题,该测试在受控的环境中进行。
6)Beta测试:由软件的最终用户们在一个或多个客户场所进行。开发者通常不在测试的现场,该测试在开发者不能控制的环境中的“真实”应用。
6、白盒测试技术
1)逻辑覆盖:有选择地执行程序中某些最有代表性的通路是对穷尽测试的唯一可行的替代方法。对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。
2)覆盖标准:语句覆盖、判定覆盖(分支覆盖)、条件覆盖、判定/条件覆盖、条件组合覆盖、点覆盖、边覆盖、路径覆盖
3)控制结构测试技术
(1)基本路径测试
(2)条件测试
(3)循环测试(简单循环、嵌套循环、串接循环)
7、黑盒测试技术
黑盒测试力图发现下述类型的错误:
(1)功能不正确或遗漏了功能
(2)界面错误
(3)数据结构错误或外部数据库访问错误
(4)性能错误
(5)初始化和终止错误
测试方法:
(1)等价划分
把程序的输入域划分成若干个数据类,据此导出测试用例。
(2)边界值分析
测试数据:刚好等于、稍小于和稍大于等价类边界值的数据。
(3)错误推测(依靠测试人员的经验和直觉)
8、调试
1)定义:调试(也称为纠错)是在测试发现错误之后排除错误的过程
2)调试困难的原因
(1)症状和产生症状的原因可能在程序中相距甚远
(2)当改正了另一个错误之后,症状可能暂时消失了
(3)症状可能实际上并不是由错误引起的
(4)症状可能是由不易跟踪的人为错误引起的
(5)症状可能是由定时问题而不是由处理问题引起的
(6)可能很难重新产生完全一样的输入条件
(7)症状可能时有时无
(8)症状可能是由分布在许多任务中的原因引起的,这些任务运行在不同的处理机上
3)调试途径
蛮干法(最低效)
回溯法(调试小程序时有效)
原因排除法:对分查找法、归纳法、演绎法
9、软件可靠性
1)软件可靠性:程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。
2)软件可用性:程序在给定的时间点,按照规格说明书的规定成功地运行的概率。