软件开发模型与UML入门
立即解锁
发布时间: 2025-08-15 01:14:29 阅读量: 27 订阅数: 29 AIGC 


编写出色的代码:工程软件的核心原则与实践
# 软件开发模型与UML入门
## 1. 软件开发模型
### 1.1 极限编程(XP)的问题
极限编程(XP)虽然有其优势,但也存在一些问题:
- 持续重构:可能会引入与解决的问题数量相当的新问题(新的错误),并且当程序员对不需要重构的代码进行操作时,会浪费时间。
- 缺乏前期大设计:非瀑布式开发往往会导致过度的重新设计。
- 客户代表问题:客户代表是必要的,但客户通常会因为成本考虑而安排初级人员担任此职位,这可能成为项目的失败点。如果客户代表在项目完成前离开,所有未记录的需求都会丢失。
- 团队规模限制:XP不适用于大型团队,一个高效的XP团队的规模上限约为十几名工程师。
- 功能蔓延:由于缺乏文档化的需求和功能,客户可能会向系统中注入新功能,导致“功能蔓延”。
- 单元测试的局限性:即使是XP程序员编写的单元测试,也常常无法指出缺失的功能,因为单元测试只测试“现有的代码”,而不是“应该存在的代码”。
- 全有或全无的方法:XP通常被认为是一种“全有或全无”的方法,如果不遵循“XP教义”的每一条原则,整个过程就会失败。大多数XP规则的弱点由其他规则的优势来弥补,如果不应用其中一条规则,可能会导致其他规则失效。
### 1.2 Scrum方法
Scrum方法本身不是一种软件开发方法,而是一种用于管理软件开发过程的敏捷机制,常用于管理其他模型,如XP。
- **团队成员**:除了工程师,Scrum团队还有两个特殊成员,即产品负责人和Scrum主管。产品负责人负责引导团队构建正确的产品,例如维护需求和功能;Scrum主管则像教练一样,指导团队成员完成基于Scrum的开发过程,管理团队进度,维护项目列表,并确保团队成员不会受阻。
- **迭代过程**:Scrum是一种迭代开发过程,每个迭代称为一个冲刺,持续时间为1 - 4周。冲刺开始时会召开规划会议,团队确定要完成的工作,创建一个待办事项列表(backlog),并估算每个事项所需的时间。冲刺开始后,团队每天召开简短的站立会议,成员简要汇报昨天的进展和今天的计划,Scrum主管记录任何进度问题并在会议后处理。团队成员从待办事项列表中选取事项进行工作,Scrum主管维护一个Scrum燃尽图来显示当前冲刺的进度。当所有事项都按照产品负责人的要求实现,或者团队确定某些事项无法按时或根本无法完成时,团队召开结束会议。在结束会议上,团队展示已实现的功能,并解释未完成事项的失败原因。同时,还会进行冲刺回顾,团队成员讨论进展,提出流程改进建议,确定哪些方面做得好,哪些方面做得不好。
- **团队规模限制及扩展**:与XP一样,Scrum在小型团队(少于十几名成员)中效果较好,难以扩展到大型团队。为了支持大型团队,人们对Scrum进行了一些扩展,例如“Scrum of Scrums”过程,将大型项目分解为多个团队,每个团队派一名代表参加每日的Scrum of Scrums会议,讨论他们的进展。虽然这不能解决大型团队的所有沟通问题,但可以使该方法适用于稍大一些的项目。
### 1.3 功能驱动开发(FDD)
功能驱动开发(FDD)是敏捷方法中一种专门为大型项目设计的方法。大多数敏捷方法需要专家程序员才能成功,而FDD允许大型团队参与项目,即使在后勤上无法确保每个项目活动都由最优秀的人员负责。FDD采用迭代模型,项目开始时(通常称为迭代零)会进行三个过程,然后在项目的剩余时间内迭代执行另外两个过程:
1. **开发整体模型**:这是所有利益相关者(客户、架构师和开发人员)的协作过程,团队成员共同理解系统。与串行方法中的规范和设计文档不同,整体模型更注重广度而非深度,尽可能填充更多的通用功能来定义整个项目,然后在未来的迭代中完善模型设计的深度,其目的是指导当前项目,而不是为未来进行文档记录。这种方法的优势在于,大多数功能从项目开始就进行了规划,因此设计不会朝着使某些功能在后期难以或无法添加的方向发展,也不会随意添加新功能。
2. **构建功能列表**:在FDD的第二步,团队记录在模型开发步骤中制定的功能列表,然后由首席程序员将其正式化,用于设计和开发。该过程的输出是一份正式的功能文档,虽然不像其他模型中的软件需求规格说明书(SRS)那样重量级,但功能描述是正式且明确的。
3. **按功能规划**:按功能规划过程包括为软件开发创建初始进度表,确定哪些功能将在初始阶段实现,哪些功能将在后续迭代中实现。同时,将功能集分配给各个首席程序员,他们和他们的团队负责实现这些功能。首席程序员和相关团队成员对这些功能和相关代码负责,这与标准的敏捷实践有所不同,在标准敏捷实践中,整个团队拥有代码。这也是FDD在大型项目中比标准敏捷过程更有效的原因之一,因为集体代码所有权在大型项目中难以扩展。通常,每个功能都是一个小型任务,一个3 - 5人的团队可以在两到三周(通常只需几天)内完成。每个功能类相互独立,因此一个功能不依赖于其他团队所负责的功能类的开发。
4. **按功能设计**:在选定某个迭代的功能后,拥有每个功能集的首席程序员组建一个团队来设计该功能。功能团队不是固定的,会在按功能设计和按功能构建的每个迭代
0
0
复制全文
相关推荐









