python之先测试再编码

Posted Flameluo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之先测试再编码相关的知识,希望对你有一定的参考价值。

1.准确的需求说明

2.做好应对变化的准备

3.测试四步曲

 

  在编译型语言中,将不断重复编辑、编译、运行的循环。在有些情况下,编译程序时就会出现问题,程序员不得不在编辑和编译之间来回切换。在python中,不存在编译阶段,只有编辑和运行阶段。

  测试就是运行程序。

  要避免代码在开发途中被淘汰,必须能够应对变化并具备一定的灵活性,因此为程序的各个部分编写测试至关重要(称为单元测试),而且是应用程序设计工作的重要组成部分。

  “测试一点点,再编写一点点代码”的理念 是胜于 “编写一点点,再测试一点点”的做法。

  测试在先,编码在后。称为 测试驱动的编程

 

1.准确的需求说明

  开发软件时,必须要直到软件要解决什么问题--要实现什么样的目标;

  要阐明程序的目标,可编写需求说明;也就是描述程序必须满足何种需求的文档。

  可使用python来描述需求,并让解释器检查是否满足了这些需求。

  注意:需求类型比较多;包括诸如让客户满意度这样模糊的概念;这里描述的重点是功能需求,即可程序必须提供哪些功能。

  理念是先编写测试,再编写让测试通过的程序。测试程序就是需求说明,可帮助确保程序开发过程紧扣这些需求。

  举例:

  假设要编写一个模块,其中只包含一个根据矩形的宽度和高度计算面积的函数。动手编写代码前,编写一个单元测试,其中包含部分直到答案的例子。

from area import rect_area
height = 3
width = 4
correct_answer = 12
answer = rect_area(height,width)
if answer == correct_answer:
    print("test pass")
else:
    print("test failed")

  在这个示例中,调用函数rect_area,并将参数heigth和width分别设置为3 和 4,再将结果与正确的答案进行比较。

  如果接下来,不小心将函数rect_area实现为下面这样,并尝试运行测试程序,将出现一条错误信息。

def rect_area(heigth,width):
    return height * height  #这是不对的

  则接下来,就需要检查代码,看看问题出在什么地方,并将返回的表达式替换为 height * width

  先编写测试再编写代码并不是为了发现bug,而是为了检查代码是否管用。

 

2.做好应对变化的准备

  自动化测试不仅可在编写程序时提供极大的帮助,还有助于在你修改代码时避免累积错误,这在程序规模很大时尤其重要。

  必须做好修改代码的心理准备,不是固守既有代码,但修改是有风险的,修改代码时候,常常会引入一两个意象不到的bug。如果设计良好(使用了合适的抽象和封装),修改带来的影响将是局部的,只会影响很小一段代码。这意味着你能够确定bug的范围,因此调试起来更容易。

  覆盖率:是一个重要的测试概念。

 

3.测试四步曲

  测试驱动开发过程的各个阶段

(1) 确定要实现的新功能。可将其记录下来,再为之编写一个测试。

(2)编写实现功能的框架代码,让程序能够运行(不存在语法错误之类的问题),但测试依然无法通过。测试失败是很重要的,因为这样你才能确定它肯恩失败。如果测试有错误,导致在任何情况下都能成功,那么它实际上什么都没有测试。

        不断重复这个过程:确定测试失败后,再试图让它成功。

(3)编写让测试刚好能够通过的代码。在这个阶段,无需完全实现所需的功能,而只要让测试能够通过即可。这样,在整个开发阶段,都能够让所有的测试通过(首次运行测试时除外),即便是刚着手实现功能时亦如此。

(4)改进(重构)代码以全面而准确地实现所需的功能,同时确保测试依然能够成功。

        提交代码时,必须确保它们处于健康状态,即没有任何测试是失败的。

  

  

 

以上是关于python之先测试再编码的主要内容,如果未能解决你的问题,请参考以下文章

如何测试文本片段是不是是 Quoted-printable 编码的

在python 3.6中处理自定义编码时遇到类型错误

常用python日期日志获取内容循环的代码片段

Pycharm首次使用教程

Python爬虫系列:判断目标网页编码的几种方法

在 Python 多处理进程中运行较慢的 OpenCV 代码片段