zoukankan      html  css  js  c++  java
  • 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 冒泡排序
    python链式调用REST API把参数放到URL中
    python assert断言用法
    python实现斐波那契数列
    Pycharm快捷键集合
    linux shell中$0,$?,$!等的特殊用法
    搭建邮箱服务器
    linux安装IB驱动方法
    Oracle:Redhat 7.4+Oracle Rac 11.2.0.4 执行root.sh报错处理
    Struts学习(一)
  • 原文地址:https://www.cnblogs.com/FlameLuo/p/9695986.html
Copyright © 2011-2022 走看看