python代码评测_用Python编写干净 可测试 高质量的代码

【IT168 技术】

简介

编写软件是人所承担的最复杂的任务之一。AWK 编程语言和 "K and R C" 的作者之一 Brian Kernigan 在 Software Tools 一书中总结了软件开发的真实性质,他说,“控制复杂性是软件开发的根本。” 真实软件开发的残酷现实是,软件常常具有有意或无意造成的复杂性,而且开发人员常常漠视可维护性、可测试性和质量。这种不幸局面的最终结果是软件的维护变得越来越困难且昂贵,软件偶尔会出故障,甚至是重大故障。

编写高质量代码的第一步是,重新考量个人或团队开发软件的整个过程。在失败或陷入麻烦的软件开发项目中,常常按违反原则的方式开发软件,开发人员关注的重点是解决问题,无论采用什么方式。在成功的软件项目中,开发人员不但要考虑如何解决手中的问题,还要考虑解决问题涉及到的过程。

成功的软件开发人员会按照便于自动化的方式运行测试,这样就可以不断地证明软件工作正常。他们明白不必要的复杂性的危害。他们严格地遵守自己的方法,在每个阶段都进行认真的复查,寻找重构的机会。他们经常思考如何确保其软件是可测试、可读且可维护的。尽管 Python 语言的设计者和 Python 社区都非常重视编写干净、可维护的代码,但是仍然很容易出现相反的局面。在本文中,我们要探讨这个问题,讨论如何用 Python 编写干净、可测试、高质量的代码。

干净代码假想问题

演示这种开发风格的最好方法是解决一个假想的问题。假设您是某公司的后端 web 开发人员,公司允许用户发表评论,您需要设法显示和突出显示这些评论的小片段。解决此问题的一种方法是编写一个大函数,它接受文本片段和查询参数,返回字符数量有限的片段并突出显示查询参数。解决此问题所需的所有逻辑都放在一个巨大的函数中,您只需反复运行脚本,直到得到想要的结果。代码结构很可能像下面的代码示例这样,常常包含打印语句或日志记录语句和交互式 shell。

杂乱的代码

def my_mega_function(snippet, query)"""This takes a snippet of text, and a query parameter and returns """#Logic goes here,andoften runsonforseveral hundred lines

#There are often deeply nested conditional statementsandloops

#Functioncould reach several hundred,ifnotthousands of lines

return resul

对于 Python、Perl 或 Ruby 等动态语言,软件开发人员很容易一味专注于问题本身,常常采用交互方式进行探索,直到出现看似正确的结果,然后就宣告任务完成了。不幸的是,尽管这种方式很方便、很有吸引力,但是这常常会造成大功告成的错觉,这是很危险的。危险主要在于没有设计可测试的解决方案,而且没有对软件的复杂性进行适当的控制。

您如何确认这个函数工作正常呢?在开发期间最后一次运行它时它是正常的,您就此相信它是有效的,但是您能确定它的逻辑或语法中没有细微的错误吗?如果需要修改代码,会怎么样?它仍然有效吗?您如何确认它仍然有效?如果需要由另一位开发人员维护并修改代码,会怎么样?他如何确认他的修改不会造成问题?对于他来说,理解代码的作用有多难?

简单地说,如果没有测试,就不知道软件是否有效。如果在开发过程中总是假设而不是证明有效性,最终可能会开发出看似有效的代码,但是没人能够肯定代码会正确地运行。这种局面太糟糕了,我编写过这样的软件,也曾经帮助调试以这种方式编写的软件。幸运的是,很容易避免这种局面。应该先编写测试(比如测试驱动的开发),否则在编写逻辑的过程中编写代码的方向会偏离目标。先编写测试会产生模块化的可扩展的代码,这种代码很容易测试、理解和维护。对于有经验的开发人员来说,很容易看出软件是否是在一直牢记着测试的情况下编写的。软件本身在高手看来差别非常大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值