`
dongpo
  • 浏览: 5873 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

第7章 什么是敏捷设计

阅读更多

7.1 软件出了什么错

    在软件开发过程中,我们经常发现代码越来越难以维护。需求变化时,很难去修改代码,修改后很容易引起意想不到的bug。在开发初期,程序员尚能清楚地掌握代码,能轻松的进行维护。随着项目地进行,设计越来越复杂,代码越来越混乱,程序员自己也不清楚修改某处代码,是否会引起别的问题。

7.2 设计的臭味——腐化软件的气味

    出现下面任何一种现象,都说明软件正在腐化。

僵化性:难以修改代码。每个改动会引起其它改动,牵一发而动全身。
脆弱性:对系统的改动,会引起一个在概念上看起来无关的bug。
牢固性:各部分代码纠结在一起,很难把一部分代码分离出来进行复用。
      在OOD中,经常会提到“高内聚、低耦合”。僵化性、脆弱性、牢固性的出现,说明系统违背了“高内聚、低耦合”的设计原则。


 
粘滞性:对系统进行改动时,很难维持原来的设计。
不必要的复杂性:在设计之初,程序员往往会预测各种可能发生的需求变更,为了适应这些想象的变更,进行了很多超前的设计。在需求确实如预测地那样变更时,这些设计确实有用。但这些预测多数情况下是错误的,这些超前的设计就成了没用的代码,成了系统的累赘,增加了设计的复杂性。
不必要的重复性:在实现某个算法时,发现系统中已经有类似的代码了。你不是把这部分代码抽象出来,作为一个函数或类,而是直接copy了一份代码,并做了适当的修改以适应你要解决的问题。这时候你应当祈求这个算法不要发生bug,因为发生bug后你需要去修改每个算法copy,更不幸的是这些copy并不完全相同,你为了适应每个问题而做了修改。不必要的重复性降低了程序的可维护性。
晦涩性:代码难以理解,不够清晰。应当通过添加注释、优化代码结构来增加代码的可读性。最重要的一点:站在代码阅读者的角度审查代码。


7.2.1 什么激发了软件的腐化

    项目之处,设计能够很好的满足需求。随着项目的进行,需求不断变更,而且变更方向偏离了设计,设计已经不能满足需求。程序员不得不进行破坏原来设计的修改。虽然修改后的系统能正常工作,但已经违反了原来的设计,为软件腐化埋下了种子。




 
 

7.2.2 敏捷团队不允许软件腐化

    不要抱怨需求的变更破坏了你的设计。记住:用户永远是对的,需求一定会变化,而且变化方向是难以预测的。敏捷团队几乎不预测需求的变更方向,不为预测的变更进行超前的设计。在需求变更成为现实时,才去修改设计。这是一个迭代的过程,每个迭代中,程序员根据最新的需求修改设计,在每次迭代结束后,当前的设计都是贴切地符合当前需求的。敏捷程序员不会幻想在项目之初进行设计,然后一直保持这个设计到项目结束。It's impossible!


 
7.3.2 怎样做一个敏捷开发人员

遵循敏捷实践去发现问题
应用设计原则去诊断问题
应用设计模式去解决问题

7.4 保持尽可能好的设计

    敏捷开发人员致力于保持设计恰当、干净。换言之,保持设计贴切地符合需求。需求变更出现后,如果当前的设计不能满足(这个变更是第一颗子弹),立即修改设计,使设计满足当前需求,且满足类似的需求变更。敏捷开发人员绝对不允许腐化出现。

7.5 结论

    敏捷设计是一个过程,不是一个事件。它是一个持续的应用原则、模式及实践来改进软件结构和可读性的过程。它致力于保持系统设计在任何时候都能贴切地满足当前需求。

 

  • 大小: 39.5 KB
  • 大小: 38.5 KB
  • 大小: 21.5 KB
分享到:
评论
1 楼 龙音小宝 2011-03-18  
  这个可以打印给员工看 ,是个好东西  ,只是再过内很多人不重视这些

相关推荐

    敏捷软件开发:原则、模式与实践

    第7章 什么是敏捷设计 第8章 单一职责原则(SRP) 第9章 开放—封闭原则(OCP) 第10章 Liskov替换原则(LSP) 第11章 依赖倒置原则(DIP) 第12章 接口隔离原则(ISP) 第III部分 薪水支付案例研究 第13章 ...

    敏捷软件开发:原则、模式与实践.pdf

    第七章 什么是敏捷设计 7.1 软件出了什么错 7.2 设计的臭味——腐化软件的气味 7.3 “Copy”程序 7.4 保持尽可能好的设计 7.5 结论 参考文献 第八章 单一责任原则(SRP) 8.1 单一职责原则(SRP) 8.2 结论 参考文献...

    敏捷软件开发原则、模式与实践 C#版

    第一部分 敏捷开发 第1章 敏捷实践 第2章 极限编程概述 第3章 计划 第4章 测试 第5章 重构 第6章 一次编程实践 第二部分 敏捷设计 第7章 什么是敏捷设计 第8章 SRP:单一职责原则 第9章 OCP:开放-封闭原则 第10章 ...

    敏捷软件开发.pdf

    第7章 什么是敏捷设计 7.1 软件出了什么错 7.2 设计的臭味——腐化软件的气味 7.3 “Copy”程序 7.4 保持尽可能好的设计 7.5 结论 参考文献 第8章 单一职责原则(SRP) 8.1 单一职责原则(OCP) 8.2 结论 ...

    敏捷软件开发:原则、模式与实践.pdf

    第7章 什么是敏捷设计 第8章 单一职责原则(SRP) 第9章 开放—封闭原则(OCP) 第10章 Liskov替换原则(LSP) 第11章 依赖倒置原则(DIP) 第12章 接口隔离原则(ISP) 第三部分 薪水支付案例研究 第13章 COMMAND模式和...

    敏捷软件开发:原则、模式与实践.pdf 高清

    第七章 什么是敏捷设计 7.1 软件出了什么错 7.2 设计的臭味——腐化软件的气味 7.3 “Copy”程序 7.4 保持尽可能好的设计 7.5 结论 参考文献 第八章 单一责任原则(SRP) 8.1 单一职责原则(SRP) 8.2 结论 参考文献...

    敏捷开发的必要技巧

    第 7 章 将数据库访问,UI和域逻辑分离 第 8 章 以用户例事管理项目 第 9 章 用CRC 卡协助设计 第 10 章 验收测试(ACCEPTANCE TEST) 第 11 章 对UI进行验收测试 第 12 章 单元测试 第 13 章 测试驱动编程 第 14 章 ...

    【高清完整pdf】高效程序员的45个习惯 敏捷开发修炼之道

    第7章 敏捷调试 33. 记录问题解决日志 34. 警告就是错误 35. 对问题各个击破 36. 报告所有的异常 37. 提供有用的错误信息 第8章 敏捷协作 38. 定期安排会面时间 39. 架构师必须写代码 40. 实行代码集体所有制 41. ...

    软件工程-总结.doc

    8 质量功能部署(QFD) 8 分析模型的元素 11 第7章 构建分析模型 11 第8章 设计工程 11 第9章 进行体系结构设计 12 体系结构风格的分类 12 第10章 构件级设计建模 13 第11章 完成用户界面设计 13 黄金规则 13 第12章...

    1软件工程-总结.doc

    8 质量功能部署(QFD) 8 分析模型的元素 11 第7章 构建分析模型 11 第8章 设计工程 11 第9章 进行体系结构设计 12 体系结构风格的分类 12 第10章 构件级设计建模 13 第11章 完成用户界面设计 13 黄金规则 13 第12章...

    敏捷技能修炼(Essential Skills for the Agile Developer)

    第一部分(1~7章),阐述了在软件开发过程中能起到“四两拨千斤”作用的几种思想方法(“小舵板”),如意图导向编程、分离构造和使用、测试先行和shalloway原则等,并总结了业界常用的几种实践,包括如何封装、面向...

    领域驱动设计第二分卷

    第7章 使用语言:扩展示例 117 7.1 货物运输系统概述 117 7.2 隔离领域:系统简介 119 7.3 区分实体和值对象 120 7.4 运输领域中的关联设计 121 7.5 聚合的边界 123 7.6 选择仓储 124 7.7 场景概述 125 ...

    西安交通大学高级软件工程课件

    习题答案.doc 复习.ppt 新建文件夹 第10章基于组件开发的软件工程.ppt 第11章面向服务的软件开发.ppt 第12章面向方面的软件...第7章软件项目管理.ppt 第8章敏捷方法.ppt 第9章基于复用的开发.ppt 软件工程习题答案.txt

    领域驱动设计第一分卷

    第7章 使用语言:扩展示例 117 7.1 货物运输系统概述 117 7.2 隔离领域:系统简介 119 7.3 区分实体和值对象 120 7.4 运输领域中的关联设计 121 7.5 聚合的边界 123 7.6 选择仓储 124 7.7 场景概述 125 ...

    Python语言程序设计教程 北理工Python课程第6章-函数与递归-1-函数定义 共22页.pdf

    7-3-5-敏捷开发方法 7-4-1-面向过程的程序设计 7-4-2-面向对象的程序设计 7-4-3-基本例子 7-4-4-面向对象的特点 8-6-1-基本介绍 8-6-2-图形对象概念 8-6-3-交互式图形用户接口 8-6-4-图形库的应用方法 8-6-5-Turtle...

    Python语言程序设计教程 北理工Python课程第6章-函数与递归-5-函数实例 共11页.pdf

    7-3-5-敏捷开发方法 7-4-1-面向过程的程序设计 7-4-2-面向对象的程序设计 7-4-3-基本例子 7-4-4-面向对象的特点 8-6-1-基本介绍 8-6-2-图形对象概念 8-6-3-交互式图形用户接口 8-6-4-图形库的应用方法 8-6-5-Turtle...

Global site tag (gtag.js) - Google Analytics