`
kofsky
  • 浏览: 201609 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

敏捷设计之拙劣设计的症状(摘录)

阅读更多

摘录自:敏捷软件开发

1.僵化性(Rigidity): 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。
2.脆弱性(Fragility): 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。
3.牢固性(Immobility): 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。
4.粘滞性(Viscosity): 做正确的事情比做错误的事情要困难。
5.不必要的复杂性(Needless Complexity): 设计中包含有不具任何直接好处的基础结构。
6.不必要的重复(Needless Repetition): 设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一。
7.晦涩性(Opacity): 很难阅读、理解。没有很好地表现出意图。

Rigidity
僵化性是指难以对软件进行改动,即使是简单的改动。如果单一的改动会导致有依赖关系的模块中的连锁改动,那么设计就是僵化的。必须要改动的模块越多,设计就越僵化。如果做过系统维护,那么对这种情况就应该熟知了。Rigidity is the tendency for software to be difficult to change, even in simple ways. A design is rigid if a single change causes a cascade of subsequent changes in dependent modules. The more modules that must be changed, the more rigid the design.
 Most developers have faced this situation in one way or another. They are asked to make what appears to be a simple change. They look the change over and make a resonable estimate of the work required. But later, as work though the change, they find that there are repercussions to the change that they hadn't anticipated.  They find themselves chasing the change through huge portions of the code, modifying far more modules than they had first estimated. In the end, the changes take far longer than the initial estimate. When asked why their estimate was so poor they repeat the traditional software developer's lament, "It was a lot more complicated than I thought!"

Fragility
在进行一个系统改动时,程序的许多地方就可能出现问题。常常是,出现新问题的地方与改动的地方并没有概念上的关联。要修正这些问题又会引出更多的问题,从而使开发团队就像一只不停追逐自己尾巴的狗样(忙得团团转)。随着模块脆弱性的增加,改动会引出意想不到的问题的可能性就越来越大。这看起来很荒谬,但是这样的模块是非常常见的。这些模块需要不断的修补——它们从来不会被从错误列表中去掉,开发人员知道需要对它们进行重新设计,你越是修正它们,它们就变得越糟糕。

Immobility:
设计中包含了对其它系统有用的部分,但是要把这部分从系统中分离出来所需要的努力和风险是巨大的。

Viscosity:难以做正确的事情
两种表现形式:软件的粘滞性和环境的粘滞性。当面临一个改动时,开发人员常常会发现有多种改动的方法。其中一些方法会保持设计,另外一些方法会破坏设计(也就是生硬的方法)。当那些保持设计的方法比那些生硬手法更难以使用时,就表明设计具有高粘滞性。当开发环境迟钝、底效时,就会产生环境的粘滞性。

Needless Complexity:过分设计

如果设计中包含有当前没有用的组成部分,它就含有不必要的复杂性。当开发人员预测需求大额变化,并在软件中防止了处理哪些潜在变化的代码时,常常会出现这种情况。起初,这样做看起来象是一件好事。糟糕的是结果常常相反。为过多的可能性做准备,致使设计中包含绝对不可能用到的结构,从而变得混乱。一些准备会带来回报,但是更多的是不会。期间,设计背负着这些用不到的部分使软件变得复杂,并且难以理解。

Needless Repetition:滥用鼠标(乱拷贝)

剪贴和粘贴常常使软件系统都是构建于众多的重复代码片断之上。
当同样的代码以稍微不同的形式一再出现时,就表示开发人员忽视了抽象。对于开发人员而言,发现所有的重复并通过适当的抽象来削除它们的做法可能没有高的优先级别,但是这样做非常有助于使系统更加易于理解和维护。
当系统中有重复的代码时,对系统改动会变得困难。在一个重复的代码体中发现的错误必须要在每个重复体中一一修正。不过,由于每个重复体之间都有细微的差别,所以修正的方式也不总是相同的。

Opacity:混乱的表达

是指模块难以理解。代码可以用清晰、富有表现力的方式编写。或者可以用晦涩、费解的方式编写。代码随着时
间而演化,往往会变得越来越晦涩。 为了使代码的晦涩性保持最低,就需要持续的保持代码清晰并富有表现力。

 

需求是项目中最不稳定的因素。如果设计由于持续、大量的需求变化而失败,就表明我们的设计和实践本身是有缺陷的。我们必须找到一种方法,使得设计对于这种变化具有弹性,并且应用一些实践来防止设计腐化。

敏捷团队依靠变化来获取活力。团队几乎不进行预先设计,因此,不需要一个成熟的初始设计。它们更愿意保持系统设计尽可能的干净、简单、并使用许多单元测试和验收测试作为支援。(这里就有一个问题,如果事先不进行较完善的设计,那么,当核心需求(或者说是基础需求)变动后,就意谓着全局设计的改变,这就意味着几乎整个系统都需要重构。我以为,初始的设计之前,应该至少需要对系统全局有很深刻的把握。敏捷开发在一些模块化的设计中,有更持续的活力) 

分享到:
评论

相关推荐

    设计之美.pdf

    《设计之美》一书通过罗伯特·克雷的笔触,深入探讨了设计领域中艺术与科技的交叉与融合,提出了设计不仅仅关乎外观的美学,更包含了科技解决问题的功能性与实用性。作者引用了多位学者的研究,阐述了美观的物品能够...

    02-Log丑陋设计分析

    02-Log丑陋设计分析 重构 Log设计臭味-拙劣设计的症状及解决方法

    最全面的java设计模式培训教程.doc

    - **拙劣设计的症状** 可能包括过度复杂性、高耦合、低内聚和难以维护等问题。 这个Java设计模式培训教程会逐步引导学习者了解每个模式的用途、优缺点以及如何在实际项目中应用。通过实例分析和代码示例,开发者...

    信号与系统大作业,音乐合成软件的拙劣模仿.zip

    信号与系统大作业,音乐合成软件的拙劣模仿.zip信号与系统大作业,音乐合成软件的拙劣模仿.zip信号与系统大作业,音乐合成软件的拙劣模仿.zip信号与系统大作业,音乐合成软件的拙劣模仿.zip信号与系统大作业,音乐...

    小学数学教学情境设计的研究课题实施及方案.doc

    精心设计的问题可以激发学生的思考,达成教学目标,而拙劣的提问则可能削弱学生的学习积极性。因此,教师需要深入研究和精心设计问题,以提升提问的艺术性。 总的来说,这个课题致力于探索如何将数学教学与现实生活...

    【编译原理实验】设计有穷自动机DFA实现C++简单程序的词法分析.pdf

    1、按实验要求(如下),目前只拙劣地实现了第(1)和(5)点。 词法分析1 2011-03-29 而且第(1)点中有两个要求未能完成: ★ 浮点数,因为包含单行、多行注释的DFA已经很混乱了,这部分暂时先不实现,考虑将来...

    巧用 UserAgent 代替拙劣的 CSS hack

    标题“巧用 UserAgent 代替拙劣的 CSS hack”指出了一种避免使用CSS hack,转而利用UserAgent来实现特定浏览器兼容性的方法。CSS hack常常导致代码可维护性下降,而通过UserAgent判断,我们可以更加优雅地处理浏览器...

    基于Java语言的Javaweb期末大作业后端设计源码分享

    该项目为Java语言编写的JavaWeb期末大作业后端设计源码,总计包含128个文件,其中包括112个Java源文件、12个XML配置文件、2个YAML配置文件、1个Git忽略文件和1个Markdown文件。作者自评此为个人拙劣的成果,但可供...

    快速创建树的方法 (抛弃拙劣的数据库结构和算法)

    1、现在很多人都使用“父—子结构+递归算法”来显示树型的层次结构,但是不得不说这是一种非常拙劣的方式,下面给大家一种简单方便的数据结构和算法,快速显示树型的层次结构:2、数据库结构例如表“国家”可以是...

    用于面部替换的网格编辑器,因此您可以交换未检测到的面部,例如拙劣的壁画修复_C++_下载.zip

    用于面部替换的网格编辑器,因此您可以交换未检测到的面部,例如拙劣的壁画修复_C++_下载.zip

    全国大学生电子设计竞赛,简易风洞及控制系统(主控板+供电驱动)工程文件分享-电路方案

    小弟技艺拙劣,是早些年画的板子,可能有不周之处,希望指点与跟大家共享探讨学习。 附件内容分享的是简易风洞及控制系统主控板、供电驱动部分原理图+PCB源文件,基于STC12C5A60S2单片机控制。 承接毕业设计,电子...

    Java JSP application+servlet 聊天室.zip(仅供学习参考,拙劣出品,请勿直接抄袭)

    Java JSP(JavaServer ...尽管开发者自谦为"拙劣出品",但这样的练习对于理解Web开发的基本概念和技术栈非常有帮助。学习者可以通过这个项目深入了解JSP和Servlet的配合使用,以及如何构建一个基本的实时交互系统。

    软件调试-介绍软件测试相关

    - 未能将某些需求融入设计之中、需求解读错误或是设计中存在冲突都会导致bug的产生。 **3. 实现阶段的bug** - 包括错误消息显示不当、图形用户界面不规范、功能遗漏、程序崩溃等。 - 具体表现形式多样,如错误...

    拙劣骗局诱贷款人5次汇款

    小编带来了一篇拙劣骗局诱贷款人5次汇款,在进行交易的时候,合同是最好的法律保障,不知道怎么写拙劣骗...该文档为拙劣骗局诱贷款人5次汇款,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看

    创意个性的线条人物动画PPT模板.ppt

    一个没有条理、设计拙劣的PPT会破坏公司的专业形象,导致潜在客户对企业的评价下降。 Eyeful Presentations提出进行“健康检查”,对公司的关键演示文稿进行现场评审和评估,以了解其表现如何。他们通过听取客户...

    传感器信号调理电路的噪声优化

    #### 设计拙劣的影响 设计不当的信号调理电路可能会恶化SNR,从而抵消高分辨率ADC的优势。如表1所示,对于16位ADC AD7671,不同的放大器噪声水平会导致SNR损失的显著差异。 | 放大器噪声 (nV/√Hz) @1kHz | SNR ...

    sql优化、索引的建立和运用以及多表连接建索引的拙劣见解

    ### SQL优化、索引的建立和运用以及多表连接建索引的相关知识点 #### SQL优化概述 在数据库系统中,SQL语句的执行效率对于系统的响应时间和资源利用有着至关重要的影响。合理的SQL优化不仅可以显著提升查询速度,还...

    Best Practices for Developing a Web Site.pdf

    然而,即便经过了10年的发展,为何仍然存在大量设计拙劣的企业网站?答案很简单:因为它们很容易建立。 ### 2. 网站建设与设计的误区 市场上充斥着各种商业和免费的DIY网站建设工具,使用起来相对容易,这使得任何...

    50条重要的C++学习建议(绝对值得一读)

    42.当你写 C++程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计:这条建议强调了学习 C++需要不断实践和改进,遇到...

    学习C++的50条建议

    当你写C++程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和编写(参见43); 在遇到编程难题时,先完成整个程序的...

Global site tag (gtag.js) - Google Analytics