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

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

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

Linux黑客车库创业:服务器操作系统CoreOS颠覆互联网 时间序列数据处理的角逐:MongoDB vs. Cassandra 移动周报:Sphinx游戏引擎的前世今生 联想K900评测:英特尔X86兼容性明显提升(组图) 小米手机-HAXLR8on硬件黑客马拉松:32小时的创客狂欢 鲍尔默宣布下台后,微软应该做好这几件事情 IGT张奇伟:从空间物理到博彩游戏研发 Bing即将推出新功能 用户可直接在搜索结果页购买商品 【开源专访】郑晔谈Moco框架的前世今生以及Java编程之道 CTO俱乐部第108期下午茶:电商在微信上的现状与未来 SDCC 2013讲师议题确定 门票即将售罄(图) 简化工作流程,10款必备的HTML5开发工具 六大领域考评鲍尔默微软掌舵能力,只一“C”尔? 剥离自雅虎的Hortonworks:低调发展,三年融资近1亿美元 Google的中国梦如何死于傲慢与不得力公关 [回顾]昨日黄花,那些被人们遗忘的11个操作系统 管理企业级API的7个最佳实践 Java 与 .NET 的平台发展之争 英特尔正在开发3D深度感知摄像头 可读出人类的情绪等 从数据平台到运营平台:国产开源移动统计Cobub Razor发布0.6版本 八月网络事故频现,CN域名遭最大规模网络攻击 Google云平台或将成为Amazon最大竞争对手 Camera360宣布完成1800万美元B轮融资 利用ZK Ajax框架 高效扩展Web App Web开发者需养成的8个好习惯 GitHub工程师专访:奶昔+海象+游泳池=开源 Paymill发布移动SDK,实现应用内直接支付 免费到付费:全球第二开源Web Server Nginx“堕入”商业化 乐视发布新版智能电视操作系统LetvUI 2.3—Schnauzer 进步还是灾难的开始?科学家首次通过互联网实现“心灵感应” 叫板Apple TV 谷歌发布Chromecast的iOS应用 2000系统日志总是抱满,原因何在? 急!! Oracle在win2000打开服务是有误?如何清除 传一个字符串给子窗体? 关于asp.net中的自定义终端控件问题(请对web程序开发的高手讨论) 我是初者:照顾一下--Web编程具体指的是什么? 谁会装双启动!帮帮忙呀 求cuteFTP3.0注册码 请问大家,为什么TC图形库中,使用异或技术(setwritemode(XOR)),在相同地方画两次相同的圆却无法将圆擦去呢? 请问javascipt中的框架的 top 指什么? 纯属题外话! ipc连接与telnet的区别? 明天我要去考研,所以要早睡! 世界著名病毒编写组织和成员介绍,包括大名鼎鼎的29A(希望反病毒厂商能给他们发感谢信!) 各位,请问哪里有在winxp下查看拨号上网密码的软件? 请问到底是xp好还是2000好?或者xp有什么缺点(硬件要求高不算)谢谢! 求VSS6.0C下载 大家觉得:女孩子身高多高最合适? 我想写:select * from talbe where name like '杨%',写到adoquery1.SQL.Text后面怎么写阿?那些''''搞得我昏了,哪个好人来讲讲? 微软出版的《SQL Server2000技术内幕》这套书怎么样,看过的来讲一下啊 c#好还是bcb好?会不会淘汰bcb呀? 讨论!!!大家帮我想想!这样会不会是访问该站点的所有人只用一个SQL线程呢??? 如何在PB下实现Windows风格的标准按钮栏?请高手帮忙,十分感谢! 读DBF中被删除的记录 在div里如何加水平线 Web Service是这样慢吗? FreeBSD下C++语言工程文件的编译问题 此贴开给“zzheaptech(风的往事)”接分,感谢热心的朋友们,向你们致敬! 大家进来给个建义 谁能告诉我资源文件的语法,或者有好的关于C和C++的好网站!谢谢!!! 如何计算当天的时间差值? 这个SQL语句错在哪了? 小弟有四个三角了,放分 都说php用word很简单!!我怎么从来没成功过!!!!?? 不能反问表是什么原因 请问在局域网内的电脑怎么样象电信拨号服务器那样,使之设置成为可以提供拨号服务的主机? 高分求答 文字型简易电子计算器设计 又一个delphi处女作!下载照样送分!提了改进方法的送高分! 菜鸟问题!谁能详细叙述一下,如何将编译过后的exe文件中的数据库正常的链接使用! 大家帮我看看我打印机的问题。 请问怎么设置使局域网内的电脑能象电信那样成为可以提供拨号上局域网服务的主机? 简单的问题.关于MFC命名规则: 老实说,是不是mysql驱动有bug,或者是java.sql.ResultSet类有bug?? 关于QQ的问题,请各位帮帮忙。谢谢! 很简单的问题,JB中用JDBC连接SQL2000怎么不行? sql总是不正解,请看看! 请教各位大侠两个困扰很久的两个问题!!! 高分求救疑难,200分相赠,急!!! 在XP中,无法从右击我的电脑>>管理,进行共享文件或文件夹的设置,急!!! 如何对同时对两个表(一对多关系)进行保存操作? 请问vc能否导入vb作得一些东西,如界面之类得。 在线求解! 林志颖身家百亿老婆被人肉 陈若仪素颜宅男女神周韦彤 海量比基尼写真大秀事传绿茶婊孙静雅是变性人 与神级伪娘玥毛新宇偕夫人刘滨游览天池山 一起唱红有图有证据! 三十组最有心机的女星合那些整容失败惨变橡胶娃娃的韩国女星娱乐圈倒追男的女星武林人行通道出现“钢琴楼梯” 用脚走内蒙古迎来今秋首场大雪福建首对男同志公开结婚 轰动全城“北山之夜”浪漫开街 杭州新增夜游好赵本山弟子开路虎追出租车 下车殴打司美夫妇为“世界末日”存大量军火 食物揭秘中国最有钱的六个村 送金银发别墅揭秘罕见日本男艺伎的神秘生活(高清组武汉耗资百万建欧式别墅公厕央视最帅实习主播转正了加拿大少女患病变“睡美人” 每隔六周镜头记录东京陪酒女郎隐秘生活深航招聘千名美女抢职位 空少脱衣做俯朝鲜纪念前最高领导人金正日逝世一周年湖北十堰沧浪文化研讨会在武汉举行敦煌古老雷音寺“升级”开放 解游客烧新加坡地铁运营商因列车延误和安全疏漏“十一”广州赴台游价格升两三成 自由日本横滨华侨欢度国庆中网-纳达尔小遇挑战过关 关键分把握马来西亚警方开展“斩草除根”行动治安南昌八一大桥进城方向一辆小车侧翻南非华人华侨庆祝建国64周年联欢晚会2013中国足协业余联赛北区决赛在河法国阿尔斯通最大水电设备生产基地落户中国驻巴基斯坦大使馆举行国庆招待会国庆长假首日 海口美兰机场进出港旅客第50届金马奖公布入围名单 《一代宗一根犀牛角,五层走私网,跨越两大洲的2013中国足协业余联赛北区决赛在河国庆首日浙江多条高速路“堵爆” 成“篮球宝贝韩一菲出演环保公益电影《守护国庆大假期间 四川盆地4日和6 7日国庆首日上海虹桥机场出入境人数同比增水利专家:虽有都江堰 成都仍为缺水城
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘