从重构到吐血 - 我是如何删掉 6 万行代码并且不删减原有功能的

2017-12-10 16:42:44 +08:00
 pupboss

原文发表在我的博客 近期重构工作的一点收获

主要重构工作如下

关于删除代码,在某个项目里,Pods 文件夹那些第三方库的代码删了 9 万多行(那个目录没有被 git ignore 掉),项目里面删除了大约 4 万行,其中大量代码是该项目之前的项目里面留下来的东西,只不过没人清理。在删了 4 万行之后,程序仍然能完整的跑。

接下来是做了部分重构,把一些第三方库删掉,自己造轮子,在这个过程中,累计删除了 1.2 万行代码,增加了 1100 行左右。

整个重构工作下来,编译速度从 2-3 分钟减小到了 40 多秒( 13 寸 2 核心机器),warning 从 70 多减少到了 0,第三方库的数量从 51 个减少到了 13 个,安装包从 22.1M 减小到了 3.7M ,功能反而比之前还要多。

原文发表在我的博客 近期重构工作的一点收获

10580 次点击
所在节点    程序员
80 条回复
WangYanjie
2017-12-10 16:45:57 +08:00
我更好奇,过程中是如何保证重构代码的功能正确性的?
Rorysky
2017-12-10 16:49:03 +08:00
看着都好累……
pupboss
2017-12-10 16:56:16 +08:00
@WangYanjie 不是很会用单元测试,所以靠的是人肉 debug,其实如果遵循规范的话,比如布局全部用 AutoLayout,基本上不会出问题。测试的过程中发现部分 UI 不对劲,是因为那个 UITableVIew 的 cell,没有用 AutoLayout 算高度。

功能方面,3.7M 的安装包已经很能说明问题了,一共就 20 多个页面,不是像淘宝那样复杂,重构的过程又是基本相当于重写,一个个页面挨着测过一遍,功能就很正确了,没有很复杂的页面,最多也就是下单页面动态加载用户优惠券这个级别的
pupboss
2017-12-10 16:57:46 +08:00
@Rorysky 😂累是一方面,以*万行为单位,删代码的感觉,是真的爽
pie
2017-12-10 17:00:59 +08:00
只能说 lz 太强大了
pupboss
2017-12-10 17:02:40 +08:00
@pie 我想说句政治不正确的话。。。不是我太强大,全靠队友衬托
Loyalsoldier
2017-12-10 17:16:03 +08:00
请问博客主题是什么,有开源吗?挺好看的~
pupboss
2017-12-10 17:22:57 +08:00
@Loyalsoldier 有的,我是基于 https://github.com/kelyvin/caffeine-theme 修改,因为修改的项目很多,和我自己耦合太强不适合分享,你可以基于他这个再定制你自己的,这是我当初优化的点供参考:[本博客优化点总结]( https://www.pupboss.com/summary-of-my-blog-optimization/)
firefox12
2017-12-10 17:26:14 +08:00
只想说改好了是牛逼 幸运 不成功才是正常。没有设计文档 测试文档 单元测试自动测试 联合测试 层层把关 你怎么敢说自己的重构是成功的呢?
jpmorn
2017-12-10 17:31:46 +08:00
删除没用到的第三方库 这点就是 golang 好了 引入了不必要的库,直接编译不通过!!!

变量未使用,直接编译不通过!!!!

之前写的时候是一脸懵逼,goland 提示我的时候我还嫌他多事!!!哈哈哈
RorschachZZZ
2017-12-10 17:34:26 +08:00
我手上也有一个比较复杂的交易系统。没有单元测试,文档也不是最新的。每改一个地都提心吊胆的。。。
pupboss
2017-12-10 17:39:33 +08:00
@firefox12 哈哈,多谢前辈指教,重构的绝大部分还是成功的吧,因为每次重构,都是只针对一个模块,不会说一下把所有东西都重写一遍,再就是可能前辈公司的业务复杂度比较高,就我们这个项目而言,登录 注册 录音 识别 查看商品 下单 收藏,功能还是比较单一的,所以会出问题的地方不多

@jpmorn Go lang 还有这么个功能,下周我也会去看看哈哈哈哈

@RorschachZZZ 对的,我在上家公司,页面的业务非常复杂,重构过一个页面,感觉也是提心吊胆,重构完一个页面,有别处又用到这里面一个 View,一般都会出布局错误😂
forestyuan
2017-12-10 17:40:03 +08:00
重构过程中引入了多少个 BUG 就只有天知道了
pupboss
2017-12-10 17:41:25 +08:00
@forestyuan 重构完之后的上线,肯定会安排大量的测试的嘛,重构也是两个月前的事情了,现在才分享出来,所以根据这期间的 issue 来看,问题不算多,还修复了很多莫名其妙的问题
hilow
2017-12-10 18:01:14 +08:00
看到你的描述,我第一时间想到的也是 golang
只要是不实用的库或者变量,直接编译失败
开始感觉很烦,后来感觉很爽
尤其看到你重构过程删除那么多代码,如果用 golang 做的,肯定会好很多
WispZhan
2017-12-10 18:22:33 +08:00
能给时间重构,只能说项目组也算靠谱了。
WeberXie
2017-12-10 18:24:25 +08:00
好奇楼主 [Project Officer] 这个工作,可以介绍下吗
pupboss
2017-12-10 18:25:40 +08:00
@hilow 不得不说 Golang 这一点真的不错

@WispZhan 对呀还是不错的,当时也不断有新需求,都被我用重构的借口给他延期了……
pupboss
2017-12-10 18:26:56 +08:00
@WeberXie 就是 NTU 在社会上招聘一些人过去做项目,签证上面的 title 是 Researcher
zj299792458
2017-12-10 18:33:17 +08:00
这么大的人力投入,没有增加任何新功能,没有提高用户体验,要是我们老大肯定不会允许的😄

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/413522

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX