软件构造:面向测试的编程

    测试可以用来发现软件构造过程中的bug,越早进行测试就能越早地发现代码中潜藏的bug,快速找到bug所在位置并修正,做到及时止损。但测试往往不不是简简单单通过构造大量的数据和运算结果,然后调用程序运行,与结果相比较。这样的测试策略往往不会起到好的效果。这样的测试随机性太强,通常只能定位到特别浅显的bug,无法发掘潜藏在代码深处的bug。要想要找到这些潜藏在阴影中的bug,我们往往需要用专业的测试知识来解决。因此写下了这篇随笔。

    首先我们来看一下测试的种类。测试可划分为单元测试、集成测试、系统测试、回归测试、白盒测试以及黑盒测试

1.单元测试:

    单元测试是针对软件的最小单元模型展开的测试,通过隔离各个模块进行测试,优点是便于定位bug的位置并修正。这里的最小单元模型可以理解为每个类的每个方法。在单元测试的过程中要测试每个模块的输入输出、验证数据的一致性并且最好执行到模块的全部语句。单元测试作为编程的一部分,可能早于或晚于编程。但笔者这里建议还是越早进行单元测试越好,防止在编程结束后代码的bug积重难返,不容易定位bug的位置,为纠错带来困难。另外,由于是对软件的最小模型展开的测试,因此可能需要为测试的单元提供运行环境(驱动模块)或内部调用的模块(桩模块)

2.集成测试:

    集成测试是软件测试中的第二步,集成测试是将类中的一些方法,或一整个类也有可能是一些类集成起来一起测试。集成测试主要是测试不同组件和单元之间的交互与数据传递的问题。通常情况下,同一个软件的不同组件往往由不同人员进行开发,这导致可能在数据的交互上产生一些微妙的错误。因此集成测试对于这一类错误来讲意义非凡,是软件测试的重要组成部分。

3.系统测试:

    系统测试是软件测试过程中范围最广最大的测试。它是将软件中的全部单元模块都集成起来构造成一个系统来进行测试。这一部分测试可以看作是对软件系统设计目标的测试,往往需要测试软件是否能正常运行,是否能获得正确的结果,这是软件发布前最重要的一步测试。

4.回归测试:

    在计算机界有一句有名的笑话:”修复一个bug,但又引入了一百个bug。“回归测试就是针对这种情况设计的。软件在构造和更新过程中难免会修改代码来消除已经发现的bug,但是消除已经发现的bug并不代表没有引入新的bug,因此需要重新测试涉及修改操作的全部单元模块以保证没有引入全新的bug。回归测试在bug的修改以及软件的更新中具有重要意义。

5.白盒测试:

    白盒测试是在已知代码实现细节的情况下进行的测试。这部分需要了解测试的评价方法,主要分为路径覆盖,语句覆盖以及分支覆盖。这三种覆盖率越高证明测试的效果越好,其中三种覆盖率的效果也不一样,一般是路径覆盖>分支覆盖>语句覆盖

6.黑盒测试:

    黑盒测试是在未知代码实现细节的情况下进行的测试。

    然后我们再来看一下测试数据的选取。测试数据往往需要利用规约来实现。通过规约中的参数条件划分等价类,再根据规约中方法的功能来计算结果来设计测试数据。同时根据统计结果,大多数程序bug都是出现在数据的边缘位置,因此也需要对边缘数据进行测试。另外,对于某些涉及专业领域的测试数据,我们可以联系相关的专家来构造。

    以上便是我对面向测试的编程的理解。

posted @ 2022-06-10 21:43  马子涵  阅读(304)  评论(0)    收藏  举报