淘宝的tcc(taobao code coverage)对开源的emma做了些许改进:
1、容许两份不同版本的em,ec文件进行合并(如果印记发生改变,覆盖率清零),这样改造的效果是,覆盖率报告具备时间“延续性”;
2、支持分布式集群的覆盖率侦测(理论上,集群上部署的应是同一个版本),经过覆盖率合并后得到的报告是反映应用当前版本的覆盖率;
3、将覆盖率信息采集到数据库,并且提供基于WEB的访问前端;
4、对android进行了支持;
正是这些改进,使得tcc成为统一的用于侦测Java测试覆盖率的平台。
其中,我对tcc所做的事情:
1、重写tcc的插装引擎(emma最重要的核心部分);
2、将改写emma源码,将覆盖率数据装入数据库;
3、提供2个版本的覆盖率对比的功能(直接在网页上对比);
4、实现重写em,ec文件的功能,因为emma的覆盖率信息是递增的,如果不重写,em和ec文件就会越来越大,实际使用中,我们有遇到em和ec文件大到四五百M大小。重写可以减少服务器存储这些文件的压力。
目前,tcc相当稳定,并且支撑了不少应用线上真实覆盖率的侦测。即,用tcc插装产品代码,并且发布到线上,采集真实的用户行为所产生的代码覆盖率数据,以做代码瘦身(消除无效无人使用的代码)的依据。