
以今天的名义
-
个人空间
- 组别:管理员
- 性别:
- 来自:
- 积分:285
- 帖子:257
- 注册:
2007-04-20
|
回复: [分享]软件测试经验与教训
经验52,关注测试方法的基于活动的测试手段 回归测试(regression testing)。回归测试涉及相同测试的重用,使得在软件变更以后可以重新执行(这些测试) 。共有三种回归测试。报告了程序错误,在该程序错误得到更正之后,这时的测试叫做程序错误更正回归(bug fix regression) 。其目标是证明该更正有误。老程序错误回归(old bugs regression)测试用来证明对软件的变更使老的程序错误更正变成未更正。副作用回归(side-effect regression)测试又叫做稳定性回归(stability regression)测试,要重新测试产品的很大一部分,其目标是证明该变更使得曾经没有问题的东西现在有问题了。 脚本测试(scripted testing) 。手工测试,采用由更高级的测试员编写的测试过程步骤,一般由低级程序员执行。 冒烟测试(smoke testing) 。这种副作用回归测试的目标,是证明新版本不值得测试。从一个软件版本到下一个版本,冒烟测试常常是自动化、标准化的。这种测试检查预期没有问题的内容,如果不是这样,就要怀疑该程序是用错误文件或基本上有问题的东西构建的。 探索式测试(exploratory testing) 。我们期望测试员在整个项目过程中,都要了解产品、产品的市场、产品的风险和怎样没有通过以前的测试。不断创建并使用新测试。新测试比老测试更有力,因为新测试是建立在测试员持续增长的知识基础之上的。 游击式测试(guerilla testing) 。对程序快速、有力的攻击。这是一种探索式测试,通常有时间限制,并由有探索式测试经验的测试员承担。例如,高级测试员花一天时间测试否则会被忽略的部分。测试员要进行最有力的攻击。如果发现严重问题,则对这部分要重新做预算,并且可能会影响整个测试计划。如果没有发现严重问题,这部分可以忽略,或只做少量测试。 场景测试(scenario testing)。场景测试(顾名思义)一般要涉及四个属性。(1)测试必须是现实的,应该反映客户实际要做的事。(2)测试应该是复合的,要以能够对程序构成一定挑战的方式包含多个功能。(3)应该能够容易并且快速地显示出程序是否通过测试。(4)如果程序没有通过测试,有关人员会强烈要求修改程序。具有这四种属性的测试会很有说服力,如果程序不能通过测试,一般会导致修改程序错误。但是,测试员可能需要花几天的时间开发出色的场景测试。 场景测试(scenario testing) 。通过用例导出的测试,又叫作测试试验(Jacobson 1992),Collard 1999)或用例流试验(use case flow test) 。(很多人把这些测试归到基于覆盖率的测试中,并注重要用例的覆盖率。) 安装测试(installation testing) 。以各种方式,在可以安装该软件的不同类型系统上安装该软件。检查在磁盘上增加或修改了哪些文件。安装后的软件能够正常运行码?再卸载时会出现什么情况? 负载测试(load testing) 。通过在面临很多资源要求的系统上运行,攻击被测程序或系统。在足够高的负载下,系统可能会失效,但是导致这种失效的事件模式会指出被测软件或系统中的弱点,这些弱点可能在被测软件的更一般的使用中暴露。Asbock(2000)对负载测试做了精彩介绍。 长序列测试(long sequence testing) 。测试要持续一夜,甚至几天,几周,目标是发现短序列测试遗漏的错误。这种测试经常发现的错误包括越界指针,内存泄漏,栈溢出,超过两个特性之间的错误交互等。(长序列测试有时叫做持久测试(duration testing),可靠性测试(reliability testing)或耐力测试(endurance testing) 。) 性能测试(Performance testing) 。运行这些测试通常要确定程序运行有多快,以便确定是否需要优化。不过这种测试也可以暴露很多其他程序错误。如果与的一个版本相比出现显著性能变化,则这可能是编码错误作用的反映。例如,在试验今天运行一个简单功能测试需要多长时间,明天在同一台机器上运行同样的测试需要多长时间时.如果两次运行时间相差三倍以上,则可能需要与程序员进行核对,或编写错误报告。更慢和更快两种情况都要警惕.因为程序的基本内容发生了变化。① ① Sam Guckenheimer指出, “性能差距还可能反映第三方组件或配置的变化。例如,JDK不同版本的JVM变化,会导致性能显著变化。由于这是客户可更新的组件,因此即使代码根本没有改变,性能测试也可能产生令人惊讶的结果”!
|