《软件测试的艺术》本书出版于 1979 年,距今已经 40 多年了,我手里拿的是第三版。这部书虽然很久远,但还是有一些很有意思的观点,所以花了几天时间把它读完了。
我一开始学习编程完全不知道有测试的概念,在后面了解到 TDD等等,并且在一些小程序中实践后发现,测试可以解放我们的大脑,专注于面向接口编程而不需要记住所有接口的内部逻辑,更不要说随之而来的减少 Bug,方便重构等好处了。
中文写代码软件这本书主要内容分为两部分。首先是软件测试的心理学,然后是测试的方法论,讲解如何高效的编写测试用例。下面我将以什么是测试?为什么要测试?该如何测试?三个方面来讲解我读完这本书的感悟与体会。
首先什么是测试?我认为是为了保证我们编写的代码正常运行而实行的校验措施,提高我对程序能实现预期功能并在生产环境正常运行的信心。我以前对测试的态度是消极的,对我编写的代码块来说,我一般认为它是能正常运行的,或者说它大概率能实现我的所思所想,写测试只是为了对这个大概率正常的代码进行进一步的验证,可能我多花了一半的时间,但是只剔除了小概率会失败的情况。而作者正好相反,他预期我们的代码大概率蕴含错误,而我们多花一半的时间,剔除了大概率会失败的情况,由此测试的价值大大增加。自然我们内心也有了更强的
动力去写测试,毕竟谁不喜欢投入低,产出高的事情呢?从数学角度来解释,假设投入 10 个单位时间完成编写过程后,编写的代码只有 50 % 的概率能正常运行,此时代码价值为 10 * 0.5 = 5,单位时间价值为 0.5 / 10 = 0.05。如果投入 5 个单位时间编写测试,确保了剩下的 0.5 个单位的软件价值,则编写测试单位时间的价值为 0.5 / 5 = 0.1,如果投入 2 个单位时间进行测试,则测试单位时间价值为 0.5 / 2 = 0.25,编程效率为之前的 100% 、 250%。照这个逻辑想下去,不难发现测试的代码价值随着我们对代码正确率信心的下降而指数级上升。在这个复杂的现实世界中,懒惰而又讲究效率的程序员反而会成为测试的坚定拥护者。
其次是为什么要写测试?其实主要有三方面:一、编写测试可以保证代码实现了我们需要的逻辑,不至于到线上才出现一些低级 Bug。二、测试可以快速重复多次运行,节省我们每次修改完代码后花费无聊、痛苦的手动测试时间。三、写测试的过程可以理清我们代码的逻辑,毕竟我们不能对一个我们自己都不了解要做什么的代码块编写测试。
最后是我们该如何写测试呢?软件测试最普遍的两种手段一个是黑盒测试:数据驱动的测试或者输入/输出驱动的测试,’穷举输入’,另一种是白盒测试:逻辑驱动的测试,检查程序的内部结构。软件测试秉承着10项原则。其中有以下五点较为重要1.测试用例中一个必须的部
分是对预期输出或结果的定义2.测试用例的编写不仅应当根据有效和预期的输入情况,而且也应当根据无效和未预料到的输入情况3.检查程序是否’未做其应该做的’仅是测试的一半,测试的另一半是检查程序是否‘做了其不应该做的’4.应避免测试用例用后即弃,除非软件本身就是一个一次性的软件5.程序某部分存在更多错误的可能性,与该部分已发生错误的数量成正比。
《代码大全》里面提到,越好的程序员越是谦虚,因为他们明白编程是为了弥补人有限的智力,因此愿意通过学习来弥补。而编程糟糕的程序员往往自负,为此失去了提升自我的机会。对测试而言,我觉得这句话总结的很好,以此自勉。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。