软件调试技术
试探法(强行排错法),
回溯法:人工沿着程序的控制流程往跟踪代码,直到找出错误根源为止
对分查找法:缩小错误的范围,
归纳演绎
原因排除法
单元测试工具集合
Parasoft jtest
第一个自动化Java单元测试工具.
Parasoft C++Test
是单元测试和静态分析工具,自动测试C和C++类别、功能或组件.
Parasoft .TEST
是单元测试和静态分析工具,自动测试写在Microsoft?.NET框架的类别
Parasoft Insure++
是一个自动化的内存错误、内存泄漏的精确检测工具。
Parasoft CodeWizard
是高级C/C++源代码分析工具,采用三百种以上行业相关的编码准则,自动识别编译器未检测到的危险的编码构造。
DevPartner Studio Professional
是针对软件开发小组使用 Microsoft Visual C++,Microsoft Visual Basic,Java,ASP 或 HTML 设计的一套紧密配合的调试,测试和管理工具。
Rational Purify
是一个面向VC, VB或者Java开发的测试Visual C/C++ 和Java代码中与内存有关的错误,确保整个应用程序的质量和可靠性。
Rational Quantify
是一个面向VC、VB 或者Java开发的测试性能瓶颈检测工具
Rational PureCoverage
是一个面向VC、VB或者Java开发的测试覆盖程度检测工具
Junit单元测试框架
Junit单元测试框架—基于java语言对的主流单元测试框架
@beforeClass—位于数据准备前期或者其他前期准备(测试类调用前)
--用于提取代码中的共用部分减少冗余,只能声明注解一次
--必须在public static void,方法名随意,,只运行一次。
@AfterClass—位于所有用例运行之后,处理测试后续工作。
--测试类被调用运行结束之前,只能声明注解一次。
--必须在public static void,方法名随意,,只运行一次。
@Test—在Junit3中通过对测试类和测试方法的命名来确定是否为测试
--在Junit4中,只要在方法前加@Test就行,此注解必为单元测试。
--在一个测试类可多次注解,每个只被执行一次,必须是public void
--可以抛异常
使用Assert断言
1、断言相等:assertEquals(100,x),判断对象是否为同一个
断言不相等:assertNotEquals(100,x),判断对象是否不为同一个
2、断言数组内容相等:assertArrayEquals({1,2,3},x)
3、断言浮点数相等:assertEquals(3.1416, x, 0.0001)(必须设置误差值)
4、断言为null:assertNull(x)
5、断言真伪性:assertTrue(x > 0)/assertFalse(x < 0)
6、校准测试函数,使用操作符'=='比较实际和预期的是否重复
动态分析和静态分析
动态分析:代码运行结束后。模块功能检查和系统压力测试,必须执行代码后才能分析。
静态分析:代码运行之前。数据流分析和代码覆盖率,不需要执行代码就可分析。
自顶向下和自底向上
自顶向下测试:是从程序的初始模块开始测试。
(1)该方***在早期发现顶层的错误。
(2)早期的程序框架可以进行演示
(3)需要开发桩模块辅助测试。有些甚至需要多个桩模块辅助,加大了桩模块本来的错误影响。
(4)测试完一个上层模块后,挑选哪个模块作为下一个测试模块,以及测试的顺序没有唯一的界定标准。
优点:较早地验证了主要控制和判断点;按深度优先可以首先实现和验证一个完整的软件功能;功能较早证实,带来信心;只需一个驱动,减少驱动器开发的费用;支持故障隔离。
缺点:柱的开发量大;底层验证被推迟;底层组件测试不充分。
自底向上测试:是从程序的底层模块开始测试。
(1)I/O操作可以提前测试,更好提交测试用例。
(2)测试后比较容易观察输出。
(3)需要开发驱动模块。
(4)直到最后一个模块提交,程序才能完整的系统测试。
优点:对底层组件行为较早验证;工作最初可以并行集成,比自顶向下效率高;减少了桩的工作量;支持故障隔离。
缺点:驱动的开发工作量大;对高层的验证被推迟,设计上的错误不能被及时发现。
针对手机应用软件的系统测试
针对手机应用软件的系统测试,我们通常从如下几个角度开展:功能模块测试,交叉事件测试,压力测试,容量测试
,兼容性测试,易用性/用户体验测试等.
对手机可以施加的压力测试类型主要有:存储压力、边界压力、 响应能力压力、网络流量压力
软件验收测试
软件验收测试分为三类:
正式验收测试;
非正式验收测试其中包括α测试(由用户、测试人员、开发人员共同参与的内部测试。)
和β测试(内测后的公测,即完全交给最终用户测试。)
测试进度的制定(文档名词)
SOW:statement of work,工作任务说明书
HLD: High Level Design,概要设计说明书
LLD: Low Level Design,详细设计说明书
UTC: Unit Testing Cases,单元测试用例
在测试计划阶段需要根据(SOW)完成测试进度的制定
测试工具
LoadRunner-负载压力测试:预测系统性能。
JMeter+Badboy:基于JAVA的压力测试工具,Badboy用来进行脚本的录制
功能测试:通过自动录制、检测和回放用户的应用操作。将输出记录同预先给定的记录比较。
Junit:白盒测试工具:针对代码测试
测试管理工具:对测试需求、计划、用例、实施进行管理
测试辅助工具:本身不执行,可以生成测试数据,为测试提供数据准备
负载压力测试:LoadRunner:预测系统行为和性能的工业标准级负载测试工具。模拟上千万用户同时实施并发操作,来实时监控可能发生的问题。
功能测试: QTP(quicktest professional):自动测试工具
白盒测试:C++ TEST(做C和C++的白盒测试)、JUnit(Java白盒测试)
缺陷管理工具:Mantis、BugFree、QC、TD
用例管理工具:TestLink、QC
测试辅助工具:SVN
单元测试策略
逻辑覆盖、
循环覆盖、
同行评审、
桌前检查、
代码走查、
代码评审、
景泰数据流分析
集成测试策略
增量集成测试
增量集成测试:集成是逐步实现的,即逐次将未曾集成测试的模块和已经集成测试的模块(或 子系统)结合成程序包,再将这些模块集成为较大系统,在集成的过程中边连接边测试,以发现连接过程中产生的问题。(分为:自顶向下增量式测试、自底向上增量式测试、混合增量式测试)
比如:
非增量集成测试
非增量式集成测试是采用一步到位的方法来构造测试:对所有模块进行个别的单元测试后,按照程序结构图将各模块连接起来,把连接后的程序当作一个整体进行测试。
比如:
三明治集成测试
三明治集成是一种混合增殖式测试策略,综合了自顶向下和自底向上两种集成方法的优点,因此也属于基于功能分解集成。如果借助图来介绍三明治集成的话,就是在各个子树上真正进行大爆炸集成。桩和驱动器的开发工作都比较小,不过代价是作为大爆炸集成的后果,在一定程度上增加了定位缺陷的难度。