软件测试目的
- 发现被测对象与用户需求之间的差异,即缺陷
- 通过测试活动发现并解决缺陷,增加人们对软件质量的信心
- 通过测试活动了解被测对象的质量状况,为决策提供数据依据
- 通过测试活动积累经验,预防缺陷出现,降低产品失败风险。
缺陷产生原因
- 需求表达、理解、编写引起的错误
- 系统设计架构引起的错误
- 开发过程缺乏有效地沟通及监督,甚至没有沟通或监督
- 程序员编程中产生的错误
- 软件开发工具本身隐藏的问题
- 软件复杂度越来越高
- 与用户需求不符,即使软件实现本身无缺陷
- 外界应用环境或电磁辐射导致的缺陷
常见缺陷分为以下4种情况
1.遗漏:一是根本没记录需求,需求本身就遗漏了客户的原始需求,二是需求是齐备完整的,但是在设计开发阶段,遗漏了某些需求
2.错误:需求是正确的,但在软件编码实现阶段未将规格说明正确实现,可能在概要、详细设计时产生了错误,也可能是编码错误,既有次需求,但是需求实现与用户期望不一致
3.冗余:需求规格说明书为涉及的需求被实现,即用户未提及或无需的需求,在被测对象中得到了实现
4.不满意:用户对实现不满意亦可称为缺陷。
软件测试分类
1.按测试方法划分
-
黑盒测试:又称功能测试、数据驱动测试或基于需求规格说明书的功能测试。通过测试活动了检查被测对象每个功能能否正常使用,是否满足用户的需求。黑盒测试重点检查的是被测对象界面、功能、兼容性、易用性等方面的需求,主要的检查点包括以下方面
- 功能不正确或遗漏
- 界面错误:一般集中在错别字、界面布局等方面,并且缺陷级别通常都定位低。
- 数据访问性错误:数据访问性错误通常发生啊在接口上,比如,A系统需要调用B系统的某些数据,并设定定时自动调用数据的功能,实际工作中,随着时间的推移,经常出现不能及时调用的错误,甚至不能工作
- 性能错误:黑盒测试阶段,可以从被测对象的业务响应速度、业务并发处理能力、业务成功率、系统资源耗能等方面去衡量,而不需要考虑程序内部代码的质量。
- 初始化和终止错误等:应用加载一些必须的配置信息,一旦这个过程出现问题,即出现了初始化问题,可能导致程序闪退。终止性错误指某个应用在出现错误后无法保留当前工作状态,执行其提示的操作后,导致程序崩溃,无法正常工作。
-
白盒测试:基于程序代码内部结构的测试。测试方法主要包括:代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法和基本路径法,其中最为常用的方法是代码检查法。
代码检查法包括桌面检查、代码审查和走查,主要检查代码和设计的一致性,代码对准的遵循性、可读性,代码逻辑表达的正确性,代码结构的合理性等方面。
-
灰盒测试:黑盒测试仅关注程序代码的功能性表现,不关注内部的逻辑设计、构成情况,白盒测试则仅从程序代码的内部构成考虑,检查其内部代码设计结构、方法调用等,而灰盒测试结合两种测试方法,一方面考虑程序代码的功能性表现,另一方面有需要考虑程序代码的内部结构。
-
静态测试:不执行被测对象程序代码而寻找缺陷的过程。通俗地讲,静态测试就是用眼睛看,阅读程序代码、文档资料等,与需求规格说明书进行比较,找出程序代码中设计不合理以及文档资料有错误的地方。
一般在企业中召开正规的评审会,通过评审的方式,找出文档资料、程序代码中存在缺陷的地方,并加以修改。
-
动态测试:指实际地执行被测对象的程序代码,执行事先设计好的测试用例,检查程序代码运行得到的结果与测试用例中设计的预期结果之间是否有差异,判定实际结果与预期结果是否一致,从而检验程序的正确性、可靠性和有效性,并分享系统运行效率和健壮性等性能情况。
动态测试由四部分组成:设计测试用例、执行测试用例、分析比较输出结果、输出测试报告。
动态测试有三种主要的方法:黑盒测试、白盒测试以及灰盒测试。
-
手工测试:通过模拟终端用户的业务流程应用软件系统,检查被测对象实际表现与预期结果间的差异,测试工程师手工运行被测对象,这种模式即为手工模式。
优点:充分发挥测试工程师的主观能动性,将其智力活动体现于测试工作中,能发现很多的缺陷。
缺点:测试方法有一定的局限性与单调枯燥性,当测试周期长、业务重复性较大时,手工测试容易变得枯燥乏味。
-
自动化测试:利用测试工具,编写一下代码。模拟用户的业务使用流程,自动运行来查找缺陷。自动化的引入,大大地提高了测试的效率和测试的准确性,而且写出的比较好的测试脚本,还可以在软件生命周期的各个剪短重复利用。
2.按测试阶段划分
-
需求测试:指需求调研完成后,由测试部门或者需求小组进行需求的测试。需求测试从去求文档的规范性、正确性等方面检查需求调研阶段生成的文档,测试工程师最好有经验的需求分析人员,并且得到了需求调研期间形成的DEMO。
-
单元测试:又称模块测试,就是对程序代码中最小的设计模块单元进行测试。
单元测试实在软件开发过程中进行的最低级别的测试活动。主要采用静态测试与动态测试相结合的办法。首先采用静态的代码走查,检查程序代码中不符合编程规范,存在错误或者遗漏的地方,同时项目小组使用代码审查的方法检查项目代码,以期发现更多的问题。
然后使用单元测试工具,比如JUint、TestNG等工具进行程序代码内逻辑结构、函数调用等方面地测试。
-
集成测试:又称组装测试,就是将软件产品中各个模块集成组装起来,检查其接口是否存在问题,以及组装后的整体功能、性能表现。
集成测试阶段主要解决的是各个软件组成单元代码是否符合开发规范、接口是否存在问题、整体功能有无错误、界面是否符合设计规范、性能是否满足用户需求等问题。
-
系统测试:将通过集成测试的软件,部署到某种较复杂的计算机用户环境进行测试。
系统测试的目的在于通过与系统的需求定义做比较,发现软件与系统的定义不符合与之矛盾的地方。这个阶段主要进行的是安装与卸载测试、兼容性测试、功能确认测试和安全性测试等。
系统测试阶段采用黑盒测试方法,主要考查被测软件的功能与性能表现。
系统测试过程其实也是一种配置检查过程,检查在软件生产过程是否有遗漏的地方,在系统测试过程中做到查漏补缺,以确保交付的产品符合用户质量要求。
-
用户测试:在系统测试完成后,将会进行用户测试。
-
回归测试:缺陷修复后,测试工程师需求重新执行测试用例,以验证缺陷是否成功修复,并且没有引发新的缺陷。
有些公司会采用自动化测试工具来进行回归测试,比如利用UFT、Selenium等工具,对于产品级、变动量小的软件而言,可以利用这一的工具去执行测试。
但一般情况下,都由测试工程师手动执行以前的测试用例,来检查用例通过情况。敏捷开发模型中,倾向于实现回归测试自动化。回归测试可以发现产品发布前未能发现的问题,比如时钟延迟、软件性能问题等。