1,成型项目,代码量多,质量参差不齐,正好没测试覆盖,这个时候持续加功能代码经常不稳定,以及低效率。这个时候大家一般会有哪些处理方式方法,提供个思路。
2,如果你很幸运做了一个工程有人用,一两年后,数据量大了,性能问题来了,其中有一些是简单加 db 索引和优化 sql 无法解决的,大家又有哪些处理的方式?
对于新添加的代码,一定要写测试用例,在保证新代码质量的前提下再去动老代码,如果时间和人力不是很充足,不建议轻易去重构,尤其是没有单元测试的老代码,改起来有可能引入新的问题。如果老代码功能稳定,能不改就不改,不要因为看不顺眼去动老代码,把更多的精力放在改善性能,稳定性,安全性这些方面。
公司很多这样的项目,没有测试覆盖,产品童鞋每次都嚷嚷:每次测都有其它 bug 出来,一波未平一波又起。
没单元或者功能测试代码在后面支撑,没有人肉测试,咱也受不住了。
接下来,自己想试试从功能测试的开始,看看付出与收获是不是老板可以接受的。
这个楼盖起来
如果明天的新闻标题是:“重构期出现大 bug,公司损失过百万”,或:“重构期出现大 bug,公司年终奖被取消”,或:“重构期出现大 bug,开发组成员明日天台集合”,那就真要想想重构有没有必要了。。。
我就是在项目中期加测试的。前期开发大半年,为了开发速度完全没有任何测试,纯肉测……
加测试没必要一步到位(也不可能一步到位),你做什么功能,就把相关的测试补上,没改动的地方可以暂时不加。
另外如果新功能涉及到重构原有的老代码,一定要先写测试!测试最好由外而内写,没时间写完全部的,就写外部功能测试,并把各种 edge case 都加上。没 mock 没关系,构造真实数据没关系,测试慢点也没关系。重要的是保证结果正确。测试写完跑通了,然后再重构,分离耦合度高的代码,然后再重构测试代码,逐渐地由一个大的功能测试文件转成一个适当 mock 的功能测试,和若干个模块的单元测试。
老板/客户那边,如果碰到过加一个功能就 break 一些东西的黑历史,应该是很能说通的。否则就把实现功能加测试的时间评估成功能开发时间。至少在我看来测试代码也属于功能的一部分。
改变的方式有两种,一种重构,一种重写。
老代码老方式。
新代码把工程逻辑上拆分成几个小块,然后重写小工程(加测试,不限语言),逐步替代老程序。就不来点新的想象空间?