Version3.0第二章测试技术2回顾•软件质量的衡量标准是可以准时地交付给用户,所耗费的成本不超出预算,并且最重要的是,能够正常地运行。•SQA的目标是通过在开发周期的早期阶段发现错误来降低解决问题的成本。•SQA应用于软件开发的每个阶段,每个阶段都有其自己的质量标准。•实施质量管理中,要注意构建自己的管理体系,包括:构建质量计划、建立质量保证、建立质量控制等3本章目标•定义软件测试•明确软件测试的准则•明确测试的方法•描述软件测试的各个阶段•描述各种测试阶段的测试内容4简介•软件测试是软件工程过程中的关键组件。•软件测试是软件质量保证的要素,可以将其描述为一个运行程序以检测错误(如果有)的过程。5测试的常识与道理2-1•编程大师说:没有错误的程序世间难求。(《编程之道》)•你在学校里学过测试吗?(读到博士可能也不懂测试)•你所在的企业重视测试吗?(小公司程序员的技能更加全面)•临时抱佛脚行吗?你以为有文档模板就会测试了吗?6测试的常识与道理2-2•如果不懂得有效地进行测试,你不仅得不到功劳,也没人欣赏你的苦劳,你拥有最多的将只是疲劳。•职业软件工程师应当掌握需求开发、系统设计、编程、测试、维护所有技能。7测试的目的是什么•测试的目的是为了发现尽可能多的缺陷,不是为了说明软件中没有缺陷。•推论:成功的测试在于发现了迄今尚未发现的缺陷。所以测试人员的职责是设计这样的测试用例,它能有效地揭示潜伏在软件里的缺陷。千万不要将“测试”与“演示”混为一谈。例如科研鉴定会。如果产品通过了严格的测试,大家不要不吭气,应当好好地宣传一把。8软件测试原则2-1•完全测试程序是不可能的-输入量太大-输出结果太多-软件实现途径太多-软件说明书没有客观标准。从不同角度看,软件缺陷的标准不同。9软件测试原则2-2•软件测试是有风险的行为•测试无法显示潜伏的软件缺陷•找到的软件缺陷越多,就说明软件缺陷越多•并非所有软件缺陷都能修复•软件测试一项讲究条理的技术专业10软件测试方法-黑盒和白盒•白盒测试中(有时候称为开盒测试),软件测试员可以访问程序员的代码,并通过检查代码来协助测试-可以看到盒子里面。一般在单元测试中采用白盒测试,用于测试模块中所有可能的路径、执行所有循环并测试所有逻辑表达式。•黑盒测试则侧重于软件的整体功能。它不基于程序的内部结构而基于系统功能。犹如一个人站在黑盒子外面,只知道系统输入一定数据,得到一定的输出,而不必清楚这个黑盒子中进行了哪些操作和运算。11软件测试方法-静态和动态•静态检查–确保系统按照组织的标准和过程运行,主要依赖于评审和非运行的手段来检查。通常包括需求评审、设计评审、代码走查和代码检查。•动态检查–在生命周期中进行测试(运行)。通常包括单元测试、集成测试、系统测试、用户的验收测试。12静态测试•审查(Inspection)-软件的一种基本测试方法,它以一系列典型问题为依据进行检测。•走查(Walkthrough)-一对一的审查,比审查更加仔细。•回顾(Review)-以发现软件中存在的错误和缺陷为目的的一种软件测试方法,它是在软件证实执行之前完成。13静态和动态测试进行结构和功能测试测试阶段执行人静态校验动态校验可行性评审开发人员,用户√需求评审开发人员,用户√设计评审开发人员√单元测试开发人员√集成测试开发人员,用户√系统测试开发人员在用户的协助下完成√验收测试用户√14测试技术软件测试技术静态测试代码走查动态测试技术评审代码审查黑盒测试白盒测试功能测试性能测试攻击测试回归测试语句覆盖分支覆盖路径覆盖15测试产品说明书•对于产品说明书的制定是个很重要的设计阶段,产品说明书的质量会直接影响到整个产品开发。•测试产品说明书属于静态黑盒子测试。16常用测试用语-测试用例•测试用例:编写用于输入输入的实际数制和预期结果。测试用例还明确指出使用具体测试用例产生的测试程序的任何限制。•使用目的:测试用例应该设计为能够快速容易地发现尽可能多的错误。应该通过使用和产生正确和错误的输入和输出来“检验”程序。其目标是要使用合理范围内的条件,尽可能全面地测试所有模块乃至整个系统。17测试与调试-什么是缺陷•缺陷:最终产品同用户的期望不一致•缺陷的分类–错误–遗漏–超出需求的部分•缺陷(未触发)VS.错误(应首先解决)18测试与调试-调试的准则•调试的方法:归纳法、演绎法和回溯法。•常用调试技术使用诊断输出语句(diagnosticoutputstatement)、快照转储(snapshotdump)以及跟踪指令的断点(instruction-dependentbreakpoint)。19测试的分类与比较•开发与测试的V型关系–如果软件开发过程采用严格的瀑布模型,那么开发与测试有“V”型的对应关系。需求开发高层设计详细设计编程单元测试集成测试系统测试验收测试20测试阶段2-1•单元测试、集成测试、系统测试、验收测试。是“从小到大”、“由内至外”、“循序渐进”的测试过程,体现了“分而治之”的思想。•单元测试的粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。•集成测试界于单元测试和系统测试之间,起到“桥梁作用”,一般由开发小组采用白盒加黑盒的方式来测试,既要验证“设计”又要验证“需求”。21测试阶段2-2•系统测试的粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系统是否符合“需求规格说明书”。•验收测试与系统测试非常相似,主要区别是测试人员不同,验收测试由用户执行。22测试内容•测试内容一般包含–接口与路径测试。–功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、压力测试、可靠性测试、安装/反安装测试…23测试阶段对应表测试阶段主要依据测试人员、测试方式主要测试内容单元测试系统设计文档由开发小组执行白盒测试接口测试、路径测试集成测试系统设计文档需求文档由开发小组执行白盒测试和黑盒测试接口测试、路径测试功能测试、性能测试系统测试需求文档由独立测试小组执行黑盒测试功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、压力测试、可靠性测试、安装/反安装测试验收测试需求文档由用户执行黑盒测试24接口与路径测试3-1•接口测试:数据一般通过接口输入和输出,接口测试一般是白盒测试的第一步。输入参数有“典型值”、“边界值”、“异常值”输出包括函数的返回值和输出参数。实际输出与期望的输出不一致,那么说明程序有错误。•一个函数体内的语句可能只有十几条,但逻辑路径可能有成千上万条。所以应该根据经验选择关键的路径测试。25接口与路径测试3-2•路径测试的检查表-数据类型、变量值、逻辑判断、循环、内存管理、文件I/O、错误处理•预防一些重要的路径没有被测试的措施有:观察是否有程序语句从来没有被执行过。要特别留意函数体内的错误处理程序块。26接口与路径测试3-3•接口与路径测试用例的参考模板27功能测试3-1•功能测试的基本方法是构造一些合理输入(在需求范围之内),检查输出是否与期望的相同。如果两者不一致,即表明功能有误。•难点在于如何构造有效的输入。28功能测试3-2•功能测试的测试方法:等价划分法和边界值分析法。等价划分是指把输入空间划分为几个“等价区间”,在每个“等价区间”中只需要测试一个典型值就可以了。等价划分法来源于人们的直觉与经验,可令测试事半功倍。“缺陷遗漏在角落里,聚集在边界上”。边界值测试法是对等价划分法的补充。如果A和B是输入空间的边界值,那么除了典型值外还要用A和B作为测试用例。29功能测试3-3•功能测试用例的参考模板30性能测试3-1•性能测试即测试软件处理事务的速度,一是为了检验性能是否符合需求,二是为了得到某些性能数据供人们参考。•绝对值考虑:如数据送输速率是每秒多少比特。“相对值”考虑:如某个软件比另一个软件快多少倍。•性能测试中考虑运行环境的影响:例如网络环境、计算机主频,总线结构和外部设备都可能影响软件的运行速度。31性能测试3-2•性能测试的一些注意事项:应当编写一段程序用于计算时间以及相关数据。应当测试软件在标准配置和最低配置下的性能。应当关闭那些消耗内存、占用CPU的其它应用软件(如杀毒软件)。应当分档记录。例如传输文件的容量从100K到1M可以分成若干等级。同一种输入情况在不同的时间可能得到不同的性能数据,可以取其平均值。32性能测试3-3•性能测试用例的参考模板33压力测试2-1•压力测试也叫负荷测试,即获取系统能正常运行的极限状态。•压力测试的主要任务是:构造正确的输入,使劲折腾系统却让它刚好不瘫痪。•压力测试的一个变种是敏感测试。在某种情况下,微小的输入变动会导致系统的表现(如性能)发生急剧的变化。34压力测试2-2•压力测试用例的参考模板35其他测试内容•健壮性测试•用户界面测试•信息安全测试•可靠性测试•安装和反安装测试36•问题1:有了“黑盒”测试为什么还要“白盒”测试?•问题2:由于单元测试要写测试驱动程序,非常麻烦,能否等到整个系统全部开发完后,再集中精力进行一次性地单元测试呢?•问题3:如果每个单元都通过了测试,把它们集成一起难道会有什么不妥吗?集成测试是否多此一举?测试常见问题2-137测试常见问题2-2•问题4:在集成测试的时候,已经对一些子系统进行了功能测试、性能测试等等,那么在系统测试时能否跳过相同内容的测试?•问题5:既然系统测试与验收测试的内容几乎是相同的,为什么还要验收测试?•问题6:能否将系统测试和验收测试“合二为一”?38总结2-1•测试可以将测试描述为一个运行程序以发现错误的过程。•软件测试的准则:不完全测试、风险测试、无法显示潜伏错误、发现错误成线性增长、缺陷不能完全修复、测试有条理规程•测试的方法:黑盒/白盒、静态/动态•软件测试的各个阶段:单元测试、集成测试、系统测试、验收测试39总结2-2•测试的内容包括:接口/路径测试、功能测试、性能测试、压力测试、可靠性测试、安全性测试、用户界面测试、安装/反安装测试