《软件测试》Ron Patton著。
这本书很全面地介绍了软件测试的理论基础知识,也就是看了这本书对软件测试有了一定的了解,帮助我找到了一份关于软件测试的工作。在看这本过程中也有一些有疑问的地方,这里主要是针对自学软件测试以来对软件测试的理解的一点总结,并把自己不懂的地方梳理一遍。
一、软件测试工程师究竟要做些什么?
这本书中给到一个相对完整的答案:软件测试员的目标就是尽可能早地找出软件缺陷,并确保其得以修复。
在面试过程中,面试官曾经告诉过我,并不是为了找bug,而是协助开发人员完善产品。有道理,于是就更加同意一个忘了是在哪里看到的说法:软件测试有以下两个内容。(大概意思是以下)
1)检验需求分析文档所要求的功能是否完成。
2)检验产品是否符合最终用户的体验。
二、软件开发生命周期模式
4种最常用的模式
1、大爆炸模式
简单。几乎没有计划、进度安排和正规开发过程,所有精力都花在开发软件和编写代码上。尽量避免在此模式下进行测试。
2、边写边改模式
由于开头机会没有计划和文档编制,项目小组得以尿素展现成果。因此,边写边改模式极其适合意在快速制作并且用完就扔的小项目,例如原型范例和演示程序。
3、瀑布模式
强调三点:
1、瀑布模式非常强调产品定义
2、瀑布模式各步骤是分立的,没有交叉的。
3、瀑布模式无法回溯,一旦进入某一个步骤,就要完成该步骤的任务,才能向下继续。
4、螺旋模式(有点包含以上三种模式)
螺旋模式的总体思想是一开始不必详细定义所有细节。从小开始,定义重要功能,努力实现这些功能,接收客户反馈,然后进入下一阶段。重复上述过程,直至得到最终产品。
螺旋模式每一次循环包含6个步骤:1)确定目标、可选方案和限制条件;2)明确并化解风险;3)评估可选方案;4)当前阶段开发和测试;5)计划下一阶段;6)确定进入下一阶段的方法。
5、有些公司采用的模式:敏捷软件开发,快速原型,极限编程,进化开发等。
三、测试的方式
1、黑盒测试(功能性测试)
2、白盒测试(访问代码,能够查看和审查)
又可以分:
1、静态测试 ——测试不运行的部分,即检查和审核
2、动态测试 ——通常意义上的测试,即使用和运行软件
于是结合两种就出现了以下测试方式:
1、静态黑盒测试——测试产品说明书,并在软件编写之前找出问题(找出根本性问题)
2、动态黑盒测试——不深入代码细节测试软件的方法。
动态黑盒测试测试用例的方法
1)等价类划分
2)边界值分析
3)数据测试
4)状态测试
失败状态测试
(1)竞争条件测试和时序错乱
(2)重复测试——是否存在内存泄露
压迫测试——尽可能地限制软件的必要条件
重负测试——尽量提供条件任其发挥
5)通过性测试和失效性测试
失效性测试——纯粹为了破坏软件而设计和执行的测试用例
其他:像笨拙的用户那样做、在已找到软件缺陷的地方再找找、像黑客一样思考问题、凭借经验,直觉和预感。
3、静态白盒测试——通过正式审查和检验检查代码的细节
即在不执行软件的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程,有时称为结构化分析
1)正式审查——进行静态白盒测试的过程。
确定问题、遵守规则、准备、编写报告4个基本要素。
(1)同事审查——最简单,要求最低
(2)走查——比同事审查更正规化的下一步
(3)检验——最正式的审查类型。表述者不是原来的程序员。
2)通用代码审查清单
(1)数据引用错误
(2)数据声明错误
(3)计算错误
(4)比较错误
(5)控制流程错误
(6)子程序参数错误
(7)输入/输出错误
(8)其他检查
4、动态白盒测试——利用查看代码功能(做什么)和实现方式(怎么做)得到的信息来确定哪些需要测试、哪些不需要测试、如何开展测试。(也称结构化测试structural testing)
测试用例方法:
1)分段测试
(1)单元测试(模块测试)
(2)集成测试
(3)系统测试
以上三种递增测试有两条路径:自底向上(bottom-up)和自顶向下(top-down)
自底向上测试中要编写测试驱动模块调用正在测试的模块。
自顶向上测试有点像小规模的大爆炸测试。(编写一小段称为桩Stub的代码充当接口模块。)
2)数据覆盖
数据流、次边界、等式和公式、错误强制
3)代码覆盖
程序语句和代码行覆盖
分支覆盖
条件覆盖
没有指明动静态时好像通常指的是动态的。
四、其他测试的技术
配置测试
兼容性测试
外国语言测试
易用性测试
文档测试
软件安全性测试
网站测试
五、测试的补充
自动测试、缺陷轰炸、Beta测试(让他人验证和确认软件的常用过程)
性能测试、特别测试
六、测试文档
测试计划==》测试设计说明==》测试用例说明==》测试过程说明
一些典型问题:
1、 问:软件测试主要分哪些阶段?
答:
和开发过程相对应,测试过程会依次经历单元测试、集成测试、系统测试、验收测试四个主要阶段。
单元测试:单元测试是针对软件设计的最小单位––程序模块甚至代码段进行正确性检验的测试工作,通常由开发人员进行。
集成测试:集成测试是将模块按照设计要求组装起来进行测试,主要目的是发现与接口有关的问题。由于在产品提交到测试部门前,产品开发小组都要进行联合调试,因此在大部分企业中集成测试是由开发人员来完成的。。
系统测试:系统测试是在集成测试通过后进行的,目的是充分运行系统,验证各子系统是否都能正常工作并完成设计的要求。它主要由测试部门进行,是测试部门最大最重要的一个测试,对产品的质量有重大的影响。
验收测试:验收测试以需求阶段的《需求规格说明书》为验收标准,测试时要求模拟实际用户的运行环境。对于实际项目可以和客户共同进行,对于产品来说就是最后一次的系统测试。测试内容为对功能模块的全面测试,尤其要进行文档测试。
2、软件测试工程师所应具备的职业素质
优秀的测试工程师除了具备“专业技能、行业知识”外,还必须具备相应的交流技巧、组织技能、实践技能和积极态度。除此之外,还应该具备一些基本的个人素养:即专心、细心、耐心、责任心和自信心“五心”
3、软件测试职业发展方向