软件构造记录-测试

什么是测试

软件测试是提高软件质量的重要手段。

它是执行程序或应用程序的过程,目的是查找bug(error或其他缺陷),并验证软件产品适合使用,确认是否达到可用级别(用户需求)。

它关注系统的某一侧面的质量特性。

即使是最好的测试,也无法达到100%的无错误

residual defect rates 残留缺陷率(每1000行代码):

- 1-10:典型的工业软件。

- 0.1-1:高质量的验证。Java库可能达到这种正确性。

- 0.01-0.1:最好的,安全至上的验证。美国国家航空航天局和像Praxis这样的公司可以达到这个水平。

测试的特征

测试跟其他活动的目标相反:破坏、证错、“负能量”。

再好的测试也无法证明系统里不存在错误。

一个好的测试应该:

能发现错误

不冗余

最佳特性,多种测试方案中最好的

别太复杂也别太简单

测试等级

单元测试:验证一个特定的代码段的功能,通常在函数水平

集成测试:由多个程序员或编程团队创建的两个或两个以上的类,包,组件,系统的联合执行。

系统测试:测试一个完全集成的系统,验证系统满足其要求,在最终的配置上执行软件。

静态与动态测试(Static vs. Dynamic testing)

静态测试:用眼睛看,评审、走查、检查等
动态测试:使用测试用例集进行测试


测试与调试(Testing vs. Debugging)

测试:发现是否存在错误

调试:识别错误根源,消除错误

黑盒测试vs白盒测试

白盒测试可测试内部结构或通过查看源代码。
黑匣子测试将软件视为“黑匣子”,功能,而无需任何内部实现知识,看不到源代码。

为什么软件测试很难

穷举测试是不可行的:可能的测试用例的空间通常太大,无法面面俱到。

随意测试(“尝试一下,看看它是否有效”):不太可能发现bug,偶然测试没有意义。

随机或统计测试对软件不起作用。基于样本的统计数据对软件测试意义不大—软件与产品的巨大差异。

软件行为在离散输入空间中差异巨大:大多数正确,少数点出错;bug出现往往不符合特定概率分布。

测试无统计分布规律可循 。

测试用例

测试用例是什么? 测试用例:输入+执行条件+期望结果

好的测试用例:最可能发现错误,不重复不冗余,最有效,既不简单也不复杂。

测试优先的编程(Test-First Programming):

先写spec,再写符合spec的测试用例,最后写代码、执行测试、有问题再改、再执行测试用例,直到通过它。

不要把测试留到最后!

先写测试会节省大量的调试时间。

越早发现越容易纠正

更深入和更早的理解需求和设计

更早地暴露需求和设计的问题

可确保程序的可测试性

确保每个程序特征的测试都撰写完成

单元测试(Unit Testing)

针对软件的最小单元模型开展测试,隔离各个模块,容易定位错误和调试,隔离测试使模块调试更加容易,当一个模块的单元测试失败时,可以很容易发现该模块中的错误,而不需要在程序中的任何地方找。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值