测试、文档测试、单元测试

错误和测试通常,程序员和程序开发人员花费大量时间进行调试和测试。很难给出准确的百分比,因为这在很大程度上取决于其他因素,例如个人编程风格、要解决的问题,当然还取决于程序员的资质。毫无疑问,编程语言是另一个重要因素。正如古罗马人所知道的那样,您不必编写程序就会被错误所困扰。哲学家西塞罗在 2000 多年前创造了一个令人难忘的格言,经常被引用:“errare humanum est”* 这句格言经常被用作失败的借口。尽管几乎不可能完全消除软件产品中的所有错误,但我们应该始终为此雄心勃勃地工作,即将错
摘要由CSDN通过智能技术生成

错误和测试

人非圣贤孰能

通常,程序员和程序开发人员花费大量时间进行调试和测试。很难给出准确的百分比,因为这在很大程度上取决于其他因素,例如个人编程风格、要解决的问题,当然还取决于程序员的资质。毫无疑问,编程语言是另一个重要因素。

正如古罗马人所知道的那样,您不必编写程序就会被错误所困扰。哲学家西塞罗在 2000 多年前创造了一个令人难忘的格言,经常被引用:“errare humanum est”* 这句格言经常被用作失败的借口。尽管几乎不可能完全消除软件产品中的所有错误,但我们应该始终为此雄心勃勃地工作,即将错误的数量保持在最低限度。

错误类型

有各种各样的错误。在程序开发过程中,有很多“小错误”,主要是错别字。是否缺少冒号——例如,在“if”或“else”后面——或者关键字“True”被错误地写成小写“t”都会产生很大的不同。这些错误被称为语法错误。** 在大多数情况下,很容易发现语法错误,但其他类型的错误更难解决。语义错误是句法上正确的代码,但程序并未按预期方式运行。假设有人想将变量 x 的值增加 1,但他或她写的不是“x += 1”,而是“x = 1”。以下较长的代码示例可能包含另一个语义错误:

x  =  int ( input ( "x? " )) 
y  =  int ( input ( "y? " )) 
if  x  >  10 : 
    if  y  ==  x : 
        print ( "Fine" ) 
else : 
    print ( "那又怎样?" )

输出:

所以呢?

我们可以看到两个 if 语句。一个嵌套在另一个里面。代码在语法上绝对是正确的。但是,如果变量 x 的值都大于 10 且 x 不等于 y,则程序编写者可能只想输出“那又怎样?”的情况。在这种情况下,代码应如下所示:

x  =  int ( input ( "x? " )) 
y  =  int ( input ( "y? " )) 
if  x  >  10 : 
    if  y  ==  x : 
        print ( "Fine" ) 
    else : 
        print ( "那又怎样?" )

两个代码版本在语法上都是正确的,但其中之一违反了预期的语义。让我们再看一个例子:

对于 范围(7 ):
     打印(我)

输出:

0
1
2
3
4
5
6

该语句运行时没有引发异常,因此我们知道它在语法上是正确的。尽管无法确定该语句在语义上是否正确,因为我们不知道问题所在。可能是程序员想输出从 1 到 7 的数字,即 1,2,...7 在这种情况下,他或她没有正确理解范围函数。

所以我们可以将语义错误分为两类。

  • 由于缺乏对语言结构的理解而导致的错误。
  • 由于逻辑上不正确的代码转换而导致的错误。

单元测试

量体温

本段是关于单元测试的。顾名思义,它们用于测试代码的单元或组件,通常是类或函数。基本概念是通过测试“小”单元来简化对大型编程系统的测试。为了实现这一点,程序的各个部分必须被隔离成独立的可测试“单元”。可以将“单元测试”定义为一种方法,通过该方法测试单个源代码单元以确定它们是否满足要求,即返回所有可能的或定义的输入数据的预期输出。一个单元可以被看作是程序中最小的可测试部分,它通常是来自类的函数或方法。测试一个单元应该独立于其他单元,因为一个单元“相当”小,即可以管理以确保完全正确。

带有名称的模块测试

每个模块都有一个名称,该名称在内置属性中定义__name__。假设我们已经编写了一个模块“xyz”,并保存为“xyz.py”。如果我们使用“import xyz”导入这个模块,字符串“xyz”将被分配给__name__。如果我们将文件 xyz.py 称为独立程序,即按照以下方式,

$python3 xyz.py

的值__name__将是字符串'__main__'

以下模块可用于计算斐波那契数。但是模块在做什么并不重要。我们想演示如何在模块文件中创建一个简单的模块测试——在我们的例子中是文件“xyz.py”——通过使用 if 语句并检查__name__. 我们检查模块已经启动独立,在这种情况下的价值__name____main__。请将以下代码保存为“fibonacci1.py”:

-斐波那契模块-

def  fib ( n ): 
    """ 迭代计算第 n 个斐波那契数 """ 
    a ,  b  =  0 ,  1 
    for  i  in  range ( n ): 
        a ,  b  =  b ,  a  +  b 
    return  a 
def  fiblist ( n ): 
    """ 创建一个斐波那契数列表,直到第 n 代 """ 
    fib  =  [ 0 , 1 ] 
    for  i  in  range ( 1, n ): 
        fib  +=  [ fib [ - 1 ] + fib [ - 2 ]]
    返回 fib

可以在交互式 Python shell 中手动测试此模块:

 fibonacci1 导入 fib ,  fiblist 
fib ( 0 )

输出:

fib 函数测试成功!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值