《软件测试的艺术》--读书笔记

来源:互联网 发布:淘宝上卖农产品怎么样 编辑:程序博客网 时间:2024/04/28 21:38
《软件测试的艺术》--读书笔记






第一章  一次自评价测试
        所谓软件测试,就是一个过程或一系列过程,用来确认计算机代码完成了其应该完成的功能,不执行其不该有的操作。
自评价测试:我们要求设计一组测试用例(特定的数据集合),适当地测试一个相当简单的程序。为此要为该程序建立一组测试
数据,程序须对数据进行正确处理以证明自身的成功。下面是对程序的描述:
        这个程序从一个输入对话框中读取三个整数值。这三个整数值代表了三角形三边的长度。程序显示提示信息,指出该三角形
究竟是不规则三角形、等腰三角形还是等边三角形。


用你的测试用例集回答下列问题,借以对其进行评价。对每个回答“是”的答案,可以得1分:
1.是否有这样的测试用例,代表了一个有效的不规则三角形?
注意:如1,2,3和2,5,10这样的测试用例并不能确保“是”的答案,因为具备这样边长的三角形不存在。(两边和大于第三边)
 
2.是否有这样的测试用例,代表一个有效的等边三角形?
 
3.是否有这样的测试用例,代表一个有效的等腰三角形?
注意:如2,2,4的测试用例无效,因为这不是一个有效的三角形。
 
4.是否至少有三个这样的测试用例,代表有效的等腰三角形,从而可以测试到两等边的所有三种可能情况?
例如:3,3,4;3,4,3;4,3,3
 
5.是否有这样的测试用例,某边的长度等于0?
 
6.是否有这样的测试用例,某边的长度为负数?
 
7.是否有这样的测试用例,三个整数皆大于0,其中两个整数之和等于第三个?
注:也就是说,如果程序判断1,2,3表示一个不规则三角形,它可能就包含一个缺陷
 
8.是否至少有三个第7类的测试用例,列举了一边等于另外两边之和的全部可能情况?
例如:1,2,3;1,3,2;3,1,2
 
9.是否有这样的测试用例,三个整数皆大于0,其中两个整数之和小于第三个整数?
例如:1,2,4;12,15,30
 
10.是否至少有三个第9类的测试用例,列举了一边大于另外两边之和的全部可能情况?
例如:1,2,4;1,4,2;4,1,2
 
11.是否有这样的测试用例,三边长度皆为0?
例如:0,0,0

12.是否至少有一个这样的测试用例,输入的边长为非整数值?
例如:2.5,3.5,5.5
 
13.是否至少有一个这样的测试用例,输入的边长个数不对?
例如:仅输入了两个而不是三个整数
 
14.对于每一个测试用例,除了定义输入值之外,是否定义了程序针对该输入值的预期输出值?

        当然,测试用例集即使满足了上述条件,也不能确保能查找出所有可能的错误。但是,由于问题1至问题13代表了该程序不同
版本中已经实际出现的错误,对该程序进行的充分测试至少应该能够暴露这些错误。
        开始关注自己的得分之前,请考虑以下情况:以我们的经验来看,高水平的专业程序员平均得分仅7.8(满分14)。
        这个测验说明,即使测试这样一个小的程序,也不是件容易的事。如果确实是这样,那么想象一下测试一个十万行代码的空中
交通管制系统、一个编译器, 甚至一个普通的工资管理程序的难度。随着面向对象编程语言(C++、Java)的出现,测试也变得更
加困难。
 
注:编程语言的发展方向:面向过程语言--》面向对象语言--》函数式语言/动态语言。
        随着语言的发展,测试的方法、工具也会有不断的进化。类似Facebook无专职测试,类似Testin的第三方测试服务平台会慢慢
成为主流。对硕果仅存的专职测试人员的要求也越来越趋近于开发人员,而专职测试每天可能会有60%以上的时间在编码和沟通。
 
 
 

第二章  软件测试的心理学和经济学
 
“测试是为了发现错误而执行程序的过程”。
 
黑盒测试:重要的测试策略,又称为数据驱动的测试或输入/输出驱动的测试。使用这种测试方法时,将程序视为一个黑盒子。测试
                    目标与程序的内部机制和结构完全无关,而是将重点集中放在发现程序不按其规范正确运行的环境条件。
白盒测试:另一种测试策略,或称为逻辑驱动的测试。允许我们检查程序的内部结构。这种测试策略对程序的逻辑结构进行检查,
                    从而获得测试数据。
                   
总结:
            测试投入的目标在于通过有限的测试用例,最大限度地提高发现的问题数量,以取得最好的测试效果。
            尽管穷举输入测试要强于穷举路径测试,但两者都不是有效的方法,因为这两种方法都不可行。

软件测试的重要原则:
1.测试用例中一个必需部分是对预期输出或结果进行定义;
2.程序员应当避免测试自己编写的程序;(反例:Facebook)
3.编写软件的组织不应当测试自己编写的软件;(反例:Facebook)
4.应当彻底检查每个测试的执行结果;
5.测试用例的编写不仅应当根据有效和预料的输入情况,而且也应当根据无效和未预料到的输入情况;
6.检查程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”;
7.应避免测试用例用后即弃,除非软件本身就是一个一次性的软件;
8.计划测试工作时不应该默许假定不会发现错误;
9.程序某部分存在更多错误的可能性,与该部分已发现错误的数量成正比;
10.软件测试是一项极富创造性、极具智力挑战性的工作;

注:
    第一条测试用例的必需部分包括预期结果、实际输出、操作步骤。第五、第六条:测试用例的编写应当根据有效和预料到的
输入以及无效和未预料到的输入。有效和可预料的输入来自需求规格,用以检查程序是否做了应该做的
无效及未预料到的输入
用来检查程序是否做了不应该做的。
第七条:强调了测试用例的可复用性。第九条:是比较重要的原则。即在程序中,发现错误的
地方,很可能隐藏着更多的错误未被发现。

 


 
第三章  代码检查、走查与评审
 
错误发现得越早,改正错误的成本越低,正确改正错误的可能性也越大。
 
代码检查与走查是两种主要的人工测试方法。
 
代码检查----用于代码检查的错误列表:
*数据引用错误
*数据声明错误
*运算错误
*比较错误
*控制流程错误
*接口错误
*输入/输出错误
*其他检查
 
图示
 
代码走查




第四章  测试用例的设计
                --------测试人员最为重要的技巧-掌握如何编写有效测试用例

软件测试中最重要的因素是设计和生成有效的测试用例。

本章将要讨论的测试方法:
    黑盒测试:等价类划分、边界值分析、因果图分析、错误猜测;
    白盒测试:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、多重条件覆盖;
推荐的步骤:先使用黑盒测试方法来设计用例,然后视情况需要使用白盒测试方法来设计补充用例。

白盒测试
1.逻辑覆盖测试
2.等价类划分
3.边界值分析
4.因果图
 
错误猜测:
 
测试策略:
1.如果规格说明中包含输入条件组合的情况,应首先使用因果图分析方法。
2.在任何情况下都应使用边界值分析方法。
3.应为输入和输出确定有效和无效等价类,在必要情况下对上面确认的用例进行补充。
4.使用错误猜测技术增加更多的用例。
5.针对上述用例集检查程序的逻辑结构。


 
 
第五章  模块(单元)测试

1.测试用例的设计方式
2.模块测试及集成的顺序
3.对执行模块测试的建议




第六章  更高级别的测试

一、功能测试

二、系统测试
包含:
    功能测试
    容量测试
    强度测试
    易用性测试
    安全测试
    性能测试
    存储测试
    配置测试
    兼容性/配置/转换测试
    安装测试
    可靠性测试
    可恢复性测试
    适应性测试
    文档测试
    过程测试

三、验收测试
 
四、安装测试
 
五、测试结束准则



 
第七章  调试
        调试是执行一次成功的测试之后所要进行的工作。记住,所谓成功的测试,是指它可以证明程序没有实现预期的功能。调试是
一个包含两个步骤的过程,从执行了一个成功的测试用例,发现了一个问题之后开始。第一步,确定程序中可疑错误的准确性质和
位置;第二步,修改错误。
 
暴力法调试:
 
归纳法调试:
 
演绎法调试:
 
回溯法调试:
 
测试法调试:
 
调试的原则: 1.定位错误的原则    2.修改错误的技术
 
错误分析:
 
 
 
 
第八章  极限测试
        20世纪90年代出现了一种名为极限编程(XP)的新型软件开发方法。一位名叫Kent Beck的项目经理设计了这种轻量、敏捷的
开发过程,并于1996年在戴姆勒-克莱斯勒公司的项目中进行了首次测试。
        XP模型高度依赖模块的单元和验收测试。总的来说,对每个无论多小的递增的代码变更,都必须进行单元测试,以确保代码库
满足其规格说明的要求。事实上,测试在XP中的地位如此重要,以至于需要首先创建单元(模块)测试和验收测试,然后才创建代
码库。这种形式的测试被称为极限测试(XT)。
 
极限编程基础
 
XP开发模型用12个核心实践来驱动该过程。简单来说,这12个核心的XP实践可以归纳为4个概念:
1.聆听客户和其他程序员的谈话;
2.与客户合作,开发应用程序的规格说明和测试用例;
3.结对编码;
4.测试代码库;
 
图:极限编程的12个实践
 
极限测试:概念
 
极限测试的应用
 
 
 
 
第九章  测试因特网应用系统
 
 
电子商务的基本结构
 
测试的挑战
 
测试的策略
 
架构:
一、数据表示层:
表示层在测试时的重点:
    内容;
    Web站点结构;
    用户环境;
 
注释:在对用户环境的测试中需要特别关注浏览器的兼容性问题:ActiveX控件、JavaScript、VBScript、Java applets等。
 
 
二、业务逻辑层:
业务层在测试时的重点:
    性能;
    数据有效性;
    事务;
 
 
三、数据访问层:
数据层在测试时的重点:
    响应时间;
    数据完整性;
    容错性和可恢复性;
 

注:
        不同架构下的测试思路:

1. BS架构:

2. CS架构:


因为部分章节涉及的领域工作中没有接触到,等以后用到再补充。



注:
        The Art Of Software Testing(Second Edition)    美  Glenford  J.Myers  等著    王峰  陈杰  译    机械工业出版社    2006.1

0 0
原创粉丝点击