程序质量保证
个人谈一谈项目代码质量保证主要来源于以下几个方面:
- 程序员的经验,防御性的避免一些错误/坑。
- 单元测试:
单元测试
应该是测试中最细粒度的测试,这个测试一般来说贯穿了整个开发以及后期维护;它能够保证到每一个函数/功能的健壮性,从而提高代码的整体质量。 - 测试自动化: 测试自动化,应该来说至少应该包括了单元测试和功能测试自动化。 在开发或者维护过程中,在修改代码后,能够迅速的使用自动化测试进行验证,从而实现对代码质量的保证。但这里要注意的是,自动化测试用例也要随着问题的发现而不断的增加。
- 静态代码检查工具:这个除了编程过程中注意编译器给出的警告信息,也可以借助第三方工具进行代码检查,比如CPPLint等。
- 人工代码审查: 很多代码的漏洞或者问题,只有在运行时特定场景下才会出现,通过静态代码分析工具无法检测。通过人工代码审查一般能够发现这样的问题,比如一个很著名的OpenSSL 漏洞
Heartbleed
,如果代码有审查机制,也许就能避免这种低级漏洞(但影响很大)。
程序员的经验能够帮助我们在尽可能早的避免可能碰到的坑。而本文或者后面的一些文章,本人也想和大家讨论和风险一些编程教训。
‘==’判断条件
我们先来看一段代码,这段代码的本意是当变量iVal
为10
的时候,调用FunctionA()
, 其他情况调用FunctionB()
; 眼尖的读者容易发现,程序员却将iVal == 10
写成了iVal = 10
; 那么无论iVal
原来的值为多少,iVal = 10
永远条件为真,不会调用FunctionB()
。
if (iVal = 10)
{
FunctionA();
}
else
{
FunctionB();
}
这种语句编译器不错给出错误提示,因为iVal = 10
是一条合法的语句。程序员是人,都会犯错误,难免会出现这样的低级错误。那么怎么样避免这种低级错误呢?编程时候,强制自己养成习惯,将 iVal == 10
写成10 == iVal
;这样即使程序员不小心写成了10 = iVal
编译器也会给出错误提示,从而发现这个笔误。