说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何管理和优化日益增长的代码复杂度?

HTML文档下载 WORD文档下载 PDF文档下载
随着时间的推移,软件项目会变得越来越大,项目中组件之间的依赖关系也会变得越来越错综复杂。那么如何对代码的复杂度进行管理并优化呢?Plumbr项目团队的做法或许可以为你提供一些参考。

随着时间的推移,软件项目会变得越来越大,项目中组件之间的依赖关系也会变得越来越错综复杂,项目的维护也会变得越来越困难。

Plumbr(Java内存泄露检测器)开发团队的一篇博文揭示他们这个项目在开发过程中,其代码复杂性是如何演变的。

本文中的这些代码依赖图是该团队在项目开发过程中使用Structure 101来生成的。通过Structure,开发者可以定义一个规则来约束代码之间的交互和依赖关系,从而简化开发和重构过程中的代码复杂度管理。但在Plumbr项目一开始,并没有使用Structure,只使用了其中的Restructure产品来可视化项目中的依赖。但在后面项目越做越大时,团队才开始考虑使用Structure。

Restructure使用如下两个指标来表示代码的质量:

  • Tangle(混乱度):用来表示代码构件(比如包、类)之间的关系是否错综复杂
  • Fat(肥胖度):用于表示单独的类、包是否庞大且杂乱

严格来说,并不是Tangle和Fat数值小就意味着你的代码库比较好。但是这两个指标确实能为你的代码优化工作带来一些帮助,比如规模较小的单个代码片(Fat数值小)更容易让人理解,依赖关系少(Tangle数值小)的代码更具可预测性,这样的代码中的bug就会更少,代码也更容易维护。

下面就来看看Plumbr项目代码的复杂性的演变。

故事始于2011年初,那时刚开始创建代码库。从下面的截图中可以看到,代码的Tangle数非常低(图左上角色谱中的小黑点),可以说这为将来的开发工作打下了一个坚实的基础。但实际情况是,项目团队仅仅只写了几千行源代码,还没来得及写更多东西。


但是只过了6个月,就呈现出了不同的画面。如下图所示,Fat数依然很低,但是依赖关系已经开始变得混乱(看小黑点的纵坐标轴)。


又过了6个月,可以看到项目代码Fat数依然很低,Tangle数依然很高。但是你可以看到一些包(allocation、io、lifecycle)现在已经从混乱的代码库中独立了出来。其实,该团队在这个时期的后段使用了Structure 101来管理代码。


又过了半年时间,事情似乎走向了极端。现在除了依赖关系异常混乱外,代码的Fat情况也相当严重。这时项目团队开始全面使用Structure 101产品来分析下面这张图片,并问自己一些有实际意义的问题,比如:

  • 为什么report代码要依赖一个引用包?
  • 为什么在文件系统工具和日志包之间有这么一个强周期性依赖?

当然,即使没有Structure101这个工具,也应该问自己一些类似的问题。但不可否认,该工具对问题进行了可视化,对于优化代码有很大的帮助。


发现问题后,项目团队就开始采取措施进行优化。下面这张图片大约是半年前的,可以看到,所有添加的新代码已经变得整洁,比如同级组件(fs、http等)之间的依赖关系现在已经得到了改善。


下面这张图片是一周前的。虽然代码库比半年前增长了25%,但是Tangle数已经成功地从39,000减少到了16,000,代码变得更加整洁、结构更加自然了。另外,项目团队的开发水平也有了一定的提高。


结论

项目代码复杂性的管理要贯穿项目始终,这样到项目后期,维护起来也不会特别困难。或者你可以制定一些依赖规则,然后在开发过程中强制执行。

这个故事是一个很好的样本,展示了一个小团队如何在一个相对短的时间内创建一个混乱的代码库。你也可以设想一下,如果一个10人开发团队开发一个预期寿命为10年的项目,最终的项目依赖关系图会是什么样的呢?(编译/王果 审校/张红月)

英文原文:Managing code complexity

微软CloudOS云操作系统构建企业级三云合一 IE11支持JavaScript新型API,Web应用国际化更便捷 谷歌推订阅应用Play Newsstand:杂志+RSS阅读器 【信息图】到2020年开发者、设计师、测试员的数量将达到史无前例的高度 推广与盈利专题论坛:中国影响世界,世界定义中国 SlideIdea CEO李建忠:移动产品的技术面思考 BDTC→→百度林仕鼎、腾讯蒋杰、阿里唐洪论道大数据平台与技术 谷歌首席互联网布道师:隐私保护并不是一种正常行为 微软公开“挑衅”谷歌,出售反谷歌标语T恤 四大UX设计原则,打造网站最佳浏览体验 【BDTC讲师】黄晓庆:从小灵通到Hadoop与实时大数据分析 【BDTC讲师】杨强:从禽流感预测到图片语义解释 2013中国大数据技术大会讲师议题正式发布 “2013中国大数据周”即将开幕 正式发布中国大数据现状白皮书 搜狐畅游发布3D游戏引擎Genesis-3D 基于MIT协议开源 传闻微软将收购AOL旗下的Winamp和Shoutcast 【BDTC讲师】大数据时代“掘金机”:百度、360、一淘搜索技术分享 谷歌董事长:审查,将会在十年内消失 50万奖金+天使投资:创维天赐家庭互联网创新大赛开幕 专利案苹果获胜:获赔2.9亿美元 三星不服将继续上诉 Google正打造Spark:一个基于Chrome App的集成开发环境 研发周报:成为一名PHP专家其实并不难 将Vistual Studio打造成为Node.js IDE 度量Web性能的关键指标 路由器未火够!高通发布互联网处理器 Unite2014大会:移动开发者的饕餮盛宴 玩与学并存 Kano kit让你自制Raspberry Pi电脑 【BDTC讲师】Hortonworks Gunther&Ted:HBase、Stinger的发展与实践 人人网推出开放平台2.0 多项重大改进吸引开发者回流 红帽高管:将Linux价值理念和做法延伸到OpenStack Fundation 5发布:号称最快版本,响应式用户体验更完善 消息机制??? 请教,如何做一个进度显示?希望(详细点)!拜托高手 一个关于属性页的问题 新手问题:SQL*PLUS出错! 一道调用传递引用的参数,实现两个字符串变量的交换的题目,帮帮忙! 离开 论坛 散分 关于php与frontpage之间的一些问题!! 离开 论坛 散分【二】 在ASP中生成SURFER对象时出现错误 离开 论坛 散分【三】 离开 论坛 散分【三】 急救! 如何操作磁卡读写器 Help,如何更改DataGrid控件选中那个单元格的背景色和前景色? 2000共享文件问题,请高手看一下,很古怪的! 朋友,你好! 离开 论坛 散分【四】 高手救命,简单数据库规划问题!!!价值50分!!! 想听听大家对 static 命名的函数、变量的用法 Access数据库传到服务器后,变为只读了?求助,白思不得其解 请问怎样取得PCM流 离开 论坛 散分【五】 打包,解包??? 离开 论坛 散分【六】 离开 论坛 散分【七】 求教SQL语句,高手、或刚入门的同道都进来讨论一哈 最初linux使用什么编译开发的? 离开 论坛 散分【八】 关于字符串截取问题 谁有FASTREPORT的注册版本 我急用!在线等待!谢谢! 离开 论坛 散分【九】 Application.messagebox和messagebox有什么区别呢? 水晶报表的两个小问题? 怎样向Foxpro表中添加float型数据? 离开 论坛 散分【十】 问一个和Session有关的问题,达人请进 在宏里把ie关闭。非常感谢 如何让window.showModalDialog的page提交数据到原来的父页面? 合租住房!! 有没有一个命令直接解开iso文件或提取里面的一个文件或文件夹 请给看看程序:AVI视频的读取和重建 如何显示出电脑内已经注册的dll文件列表? 中程浮点数问题! solaris下CC编译器的问题? UML的书籍和软件? 那里有vs.net2003的vss6.0d版本? 有时候exe文件不能运行? 自己准备写一个工资发放和发布的程序,欢迎探讨. 襄儿妹妹还在吗?幸好偶这个马甲还有点分,全给你吧,这个ID密码她不知道呵呵~~~ 关于linux WEB服务器名的问题? 请教ATL中CBindStatusCallback的问题 P是定长直线AB上一点,C、D两点分别从P、B出发以1cm一秒和两厘米一秒的速度沿直线AB向左运动(C在线段AP上,D在线段BP上) (1)若C、D运动到任一时刻是,总有PD=2AC,请说明P点在线段AB上的位置 请问大家苏教版小学六年级语文上册习作五作文e有点着急了啊,打心底麻烦大伙5bK 若{x=4 y=3是方程组{mx+ny=5 my+nx=2的解,又正比例函数的图像经过点P(m,n),则该正比例函数的解析式是 麻烦看下苏教版小学六年级语文上册习作五作文我想知道到,打心底谢谢大伙9N 麻烦看下苏教版小学六年级语文上册习作五作文我想知道到,打心底谢谢大伙1Y 麻烦看下苏教版小学六年级语文上册习作五作文我想知道到,打心底谢谢大伙8m 麻烦看下苏教版小学六年级语文上册习作五作文帮帮着急的人吧,打心底谢谢给位朋友了3Y 谁有初一数学动点题?带图带答案拜托拜托 帮帮忙啊 对角线怎样的菱形或平行四边形是正方形? 有什么比较好的好的高中理科参考书?我今年高二,理科生,成绩算是中等吧各科都推荐一本我觉得讲解类的书比较适合我,原来买的5.3觉得题量太多所以也没怎么做所以最好推荐一下讲解类的~ 推荐一本高中理科辅导书RT…重点是知识点的分析和作用.还有题型的解题思路!重点是思路.不要那种从头到尾都是题目一点方法都没教的…谢谢 委总统微博掉粉 谴责国际右翼势力插手汤加发生6.4级地震房租过高 白领伦敦上班巴塞罗那居住坐韩国口罩销售量激增 韩媒曾为中国雾霾克里无奈承认:有些监听活动太过头日海陆空“夺岛演习”规模空前 自卫队外媒称美国驻德国大使馆系间谍中心 可中央第二轮巡视10个巡视组全部进驻被法民众抗议“生态税” 与防暴警对峙【证监会:提高中小股东话语权 建立背信国外球星逃税手段多样 “土豪”大战“中国人和美国人比谁更有钱,美国人这样ORICO网卡集线器 多款对比,才知天声一对 Linbell G2自发电GIF-中场大师睡皮的十大任意球!伊朗不参与冻产依然可行,油价止跌回升爱的旅程还在继续核四封存 朱立伦:贡寮不应再要求回馈创飞科技倾斜摄影无人机系统开启行业新陕西安康300家企业即将进驻加股金平QQ输入法猫狗翻译器横空出世引网友强梧桐果“绿帽子校招节”热度不减“绿帽
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘