UT的争议 from coach eric

在开发产品代码中是否作UT一直是一个有争议的话题。

scrum支持者们喜欢建议开发者在开发产品代码的同时就写下UT,使产品的质量可控。

APO们不太喜欢UT,因为写UT就意味着开发时间*2。也许它能减少debug的时候,但眼前开发才是最紧急的事情。

产品代码全部做UT是一个很大的effort,而一点都不做也面临着质量的风险。关于是否做UT,并没有准确的答案。这是一个权衡,关键怎样把握这个度。

首席coach在一次workshop中发表了它的观点,结果并不重要,喜欢他的分析过程。

理论分析

为什么要UT?

因为UT能及时发现修改代码带来的产品。

对于复杂的代码,UT可作为阅读文档。读者可以通过UT来理解代码的功能、目的、使用方法。

因此经常要改动的代码、复杂度高的代码、容易出错的代码需要UT。

为什么不要UT?

因为UT需要额外的工作量。

对于大量调用别的库的代码,打桩会非常麻烦。

因此对于大量调用其它库的代码,不适合UT。

定性分析

从两个角度来考查一个代码,分别是(1)复杂度、修改频度(2)UT代价

这样可以把代码分成4类:

(1)复杂度高、常修改、大量依赖其它的代码,例如上层业务相关

(2)复杂度高、不依赖其它代码的代码,例如特殊的复杂算法

(3)复杂度低、大量依赖其它代码的代码,例如适配层

(4)复杂度低、但不依赖其它代码的代码,例如功能简单的库

其中(2)应当尽可能地UT,(3)的UT意义不大,(1)(4)则视情况而定

定量分析

这只是简单地对代码分类,如何考查一个代码是否需要UT,而需要进一步判断。

可以通过现有静态分析工具计算代码的分支数、通过提交记录来分析代码的修改频率,以此计算代码的必要性。

通过静态工具分析代码的扇入扇出,以此计算代码UT的代价。

通过代码的UT必要性和UT代码可算出一个代码UT的性价比。

最后通过项目开发的实际情况,有目标地选择一部分代码进行UT。