虽然自己一身从事着软件开发的工作,但是对于平时采用何种开式模式 却很少思考过,今天特地花了点时间看了一些文档,感觉自己以前的开发模式采用瀑布模式 的比较多,如果是相对大一点的项目,采用这种开发模式风险大一点,如果采用迭代模式 ,则风险相对小一点。如果某家公司是做软件外包 的业务,则适合于采用迭代模式进行开发(如果是小项目而且工期又短就另说了,一般软件外包的项目不会太小 ),如果是小项目且需求比较清楚,如开发一个新闻发布系统,不到一个月就可以完工,则采用瀑布模式会比较合理。
1.瀑布模式
我们开发一个产品,如果不太复杂,会采用瀑布模型,简单的说就是先需求定义,然后构建框架,然后写代码,然后测试,最后发布一个产品。
这样,几个月过去了,直到最后一天发布时,大家才能见到一个产品。
这样的方式有明显的缺点,假如我们对用户的需求判断的不是很准确时——这是很常见的问题,一点也不少见——你工作了几个月甚至是几年,当你把产品拿给客户看时,客户往往会大吃一惊,这就是我要的东西吗? Via :
2.迭代模式
迭 代的方式就有所不同,假如这个产品要求6个月交货,我在第一个月就会拿出一个产品来,当然,这个产品会很不完善,会有很多功能还没有添加进去,bug很 多,还不稳定,但客户看了以后,会提出更详细的修改意见,这样,你就知道自己距离客户的需求有多远,我回家以后,再花一个月,在上个月所作的需求分析、框 架设计、代码、测试等等的基础上,进一步改进,又拿出一个更完善的产品来,给客户看,让他们提意见。
就这样,我的产品在功能上、质量上都能够逐渐逼近客户的要求,不会出现我花了大量心血后,直到最后发布之时才发现根本不是客户要的东西 。
这样的方法很不错,但他也有自己的缺陷,那就是周期长、成本很高。在应付大项目、高风险项目——就比如是航天飞机的控制系统时,迭代的成本比项目失败的风险成本低得多,用这种方式明显有优势 。
如果你是给自己的单位开发一个小MIS,自己也比较清楚需求,工期上也不过花上个把月的时间,用迭代就有点杀鸡用了牛刀,那还是瀑布模型更管用,即使是做得不对,顶多再花一个月重来,没什么了不起 。 Via
3.敏捷开发
人与人之间的交互是复杂的,并且其效果从来都是难以预期的,但却是工作中最重要的方面。
-- 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 晦涩性: 很难阅读、理解。没有很好地表现出意图。
敏捷团队依靠变化来获取活力。团队几乎不进行预先设计,因此,不需要一个成熟的初始设计。他们更愿意保持设计尽可能的干净、简单,并使用许多单元测试和验收测试作为支援 。这保持了设计的灵活性、易于理解性。团队利用这种灵活性,持续地改进设计,以便于每次迭代结束生成的系统都具有最适合于那次迭代中需求的设计。
参考:
RUP: http://baike.baidu.com/view/491030.html
产品的加减法:敏捷开发与快速迭代: http://liujie.blog.sohu.com/54611489.html
UML: http://baike.baidu.com/view/23396.htm
ERWin: http://www.cnblogs.com/luqingfei/articles/448819.html
相关推荐
软件开发几种模式 软件开发的几种模式是软件开发过程中采用的方法和策略,影响着软件开发的效率、质量和风险。常见的软件开发模式有边做边改模型、瀑布模型、迭代模型、快速原型模型和增量模型等。 1. 边做边改...
软件开发的过程多种多样,每种模式都有其特定的适用场景和优缺点。以下是五种常见的软件开发模式的详细说明: 1. 边做边改模型(Build-and-Fix Model) 边做边改模型通常在项目时间紧迫、资源有限的情况下采用。...
"软件开发技术面试常见题目" 本资源摘要信息收录了软件开发面试中常见的题目,涵盖了通用问题和专业问题两方面。通用问题涵盖了项目经验、技术栈、问题解决、团队协作等方面;专业问题涵盖了 Java、C、C++、数据...
书中详细介绍了敏捷开发的几种常见框架,如Scrum、Kanban和XP(极限编程)。Scrum以其角色(产品负责人、开发团队、Scrum主管)、事件(冲刺、评审、回顾、每日Scrum)和工件(产品待办事项列表、冲刺待办事项列表、...
在软件开发领域,设计模式是经过时间和实践验证的解决方案,用于解决常见的编程问题。这些模式在不同的场景下能提升代码的可读性、可维护性和复用性。本资料包包含对几种常见设计模式的案例分析源码,下面将详细阐述...
本文将深入分析该文中的几个关键点,并结合现代软件开发实践进行讨论。 #### 二、软件开发的本质 1. **心智活动**:文章开篇便指出,软件开发本质上是一种基于人类心智活动的过程。这一观点强调了软件开发不仅仅是...
我在本文中将概述我在使用Docker的过程中开始反复出现的几种模式。我不指望它们会带来多少新奇或惊喜,但希望其中一些有用,我也很想听听各位在使用Docker过程中遇到的模式。我试用Docker的基础是保持在卷中持续的...
针对上述问题,企业可以采取以下几种策略来加强软件开发项目的成本控制: 1. **建立完善的成本核算体系**:企业应该建立一套科学合理的成本核算体系,确保成本核算的准确性和及时性。 2. **优化项目评估机制**:...
1. **编程语言基础**:软件开发的核心是编程,掌握至少一种或多种编程语言是必要的。例如,Java是一种广泛使用的面向对象的语言,适用于企业级应用;Python则以其简洁易读的语法和强大的科学计算库深受数据科学家和...
本文通过几个简单例子的说明来介绍在设计模式实际的软件开发中的使用。然后再通过一个项目的分析来论述软件开发中设计模式的使用效果。 在软件开发中,设计模式可以解决许多实际问题。例如,过多的if…else判断问题...
以下是常见的几种角色及其职责: - **项目经理(PM)**:负责整个项目的规划、组织、领导和控制。确保项目按照预定的时间表和预算进行。 - **系统架构师**:主要负责系统的设计和技术决策,包括软件架构、关键组件...
在软件开发过程中,设计模式是解决常见问题的模板,它为特定情境下的编程问题提供了标准的解决方案。本资料包包含了几个常见的设计模式案例,并通过C#语言进行了实现,旨在帮助开发者理解和应用这些模式。以下是对...
设计模式是软件开发中的一种重要概念,用于解决常见的设计问题并提供可复用的解决方案。以下是对几种设计模式的详细理解和应用。 1. 工厂模式 工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在这...
本资料包"软件开发常用设计文档"可能包含了以下几种关键的设计文档: 1. 需求规格说明书:这是项目启动阶段的核心文档,详细描述了用户或客户对软件功能、性能、界面、兼容性等方面的需求。它定义了软件的目标和...
在过去的几十年中,它已经成为软件开发领域内一种极为重要的范式转变。 首先,敏捷软件开发强调的是个体和互动高于过程和工具。也就是说,在敏捷开发中,强调的是团队成员之间的沟通与协作,而不是盲目遵循开发流程...
以上内容覆盖了软件开发过程中常见的基础概念、高级设计模式、数据结构与算法以及开发流程和工具等方面的知识点。这些词汇不仅是开发人员日常工作中不可或缺的一部分,也是理解和沟通软件开发领域知识的基础。通过...