软件开发生命周期
软件定义时期:问题定义、可行性研究、需求分析。
软件开发时期:概要设计、详细设计、编码、测试。
软件运行和维护:软件产品移交给用户使用。
软件系统的文档
用户文档:描述系统功能、使用方法。
系统文档:描述系统设计、实现、测试。
软件系统工具
开发工具:需求分析工具、设计工具、编码与排错工具、测试工具。
维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具。
管理和支持工具:项目管理工具、配置管理工具、软件评价工具、软件开发工具的评价和选择。
软件工程过程:包括4个方面活动
P(Plan)-- 软件规格说明。规定软件的功能及其运行时的限制。
D(Do)-- 软件开发。开发出满足规格说明的软件。
C(Check)-- 软件确认。确认开发的软件能够满足用户的需求。
A(Action)-- 软件演进。在运行过程中不断改进以满足客户新的需求。
软件设计的4个活动
数据设计
架构设计(体系结构设计)
人机界面设计(接口设计)
过程设计
重点1: 软件过程模型
1
瀑布模型
是一个严格串行化的过程模型,因果关系紧密相连,前一个阶段工作的输出结果,是后一个阶段工作的输入。每一个阶段工作完成后,都伴随着一个里程碑,对该阶段的工作进行审查和确认。
严格的顺序限制了开发的灵活性。
不适应需求变化,难以快速响应变化。
风险管理困难。
缺乏客户参与,用户在开发过程中的反馈和意见很难被及时纳入。
过程不可逆,导致后期发现问题时,无法及时修正。
2
原型模型
根据用户提出的软件系统的定义,快速的开发一个原型,该原型包含目标系统的关键问题、反映目标系统的大致面貌。
水平原型(行为原型):只是功能的导航,主要用在界面上。
垂直原型(结构化原型):实现了部分功能,主要用在复杂的算法实现上。
抛弃原型:在需求确认后,原型被抛弃不用。
演化原型:在需求确认后,不断补充和完善原型,直至形成一个完整的产品。
3
螺旋模型
在快速原型的基础上扩展而成,支持大型软件开发,适用于具有高风险的系统。
目标设定:需求分析,指定对过程和产品的约束,制订详细的管理计划。
风险分析:对可选方案进行风险识别、制订解决办法,采取措施避免风险。
开发和有效性验证:实施工程,开发原型,开发软件产品。
评审:客户评估,对项目进行评审,制订下阶段计划。
总结:为了使软件生命周期中的各项任务能够有序的按照规程进行,需要一定的工作模型对各项任务给予规程约束,这样的工作模型 称为 软件过程模型。
重点2: 敏捷模型
敏捷方法的特点
适应性,而非预设性。
面向人的,而非面向过程的。
敏捷方法的核心思想
适应性,而非可预测。
以人为本,而非以过程为本。
迭代增量式的开发过程。
主要敏捷方法
1. 极限编程XP
是一种近螺旋式的开发方法,提倡测试先行,将复杂的开发过程分解为一个个相对比较简单的小周期,通过交流、反馈、简单、勇气,开发人员和客户可以非常清楚开发进度、变化、待解决的问题、潜在的困难等,并根据实际情况及时的调整开发过程。
在执行交付计划之前,极限编程要求团队对系统的架构做一次预研(架构穿刺),当架构的初始方案确定后,就可以进入每次小版本的交付,每个小版本交付又被划分为多个周期相同的迭代,在迭代过程中,要求执行一些必须的活动,如编写用户故事、故事点估算、验收测试等。
2. 水晶系列方法
提倡“机动性”的方法,包含具有共性的核心元素,每个都含有独特的角色、过程模式、工作产品和实践。
3. 并列争求scrum
侧重于项目管理,是迭代式增量软件开发过程,包括了一系列实践和预定义角色的过程骨架。在scrum中使用Product Backlog来管理产品的需求,Product Backlog是一个按照商业价值排序的需求列表。根据Backlog的内容,将整个开发过程分为若干个短的迭代周期(sprint)。在spring中,scrum团队从Product Backlog中挑选最高优先级的需求组成Spring backlog。在每个迭代结束时,scrum团队将递交潜在可交付的产品增量。当所有spring结束时,提交最终的软件产品。
角色
1. 产品负责人- product owner职责:把方向— 做正确的事
PO是利益相关方的代表,从业务角度出发,对需求按权重排序,合理调整产品功能和迭代顺序。
2. scrum主管- scrum master 职责:找方法—正确的做事
SM负责提高团队效率,确保所有的障碍backlog中的问题都已分配并可以得到解决,开发思想得到利益相关方的理解和支持,让利益相关方获得最大化的投资回报。
3. 开发团队:职责:执行—把事情做正确
尽一切可能去完成任务,发布产品,充分理解PO的产品愿景,合作完成冲刺中的每一个目标,更好的支持可能需要进一步开发的产品发布。
工件
1. product backlog:按照商业价值排序的需求列表。
2. spring backlog:从Product Backlog中挑选最高优先级的需求。
3. 产品增量 increment:每个迭代结束时交付给客户的内容。
4. 燃尽图:显示当前冲刺中未完成的任务数目,描述随着时间的推移而剩余的工作量,可用于表示工作进展。
活动
每个迭代召开“四会”:计划会、站立会、评审会、回顾会。
1. 冲刺计划会:在每个冲刺之初,由PO讲解需求
2. 每日站立会:每天进行沟通的内部短会。
会议由SM主持,团队成员把注意力集中在回答关键问题上,把已完成的任务从"处理中"状态转为"已完成"。会议结果:更新后的燃尽图、障碍backlog、冲刺backlog。
3. 冲刺评审会:在冲刺结束前给PO演示并接受评价的会议。
开发进度通过实际已完成的产品的功能审核来进行控制。开发团队演示这个spring中完成的功能,由PO断定实际所发布的功能是否与既定的spring目标一致。会议结果:对当前冲刺的结果和整个产品的开发状态达成共识。
4. 冲刺回顾会:在冲刺结束后召开的关于持续演进的会议。
分析冲刺的成功经验、所遇到的障碍、改进目标。
4.特性驱动开发方法FDD
是一个迭代的开发模型,FDD认为有效的软件开发需要3个要素:人、过程、技术。6种关键的项目角色:项目经理、首席架构设计师、开发经理、主程序员、程序员、领域专家。
5个核心过程
开发整体对象模型
构造特征列表
计划特征开发
特征设计
特征构建
重点3: 统一过程模型RUP
RUP描述了如何有效的利用商业的、可靠的方法开发和部署软件,是一种重量级过程。RUP类似一个在线指导者,它可以为所有方面和层次的程序开发提供指导方针、模板以及事例支持。RUP软件开发生命周期是一个二维的软件开发模型,有9个核心工作流。
9个核心工作流
1. 业务建模
理解待开发系统所在的机构及其商业运作,评估待开发系统对所在机构的影响。
2. 需求
定义系统功能及用户界面,使客户知道系统的功能,使开发人员理解系统的需求,为项目预算及计划提供基础。
3.分析与设计
把需求分析的结果转化为分析与设计模型。
4. 实现
把设计模型转化为实现结果,对开发的代码做单元测试,将不同的模块集成为可执行系统。
5. 测试
检查各个子系统之间的交互、集成,验证所有需求是否被正确实现,对发现的软件质量上的缺陷进行归档,对软件质量提出改进建议。
6. 部署
打包、分发、安装软件,培训用户,提供技术支持。
7. 配置和变更管理
跟踪并维护系统开发过程中产生的所有制品的完整性和一致性。
8. 项目管理
为软件开发项目提供计划、人员分配、执行、监控等方面的指导,为风险管理提供框架。
9. 环境
提供软件开发环境,提供过程管理和工具支持。
RUP生命周期的4个阶段
初始:定义最终产品视图和业务模型,确定系统范围。
细化:设计及确定系统的体系结构,制订工作计划及资源要求。
构建:构造产品,继续演进需求、体系结构、计划直至产品提交。
移交:把产品提交给用户使用。
核心概念
角色:描述人或小组的行为与职责。who
活动:有明确目的的独立工作单元。how
制品:是活动生产、创建、修改的一段信息。what
工作流:描述了一个有意义的连续的活动序列,每个工作流产生一些有价值的产品,并显示了角色之间的关系。when
RUP的特点
用例驱动
以体系结构为中心:软件的体系结构是一个多维的结构。
迭代与增量
RUP采用“4+1”视图模型来描述软件系统的体系结构。
1. 用例视图:分析人员和测试人员关注系统的行为,描述系统的功能需求。
2. 逻辑视图:最终用户关注系统的功能,描述系统的静态结构。
3. 进程视图:系统集成人员关注并发和同步特征,描述线程间的并发和同步。
4. 实现视图:程序员关注模块之间的依赖关系, 描述系统代码构件组织和模块。
5. 物理视图:系统工程师关注系统的部署、安装。定义软件到硬件的映射。
阶段4: 能力成熟度模型
能力成熟度模型CMM
初始级:杂乱无章,没有明确定义的步骤。
可重复级:基本的项目管理过程和实践,可跟踪,必要的过程准则。
已定义级:软件过程已经文档化、标准化、标准软件过程。
已管理级:详细度量标准、对软件过程和产品质量有定量的理解和控制。
优化级:不断持续改进。
能力成熟度模型集成CMMI
1. 初始级
过程通常是随意且混乱的。
2. 已管理级
确保策划、文档化、执行、监督、控制项目级的过程。
为过程建立明确的目标,能实现成本、进度、质量目标。
3. 已定义级
企业能够根据自身的特殊情况定义适合企业和项目的标准流程,将这套管理体系与流程予以制度化,同时企业开始进行项目积累,企业资产的收集。
4. 量化管理级
建立了产品质量、服务质量、过程性能的定量目标,对过程性能的可预测。
5. 优化级
通过增量式、创新式的过程与技术改进,不断改进过程性能。
网友评论