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

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

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

如何实现在一个Dbgrid中显示多数据库-Delphi资料 如何用SQL查询日期型字段?-Delphi资料 如何在数据库中存放avi文件-Delphi资料 如何在注册表中注册BDE-Delphi资料 筛选数据-Delphi资料 实现不同数据库系统之间的数据转移-Delphi资料 使 用WISQL32 同 时 访 问SQL SERVER 和SYBASE 数 据 库Delphi资 使用Session构件可以在打开有密码的库时不用输入密码-Delphi资料 使用SQL实现字段数据的模糊查询-Delphi资料 数据表的索引被损坏了怎么办-Delphi资料 数据库的密码、日期显示-Delphi资料 数据库应用程序开发中图像数据的存取技术-Delphi资料 数据库中图像数据的存取技术-Delphi资料 数据库转换-Delphi资料 数据浏览部件的应用及编程-Delphi资料 数据文件路径的管理-Delphi资料 随意控制DBGrid每一行的颜色-Delphi资料 通过DELPHI实现JAVA调用ORACLE数据库数据 通过编写代码来设置数据库的别名-Delphi资料 为Delphi数据表格增加彩色 为Delphi提供Pack和Undelete功能 为Delphi中数据库报表加网格 为数据库报表加网格-Delphi资料 为数据库建立索引-Delphi资料 掀开SQL Server 7.0的面纱-Delphi资料 限制数据库记录数-Delphi资料 向数据库发送密码-Delphi资料 一个关于字符串的小问题-Delphi资料 用 QuickReport for Delphi 制作报表 用Delphi 开发数据库程序经验三则 用Delphi 实 现 不 同 数 据 库 系 统 之 间 的 数 据 转 移 小问题 谁对nil理解的多呀,哈哈,来看看哦,超级难题 开机自检的时候屏幕花屏,无法进入操作系统。图形模式下花屏,文字模式下正常,怎么解决? 高分求助,JS菜单问题,在线等 我需要msdn最新版 连接 vb做报表的问题 好书推荐 我的站点怎么必须登陆? 这样能释放链表内存吗 请问如何手动调整datagrid的列宽? design pattern in java 书籍 关于调用外部文件并且打开一个应用程序的问题?? 请问create table 返回值为2 是什么意思? 如何象进入sina时一样弹出那种打广告的小框? 一个frame获取参数的问题 如何用Response.BinaryWrite输出文件内容 我想问一个隐藏表格的程序,好象很简单的 高手请进, 小弟有难!!!…………………… 哪里有详细介绍sql2000中pubs和northwind数据库的资料! 请教一个简单问题:请问哪里有lzw算法的详细介绍?压图片可以用这个算法么?有没有lzrw算法! 为什么一些网站把一张大图片要切开很多块? 有谁能确切解释edit.tag的属性tag的含义吗? 如何让打开的对话框自动充满客户区? 如何控制控件的前后位置关系? (100分)我copy了一段滚动的代码,怎么就是调试不通啊!帮忙啊! 用query读娶access里的“温度”字段数据怎么不行? KV2003,的问题 大家给点建议关于户籍方面的数据库系统的投计! SQL求正解 请教一个简单问题:请问哪里有lzw算法的详细介绍?压图片可以用这个算法么?有没有lzrw算法! 求一考试座位编排算法 网络中传输的粘滞问题?(在线等) word到底是编译器还是编辑器 vb程序的帮助有什么软件可以写? PlaceHolder问题?? 绝对是问题,我是HOOKAPI来拦截REG注册表的函数,但是....... 各位高手,谁对nil有研究 Windows - 延缓写入失败是种什么错误?我的机器总是出现这样的问题,重装了还是一样 怎样改变菜单的颜色 各位,提点意见哈 command 按纽 上的字怎么设置成红色? 喜欢C++的菜鸟请进。。。。。。。 Tomcat 4.1 和 Apache 2 的整合? ★★★寻找两幅图片,100分相送★★★ 快帮看看!简单的向数据库添加数据的问题我都不能解决???? 数据库连接相关的问题 请教有关加密事宜 各位,提点意见啊 超菜鸟的问题 两个入门级问题,都来看看? 给大家放松娱乐一下,来者有分啊 品读陆游诗《十一月四日风雨大作》,按要求回答问题.僵卧孤村不自哀,尚思为国戍轮台.夜阑卧听风吹雨,铁马冰河入梦来后两句运用了虚实结合的艺术手法,请简要分析 班级欲举行以“中学生是否需要见义勇为”为主题的辩论会你做正方辩手,你将如何陈述观点? 如果我相信上帝,那我损失了什么?从前俄国有个“无神论”的学者.一天,他在某大会场向人们讲上帝绝对不如果我相信上帝,那我损失了什么?后面的不要了 我觉得我信主耶稣,不会失去什么,我 十一月四日风雨大作中“夜阑卧听风吹雨,铁马冰河入梦来.”的赏析是啥? 有哪些事是违反努力奋斗的?还有我们班要开辩论赛,请问如果你的主题是 初中生无需努力奋斗 该怎么说呢?请在8:40之前回答, 诺贝尔生理.医学.化学奖得主,他们是信仰上帝或唯心论唯物论还是无神论? 陆游《十一月四日风雨大作》中的"夜阑卧听风吹雨,铁马冰河入梦来."的"风吹雨"有哪两种意思? 曾参烹彘练习题 解释下列加点字,并指出其他含义,举例说明,注明出处.子而不信(加点子“信”)其母,非所以成教也 含义:________他意_______ 例句____________ 出处:________ 那一句是《琵琶行》全诗的主旨句,更是使人与琵琶女感情的共鸣 十一月四日风雨作:夜阑卧听风吹雨,铁马冰河入梦来 曾参烹彘子而不信其母,非所以成教也信 含义:他义:例句:出处:如以本文为材料写一则议论性片段,可提炼哪些观点?1、 2、3、4、 求德语翻译,不要软件翻译的.Sehr geehrter Kunde,Ihre Bestellung mit der Nr 48815 bei apothekenbote.at wurde heute zum Versand gebracht.Anbei erhalten Sie die Rechnung vorab. 曾参烹彘中“女还”的“女”的读音 曾参烹彘里面所有之的解释月完整越好快 德语翻译:谢谢你为我做的一切 (不要用翻译工具) 用公式法解一元二次方程时,先要将方程化成什么形式 1.已知集合A={x|x^2-3x+2=0},B={x|ax^2+2ax-5=0},求实数a的取值范围.2.已知全集U={1,2,3,4,5},A=={x|x^2-5x+q=0}且A≠空集,A包含于U,求CuA及q. 英语翻译Always disconnect the appliance from the supply if it is left unattended and before assembling,disassembling or cleaning.This appliance shall not be used by children.Keep the appliance and its cord out of reach of children.Appliances can 辩论赛:我方狭路相逢勇者胜二辩提问(求3个新颖问题) 高一的两道数学集合题!一A={a|a=n的平方+1 n属于正整数}问 3 是否属于A 10 是否属于A k的平方-4k+5 是否属于A二M={y|y=8/x+3 x属于整数 y属于整数}用列举法表示:用描述法表示x,y轴上的点的集合: 谁相信无神论 寒暑易节 始一返焉中通假字的意思是哪个字加意思 狭路相逢,勇者胜辩论词 他( )节省下自己的零花钱,(  )靠帮邻居干活来凑足这笔钱.填关联词 寒署易节,始一反焉的焉的意思父异焉的焉的意思且焉置土石的焉的意思惧有伏焉的焉的意思 兽医主要给哪些动物看病 他只有节省下自己的零花钱,才肯帮邻居干活来凑足这笔钱.怎样改 一体化污水处理设备的优缺点是什么?它的应用范围是什么?如题 辩论!狭路相逢勇者胜!相关论点 狭路相逢勇者(智者)胜,我放观点是勇者!我觉得智者的观点可以有很多,可是勇者比较难!所以需要一些好的立论观点!最好也给我讲一些实际例子或者典故来 他( )节省下自己的零花钱,( )靠帮邻居干活来凑这笔钱填关联词 谁知道《愚公移山》中 寒暑易节,始一反焉.的正确翻译! 请问广州那里有给鹦鹉看病的地方?兽医一般都不看这么小的动物 有一首歌,两个字的,后面一个是站字,我忘了前面个字是什么了 翻译:寒暑易节,始一反焉 急求“狭路相逢勇者胜”的辩论词最好是长一点的! 有首歌忘记名字了,最后两个字是春~天如题 曾子之妻之市中“顾反为女杀彘”中的“反”是什么意思啊? 琵琶行中琵琶女的演奏分为几个层次?可以体会到琵琶女怎么样的感情变化 求表达思念的句子. 曾子之妻之市,其子随之而泣.其母曰:“女(同“汝”)还,顾反,为女杀彘(猪).”妻适市反,曾子欲捕彘杀之.妻止之曰:“特与婴儿戏耳.”曾子曰:“婴儿非与戏也.婴儿非有知也,待父母而学者 《琵琶行》中琵琶女的演奏过程分几个层次?从中能体会到琵琶女怎样的感情变化? 闰土和鲁迅的童年对比反映了封建社会的什么 原文 曾子之妻之市,其子随之而泣.其母曰:“女还,顾反为女杀彘.”妻适市来,曾子欲捕彘杀之.原文 曾子之妻之市,其子随之而泣.其母曰:“女还,顾反为女杀彘.”妻适市来,曾子欲捕彘杀之. “参观博物馆,使我增长了许多知识”这个病句怎么改啊? 点明《琵琶行》与《老残游记》写作上的不同 把这两个一元二次方程化为一般形式(m-1)x²-2mx+m=0 x²-2(m+1)x+m²=0 已知A={1,1+X,1+2X},B={1,Y,Y的平方},且A=B.求实数X,Y等于几 《故乡的桂花雨》的主题是什么? 2.一元二次方程…化为一般形式 已知集合U={1,2,3,4,5,6,7,8,9,10},A、B是U的两个子集,且满足A∩(B在U中的补集)={1,2,3},B∩(A在U中的补集)={7,8,9},(B在U中的补集)∩(A在U中的补集)={5,10}求集合A,B 闰土是鲁迅小时候最要好的朋友,他们只知有深厚的友谊.文中的“我”就是鲁迅.《少年闰土》这篇课文.闰土是鲁迅小时候最要好的朋友,他们只知有深厚的友谊.文中的“我”就是鲁迅.《少年 6x²-9xy+y²-9=0怎么化成两个一元二次方程 where is he 的意思紧急! 以自己的实践为主题的心得体会要求写一篇以自己的实践经历为主题的心得体会. 一元二次方程(×+1)(×+2)=3化为一般形式是() 兽医需要接触哪些动物 三下乡社会实践心得大约800字左右~ 1.《十一月四日风雨大作》中"夜阑卧听风吹雨“的“夜阑”意思是什么?2.诗中‘僵’和“孤”,写出了诗人当【接上】诗人当时怎样的处境?3.本诗表达了诗人怎样的愿望?可以从【 】,【 】等 where is he 听说马克思是撒旦教徒,抛出无神论,让人背弃上帝的,真的吗? 奥斯卡影后赞与查尔斯王子跳舞比“亲热韩国法院:研究低估三星芯片厂对人体的马达加斯加总统选举开始 或有望解决该美研究称已婚者比单身汉更长寿 但容易男子用数百公斤大南瓜造船 划水距离创韩国前科技官员称福岛土壤污染可通过微俄外交官被指在美国招募间谍 美联邦调外交部:中印重申双方不将其军事能力用日民主党前干事长年内成立新团体 被疑日本拟在多个城市开设赌场 年收入可达美国十岁男孩弑父案即将宣判 孩子去处贝卢斯科尼女友否认系同性恋 索赔千万杭州市市管领导干部任前公示通告俄外交官被指在美国招募间谍 美联邦调法国研究员:想象力丰富者比较能拒绝眼韩军警在韩日争议岛演练登陆 旨在抵御伊核问题引美以分歧 美同意合法保留以贝卢斯科尼女友否认系同性恋 索赔千万法德寻求与美就窃听丑闻展开对话中国三大舰队首汇西太平洋 联演常态化中国转型\"旅游输出大国\" 放宽对爱心早餐将推邻里联系卡面向未来的赶考(图)误将油门当刹车 卡宴“穿越”了习近平:“你好我好大家好”无助于解决江西副省长姚木根涉嫌严重违纪违法被查纸婚和金婚珀斯方向 我军机今日首度搜寻楼继伟“接招”柳传志四部门负责人回应解决改革难题马警方否认披露马航神秘电话(图)经济发展做“加法”今年制定农民工进城落户具体标准米歇尔游览慕田峪长城(图)共谱脱贫新模式点燃3根烟 PM2.5飙升80倍今年 文明花祭成主流再过7年 2亿农村人口将实现市民化拒绝横扫 新疆攻克“五棵松”麦当劳为环卫工人送上爱心早点美丽冻人 戚薇回乡签唱向焦裕禄看齐 “实”字贯穿始终
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘