一、可测性问题详解
单元测试效益特别高,方法也很简单,但却尝试的企业很多,成功实施的企业很少,为什么呢?主要原因就是难于突破可测性问题。“可测”这个词,意思已经很明白了,如果不“可测”的话,那就是不能测,没法测,就是做不下去,或者困难太多,成本太重,热情被逐渐消磨,最后做不下去。所以可测性问题是单元测试的关键,是我们首先要解决的。
可测性问题是指代码的可测性很差,导致测试很困难,这是单元测试的关键阻碍。为什么代码的可测性会很差呢?原因是什么?一般来说,这些原因导致了代码的可测性差:项目很复杂,开发流程不规范,耦合度很高。耦合是指代码之间的互相依赖,例如一个函数调用另一个函数,就是耦合。
一般的建议是改进开发流程,提高代码可测性。但从实践来看,这是不现实的。可测性差在企业项目中普遍存在,有其客观原因,很难改变。首先,企业项目本身就多是很复杂的,这是需求决定的,改不了。其次,程序并不是虚无的,程序是客观事物的反映,客观事物本身是互相关联,互相纠缠的,必然形成代码间的耦合。第三,流程改进是一个长期的、渐进、困难的过程,不可能短期内实现飞跃,更不是引进几个工具或者规范就可以做到的。这方面我有过教训,几年前,我也认为可以通过流程改进来提高可测性,也给客户推荐过相关的解决方案,结果都差不多:劳民伤财。所以,可以说,可测性差有其必然性,这是客观现实。
那么,如何解决可测性问题呢?只有从测试技术的角度来考虑,才有可能找到真正有效的途径。要解决问题,我们首先要对问题有充分的了解,现在来看看可测性问题具体包含什么。