软件工程基础:上篇精讲

发表时间: 2023-12-08 16:00

软件开发生命周期

  • 软件定义时期:问题定义、可行性研究、需求分析。
  • 软件开发时期:概要设计、详细设计、编码、测试。
  • 软件运行和维护:软件产品移交给用户使用。


软件系统的文档

  • 用户文档:描述系统功能使用方法
  • 系统文档:描述系统设计实现测试


软件系统工具

  • 开发工具:需求分析工具、设计工具、编码与排错工具、测试工具。
  • 维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具。
  • 管理和支持工具项目管理工具、配置管理工具、软件评价工具、软件开发工具的评价和选择。


软件工程过程:包括4个方面活动

  • P(Plan)-- 软件规格说明规定软件的功能及其运行时的限制
  • D(Do)-- 软件开发开发出满足规格说明的软件。
  • C(Check)-- 软件确认确认开发的软件能够满足用户的需求。
  • A(Action)-- 软件演进在运行过程中不断改进以满足客户新的需求。


软件设计的4个活动

  1. 数据设计
  2. 架构设计(体系结构设计)
  3. 人机界面设计(接口设计)
  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个阶段

  1. 初始:定义最终产品视图业务模型,确定系统范围
  2. 细化:设计及确定系统的体系结构,制订工作计划资源要求
  3. 构建:构造产品,继续演进需求、体系结构、计划直至产品提交。
  4. 移交:把产品提交给用户使用。


核心概念

  • 角色:描述人或小组行为与职责。who
  • 活动:有明确目的的独立工作单元。how
  • 制品:是活动生产、创建、修改的一段信息。what
  • 工作流:描述了一个有意义的连续的活动序列,每个工作流产生一些有价值的产品,并显示了角色之间的关系。when

RUP的特点

  1. 用例驱动
  2. 以体系结构为中心:软件的体系结构是一个多维的结构。
  3. 迭代与增量


RUP采用“4+1”视图模型来描述软件系统的体系结构。

1. 用例视图:分析人员测试人员关注系统的行为,描述系统的功能需求

2. 逻辑视图:最终用户关注系统的功能,描述系统的静态结构


3. 进程视图:系统集成人员关注并发同步特征,描述线程间的并发同步


4. 实现视图:程序员关注模块之间的依赖关系, 描述系统代码构件组织和模块。


5. 物理视图:系统工程师关注系统的部署安装。定义软件到硬件的映射




阶段4: 能力成熟度模型

能力成熟度模型CMM

  • 初始级:杂乱无章,没有明确定义的步骤。
  • 可重复级:基本的项目管理过程和实践,可跟踪,必要的过程准则
  • 已定义级:软件过程已经文档化标准化标准软件过程。
  • 已管理级:详细度量标准、对软件过程和产品质量有定量的理解和控制。
  • 优化级:不断持续改进。


能力成熟度模型集成CMMI

1. 初始级

过程通常是随意且混乱的。


2. 已管理级

确保策划、文档化、执行、监督、控制项目级的过程。

为过程建立明确的目标,能实现成本、进度、质量目标。


3. 已定义级

企业能够根据自身的特殊情况定义适合企业和项目的标准流程,将这套管理体系与流程予以制度化,同时企业开始进行项目积累,企业资产的收集


4. 量化管理级

建立了产品质量、服务质量、过程性能定量目标,对过程性能可预测


5. 优化级

通过增量式、创新式的过程与技术改进,不断改进过程性能。