以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 极限编程与敏捷开发 [徐景周 ] (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=15400) |
-- 作者:pennyliang -- 发布时间:3/11/2005 9:41:00 PM -- 极限编程与敏捷开发 [徐景周 ] 极限编程与敏捷开发 徐景周
在按照我的理解方式审查了软件开发的生命周期后,我得出一个结论:实际上满足工程设 -- Jack Reeves 简介 2001年,为了解决许多公司的软件团队陷入不断增长的过程泥潭,一批业界专家一
极限编程 设计和编程都是人的活动。忘记这一点,将会失去一切。 -- Bjarne Stroustrup
极限编程(XP)是敏捷方法中最箸名的一个。它是由一系列简单却互相依赖的实践组 下面是极限编程的有效实践: 1、完整团队 XP项目的所有参与者(开发人员、客户、测试人员等)一起工作在一个开放的场所中,他 2、计划游戏 计划是持续的、循序渐进的。每2周,开发人员就为下2周估算候选特性的成本,而客户则 3、客户测试 作为选择每个所期望的特性的一部分,客户可以根据脚本语言来定义出自动验收测试来表 4、简单设计 团队保持设计恰好和当前的系统功能相匹配。它通过了所有的测试,不包含任何重复,表 5、结对编程 所有的产品软件都是由两个程序员、并排坐在一起在同一台机器上构建的。 6、测试驱动开发 编写单元测试是一个验证行为,更是一个设计行为。同样,它更是一种编写文档的行为。 7、改进设计 随时利用重构方法改进已经腐化的代码,保持代码尽可能的干净、具有表达力。 8、持续集成 团队总是使系统完整地被集成。一个人拆入(Check in)后,其它所有人责任代码集成。 任何结对的程序员都可以在任何时候改进任何代码。没有程序员对任何一个特定的模块或 10、编码标准 系统中所有的代码看起来就好像是被单独一人编写的。 11、隐喻 将整个系统联系在一起的全局视图;它是系统的未来影像,是它使得所有单独模块 12、可持续的速度 团队只有持久才有获胜的希望。他们以能够长期维持的速度努力工作,他们保存精 极限编程是一组简单、具体的实践,这些实践结合在形成了一个敏捷开发过程。极
敏捷开发 人与人之间的交互是复杂的,并且其效果从来都是难以预期的,但却是工作中最重 -- Tom DeMacro和Timothy Lister
敏捷软件开发宣言: n 个体和交互 胜过 过程和工具 n 可以工作的软件 胜过 面面俱到的文档 n 客户合作 胜过 合同谈判 n 响应变化 胜过 遵循计划 虽然右项也有价值,但是我们认为左项具有更大的价值。
敏捷宣言遵循的原则: n 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。 n 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势 n 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间 n 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。 n 围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们 n 在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。 n 敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的 n 不断地关注优秀的技能和好的设计会增强敏捷能力。 n 简单是最根本的。 n 最好的构架、需求和设计出于自组织团队。 n 每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己
当软件开发需求的变化而变化时,软件设计会出现坏味道,当软件中出现下面任何一种气 n 僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其 n 脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现 n 牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。 n 粘滞性: 做正确的事情比做错误的事情要困难。 n 不必要的复杂性: 设计中包含有不具任何直接好处的基础结构。 n 不必要的重复性: 设计中包含有重复的结构,而该重复的结构本可以使用单一的 n 晦涩性: 很难阅读、理解。没有很好地表现出意图。
敏捷团队依靠变化来获取活力。团队几乎不进行预先设计,因此,不需要一个成熟的初始 为了改变上面软件设计中的腐化味,敏捷开发采取了以下面向对象的设计原则来加以避免 n 单一职责原则(SRP) 就一个类而言,应该仅有一个引起它变化的原因。 n 开放-封闭原则(OCP) 软件实体应该是可以扩展的,但是不可修改。 n Liskov替换原则(LSP) 子类型必须能够替换掉它们的基类型。 n 依赖倒置原则(DIP) 抽象不应该依赖于细节。细节应该依赖于抽象。 n 接口隔离原则(ISP) 不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。 重用的粒度就是发布的粒度。 n 共同封闭原则(CCP) 包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响, n 共同重用原则(CRP) 一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所 n 无环依赖原则(ADP) 在包的依赖关系图中不允许存在环。 n 稳定依赖原则(SDP) 朝着稳定的方向进行依赖。 n 稳定抽象原则(SAP) 包的抽象程度应该和其稳定程度一致。 上述中的包的概念是:包可以用作包容一组类的容器,通过把类组织成包,我们可
下面举一个简单的设计问题方面的模式与原则应用的示例: 问题: 选择设计运行在简易台灯中的软件,台灯由一个开关和一盏灯组成。你可以询问开
解决方案一: 下面图1是一种最简单的解决方案,Switch对象可以轮询真实开关的状态,并且可
解决方案二: 上面这个设计违反了两个设计原则:依赖倒置原则(DIP)和开放封闭原则(OCP),D
解决方案三: 上面图2所示解决方案,违返了单一职责原则(SRP),它把Switch和Light绑定在一
敏捷设计是一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来
参考文献 设计模式-可复用面向对象软件的基础 -- 李英军等译 重构-改善既有代码的设计 -- 侯捷等译 敏捷软件开发-原则、模式与实现 -- 邓辉译 |
-- 作者:njpyxujin -- 发布时间:3/15/2005 9:58:00 AM -- 这位大哥的大名在WWW。VCKBADE。COM 早有耳闻啊。。 |
-- 作者:xmzhy -- 发布时间:4/1/2005 2:05:00 PM -- 不错,可以借鉴 |
-- 作者:wakanpaladin -- 发布时间:4/2/2005 12:43:00 AM -- 还有林星写的活用XP的系列文章也是不错的 |
-- 作者:yinbodotcc -- 发布时间:7/18/2005 12:13:00 AM -- 晕,考试这么厉害 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
70.313ms |