软件方法论在近期被屡屡提及,我不知道是国内的开发团队真的需要,还是如当初 ISO/CMM 那样作为一个标签被缝在脑门上做装饰。当然,只要是做事自然就有方法论,只不过在一堆理论和文案的背后找寻一个适合自己适合公司团队的却不难么容易。我所了解的一些公司,其管理方式已经彻底沦落为文牍主义,没完没了的管理文档变成了工作人员巨大的负担,最后那些装饰精美的文档在某个未知的角落里成为垃圾。
传统的瀑布(Waterfall)开发模式依然是现今最常用的方法论和开发方式。将开发过程划分为需求分析(Requirement Analysis)、系统分析(System Analysis)、系统设计(System Design)、开发实现(Implementation)、测试(Test)、发布(Deployment)、系统支持(Supporting)和变更管理(Change Management)等过程,或许还会在开发实现过程中引入迭代的单元测试。瀑布模型有些理想化,设计和开发人员理想地认为可以按照时间表逐步完成每个步骤,任何时候无需和不能回退到上一个步骤。当然,我个人也遵循需求和设计冻结这个规则,但现实开发中,无休止的需求变更或者设计缺陷让瀑布模型基本无法按章执行。开发的最后,时间表、计划进度等等都会变成一个个可笑的理想。于是项目经理会说我们在计划当初就已经预留了冗余时间,只是这冗余究竟是否管用,只有天知道。
瀑布模型用了多少年?10年?20年?我不知道,反正业内的精英们已经忍无可忍,开始了新的方法论设计。好了,世界上又出现了很多新的名词,诸如 RUP(Rational Unified Process)、XP(Extreme Programming)、TSP(Team Software Process)等等。XP 已经风靡了一段时间了,RUP 最近也走入寻常人家,屡屡在招聘广告上出现。
由 Rational Software 提出的 RUP,其核心内容是:迭代模型(Iterative Model),用例驱动(Uses Case),UML 架构设计(UML Architectural Design)。将系统划分为一个个相对独立的用例,然后围绕这些用例进行设计和开发。由于采取相对较小的模型迭代,那么其测试和除错成本也小得多。 RUP 强调将变化在设计阶段消灭掉,提倡事先设计好组件为核心的体系结构,不断的评估和测试组件质量,同时以用例控制软件的变化。在这些原则的基础上,把软件人员分成分析,开发,管理,测试,工具支持,配置等不同角色。
RUP提出了很多复杂的概念,基本上是围绕着 UML 进行的,包括不同的场景(View)和模型(Model)。客户和业务分析人员使用用例图讨论业务流程和逻辑,架构设计师使用UML软件进行系统设计,然后是程序开发人员依照架构设计师提供的类图(Class Diagram)、次序图(Sequence Diagram)以及活动图(Activity Diagram)图例进行编码。说实话,我有点晕~~~ 因为在我工作的公司就基本采取此类方法,只不过很多程序员对于以 UML 方式表达的业务逻辑和对象关系理解不怎么到位,加上国内公司不怎么重视培训,结果问题自然多多。也许你会说,我们可以使用 Rational Rose 导出程序框架,程序员去填空就可以了。也许是吧,一番痛苦之后,每个程序员基本完成了工作,程序也基本能运行。只是老天保佑,不要让我开发下一个版本或者进行维护。
我们可以看出 RUP 非常依赖于架构设计的合理性,也就是说架构设计师必须完成合理的规划,包括所有的组件和基础框架设计。设计的可扩展性(Extensibility),可维护性(Maintainability),可延拓性(Scalability),可重用性(Reusability),还有诸多的公用组件设计,这些对于架构设计师的能力不能不说是个挑战。
OK,或许你对 RUP 已经熟悉了,就是你日常接触的那个方法论。我们继续看看其他的。
TSP 中文翻译为 "团队软件过程",由称之为 "软件质量之父" 的 Watts S. Humphrey 提出。TSP 在角色划分上包括项目经理、开发经理、计划经理、质量经理,以及技术支持经理等。TSP 要求所有团队成员严格记录软件开发过程,包括Bug、周期、进度等等。TSP 从某种角度来说是 CMM 的延续,它更多强调的是软件开发质量管理,强制成员的个人记录以及诸多的质量管理规范。使用记录数据进行质量跟踪和管理是个美好的设想,只不过某些时候会引起团队成员的变相抵制。TSP 给我的感觉更适合工业生产,流水线上的每个零件都会被详细记录下来,而对于不断变化的软件开发过程而言,死板并不能带来质量和合理的工期。
而 XP 相信很多人都很熟悉了。什么结对编程,简单设计,改进设计,持续集成,现场客户,测试驱动等等。XP 也把人员分成测试、交流人员、设计师、客户、程序员等。XP 提倡客户和开发人员在同一个场地共同组成开发团队,提倡交流。不需要太复杂的用例,以测试驱动(TDD)的方式进行开发,因此也省略了复杂的系统设计。另外,XP 的短周期交付和持续集成使得软件开发过程被分割成更小的迭代版本,每个版本都是可运行使用的,因此它也是最能适应需求变化的。
理论上的东西看上去总是很美好的,可在实际操作过程中,往往有太多不可预见的因素干扰我们的执行。对于不同的公司,不同规模的开发团队其适用的开发方法自然也有所不同。我们大可在公司整体管理上使用 TSP,在部门级别的开发中使用 RUP,而对于底层的小团队使用 XP 好了。当然综合多种不同的管理方法,最终找到最适合自己当前使用的开发方法需要不停地调整和积累。
无论如何,软件开发方法论再好,也需要合适的人员与之配合。在没有合适的团队和成员之前,还是老老实实去总结一下管理和文化的不足吧。
原文:http://www.rainsts.net/article.asp?id=298
分享到:
相关推荐
最后,【敏捷开发】和【DevOps】等现代软件开发方法论强调迭代开发、快速反馈和自动化部署,它们改变了传统软件开发流程,更加注重团队协作和软件的持续改进。 总结来说,程序设计方法学是不断演进的,从最初的技巧...
演讲稿:静坐常思己过,闲谈莫论人非_演讲稿.pdf
面试中的闲谈技巧,好的闲谈是敲门砖
### 闲谈嵌入式编程的复杂性 #### 嵌入式编程的入门与挑战 嵌入式编程是一项技术密集型的工作,它涉及到软件与硬件的紧密结合。文章提到,很多从事嵌入式编程的工程师往往是从自动化或电子等相关专业转型而来,这...
传统以电视、棋牌、闲谈为主的休闲方式已经不再能够满足现代都市人的需求,他们更倾向于寻求有品质、有文化内涵、能够带来精神享受的新型休闲体验。政府也意识到了这一点,通过推出一系列有利于全民休闲的政策和惠民...
本文将基于“开发经验,PCB布板闲谈”的主题,详细介绍PCB设计中的关键知识点和技术细节。 #### 二、PCB设计基础 PCB设计是电子产品设计的重要组成部分,涉及到信号完整性、电源完整性、电磁兼容性(EMI)等多个方面...
"JS调用XML的结合的闲谈"这个主题涵盖了JavaScript与XML的集成,以及它们在实际项目中的应用。这篇总结将深入探讨如何通过JavaScript操作XML文档,提取、修改和展示数据。 首先,XML(eXtensible Markup Language)...
设计模式是软件工程领域中一种通用的解决方案,它描述了在特定情况下解决常见问题的方法。《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software),简称GOF,...
在软件设计模式中,工厂模式是一种非常基础且实用的设计模式,它主要解决的是对象创建的问题。工厂模式的主要目的是封装对象的创建过程,使得代码在不指定具体类的情况下,能够创建对象,增强了代码的可扩展性和可...
闲谈嵌入式编程的复杂性 嵌入式编程是一种复杂的编程技术,需要开发人员具备深入的编程知识和实践经验。文章通过两个实践例子,说明了嵌入式编程中的多个问题,并分析了解决这些问题的方法。 嵌入式编程的复杂性...
SEM优化:品牌词管理闲谈(下).doc
基于深度学习的物联网恶意软件家族细粒度分类研究 偷人又偷心,破坏机器学习模型机密性的三种手法 政企安全 “震网”三代和二代漏洞技术分析报告 体系化的WAF安全运营实践 主机安全——洋葱Webshell检测实践与思考 ...
Photoshop调色教程:闲谈LAB模式计算调色详解 Photoshop调色教程:闲谈LAB模式计算调色详解是一篇详细的Photoshop调色教程,旨在帮助读者深入了解LAB模式计算调色的原理和应用。 LAB 模式的概念 LAB 模式是一种...
《春末闲谈》是鲁迅先生的一篇散文,收录在苏教版高中语文选修教材《现代散文选读》中。这篇文章通过闲谈的形式,深入浅出地探讨了统治者与被统治者之间的矛盾,以及封建统治者所采用的麻痹民众的手段。以下是该文的...
【描述】:文档主要探讨了个人的座右铭——“静坐常思己过,闲谈莫论人非”,并对其出处进行了探究。 【标签】:该标签可能表明内容涉及个人发展、哲学思考或自我反省。 【部分内容】:提及的“静坐常思己过,闲谈莫...
在互联网世界中,Web图片服务器扮演着至关重要的角色。它们负责存储、管理和分发网站所需的图像资源,确保用户能够快速、高效地加载和查看图片。本文将深入探讨Web图片服务器的相关知识点,帮助你理解其工作原理、...
这个“Java基于Swing实现的简单聊天室,支持多人在线闲谈.zip”文件是一个示例项目,展示了如何利用Swing构建一个基本的多用户聊天应用。下面将详细阐述其涉及的关键知识点。 1. **Swing组件**:Swing提供了丰富的...
为了生成相关知识点,以下内容将详细解释GDP的概念、计算方式、相关经济指标和分析方法。 GDP是衡量一个国家或地区在一定时期内生产活动总量的经济指标。它是国民经济核算体系中最核心的指标之一。GDP的计算通常有...