通常把编码和测试统称为实现。
编码
1.选择程序设计语言。选用的标准:系统用户的要求;可以使用的编译程序;可以得到的软件工具;工程规模;程序员的知识;软件可移植性要求;软件的应用领域;
2.编码风格。遵循规则:程序内部的文档;数据说明;语句构造;输入输出;效率;
软件测试
软件测试的目标
1.测试是为了发现程序中的错误而执行程序的过程。
2.好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。
3.成功的测试是发现了至今为止尚未发现的错误的测试。
软件测试准则
1.所有测试都应该能追溯到用户需求。
2.应该远在测试开始之前就制定出测试计划。
3.把Pareto原理应用到软件测试中。
4.应该从“小规模”测试开始,并逐步进行“大规模”测试。
5.穷举测试是不可能的。
6.为了达到最佳的测试效果,应该由独立的第三方从事测试工作。
测试任何产品有两种方法:黑盒测试和白盒测试。
测试步骤
1.模块测试
2.子系统测试
3.系统测试
4.验收测试
5.平行运行
测试阶段的信息流
1.软件配置,包括需求说明书、设计说明书和源程序清单等。
2.测试配置,包括测试计划和测试方案。
如果经常出现要求修改设计的严重错误,那么软件的质量和可靠性是值得怀疑的。
反之应该考虑两种可能:1.软件的可靠性是可以接受的;2.所进行的测试尚不足以发现严重的错误。
软件可靠性模型使用错误率数据估计将来出现错误的情况,并进而对软件可靠性进行预测。
单元测试
在单元测试期间着重从下述5个方面对模块进行测试。
1.模块接口
2.局部数据结构
3.重要的执行通路
4.出错处理通路
5.边界条件。
代码审查
人工测试源程序可以由程序的编写者本人非正式地进行,也可以由审查小组正式进行。后者称为代码审查。
组成人员:1.组长,应该是一个很有能力的程序员,而且没有直接参与这项工程。2.程序的设计者。3.程序的编写者。4.程序的测试者。
模块并不是一个独立的程序,因此必须为每个单元测试开发驱动软件和(或)存根软件。通常驱动程序也就是一个“主程序”,它接收测试数据,把这些数据传送给被测试的模块,并且印出有关的结果。存根程序代替被测试的模块所调用的模块。它使用被它代替的模块的接口,可能做最少量的数据操作,印出对入口的检验或操作结果,并且把控制归还给调用它的模块。
集成测试
集成测试是测试和组装软件的系统化技术。
由模块组装成程序时有两种方法。
非渐增式测试方法:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。
一下子把所有模块放在一起,并把庞大的程序作为一个整体来测试,测试者面对的情况十分复杂。改正错误更是极端苦难,因为在庞大的程序中想要诊断定位一个错误是非常困难的。
渐增式测试:把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。
它把程序划分成小段来构造和测试,在这个过程中比较容易定位和改正错误;对接口可以进行更彻底的测试;可以使用系统化的测试方法。
目前普遍采用渐增式测试方法。
使用渐增方式时,有自顶向下和自底向上两种集成策略。
1.自顶向下集成
自顶向下集成方式是一个日益为人们广泛采用的测试和组装软件的途径。从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来。在把附属于主控制模块的那些模块组装待程序结构中去时,或者使用深度优先的策略,或者使用宽度优先的策略。
2.自底向上集成
自底向上测试从“原子”模块(即在软件结构最低层的模块)开始组装和测试。因为是从底部向上结合模块,总能得到所需的下层模块处理功能,所以不需要存根程序。
步骤:
第一步,把低层模块组合成实现某个特定的软件子功能的族。
第二步,写一个驱动程序(用于测试的控制程序),协调测试数据的输入和输出。
第三步,对由模块组成的子功能族进行测试。
第四步,去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。
回归测试
在集成测试过程中每当一个新模块结合进来时,程序就发生了变化:建立了新的数据流路径,可能出现了新的I/O操作,激活了新的控制逻辑。重新执行已经做过的测试的某个子集,以保证上述这些变化没有带来非预期的副作用。
回归测试集包括3类不同的测试用例:
1.检测软件全部功能的代表性测试用例。
2.专门针对可能受修改影响的软件功能的附加测试。
3.针对被修改过的软件成分的测试。
确认测试
确认测试也成为验收测试,它的目标是验证软件的有效性。
确认测试必须有用户积极参与,或者以用户为主进行。用户应该参与月设计测试方案。确认测试通常使用黑盒测试法。
测试计划:包括要进行的测试的种类及进度安排。
测试过程:规定了用来检测软件是否与需求一致的测试方案。
有下述两种可能的结果
1.功能和性能与用户要求一致,软件是可以接受的。
2.功能和性能与用户要求有差距。
确认测试的一个重要内容是复查软件配置。保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节,而且已经编好目录。
如果一个软件是为许多客户开发的,那么使用Alpha测试和Beta测试。
Alpha测试:由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试,Alpha测试是在受控的环境中进行的。
Beta测试:由软件的最终用户们在一个或多个客户场所进行。
白盒测试技术:
设计测试方案的基本目标是,确定一组最可能发现某个错误或某类错误的测试数据。
1.逻辑覆盖
语句覆盖;判定覆盖;条件覆盖;判定/条件覆盖;条件组合覆盖;点覆盖;边覆盖;路径覆盖;
2.控制结构测试
基本路径测试;条件测试;循环测试;
黑盒测试
黑盒测试力图发现的错误:1.功能不正或遗漏了功能;2.界面错误;3.数据结构错误或外部数据库访问错误;4.性能错误;5.初始化和终止错误。
应该考虑的问题:
1.怎样测试功能的有效性?
2.哪些类型的输入可构成好测试用例?
3.系统是否对特定的输入值特别敏感?
4.怎样划定数据类的边界?
5.系统能够承受什么样的数据率和数据量?
6.数据的特定组合将对系统运行产生什么影响?
测试用例集:
1.所设计出的测试用例能够减少为达到合理测试所需要设计的测试用例的总数。
2.所设计出的测试用例能够告诉人们,是否存在某些类型的错误,而不是仅仅指出与特定测试相关的错误存在。
有哪些技术?
1.等价划分。
2.边界值分析。
3.错误推测。
调试
调试的目标是寻找软件错误的原因并改正错误。
1.蛮干法;2.回溯法;3.原因排除法。
测试阶段的根本目标是消除错误,保证软件可靠性。
软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。
软件可用性是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。
引入平均无故障时间和平均维修时间。