一、软件过程模型
(1)瀑布模型、(2)V模型【瀑布变种】、(3)原型模型、
(4)螺旋模型【原型+瀑布】、(5)构件组装模型/基于构件的开发方法、
(6)快速应用开发RAD【瀑布+构件组装】、(7)统一过程/统一开发方法、
(8)敏捷开发方法
1、瀑布模型
【特点】:
(1)严格区分阶段,每个阶段因果关系紧密相连
(2)只适合需求明确的项目
【缺点】:
(1)软件需求完整性、正确性难确定
(2)严格串行化,很长时间才能看到结果
(3)瀑布模型要求每个阶段一次性完全解决该阶段工作,这不现实
2、V模型【瀑布变种】
瀑布的改进,测试贯穿于始终,测试分阶段,测试计划提前。
3、原型模型
设计一个简易系统,了解用户的需求,客户可以看到他们想要改变的,有利于提高用户界面的接受程度,适合需求不明确的项目,原型主要用在需求阶段。
原型模型两个阶段:
(1)原型开发阶段:通过做一个简易原型,向客户了解具体需求。
(2)目标软件开发阶段:通过获取到的具体需求,完成目标软件的开发。
原型相关模型:
(1)螺旋模型
(2)抛弃型原型(也叫快速原型模型):用户需求确定之后即不再继续开发此原型。
(3)演化型原型:逐步改进和细化原型,将原型进化为最终系统。
(4)增量模型:在建立软件总体设计基础上,采用增量开发方法,使原型成为最终系统。
迭代与增量模型区别:
4、螺旋模型【原型+瀑布】
兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。螺旋模型更适合大型的昂贵的系统级的软件应用。
(1)制定计划:确定目标,选定实施方案,弄清项目开发的限制条件;
(2)风险分析:分析评估所选方案,考虑如何识别和消除风险;
(3)实施工程:实施软件开发和验证;
(4)客户评估:评价开发工作,提出修正建议,制定下一步计划。
5、构件组装模型/基于构件的开发方法
【优点】易扩展、易重用、降低成本、安排任务更灵活。
【缺点】构件设计要求经验丰富的架构师、设计不好的构件难重用、强调重用可能牺牲其他指标(如性能)、第三方构件质量难控制。
【示例】方舱医院、乐高积木
构件 --> 服务 --> 微服务(一种标准化程度很高的构件)
基于构件的软件工程(CBSE):
CBSE体现了【购买而不是重新构造】的哲学。
【CBSE构件应该具备的特征】:
(1)可组装性:所有外部交互必须通过公开定义的接口进行。
(2)可部署性:构件总是二进制形式的,能作为一个独立实体在平台上运行。
(3)文档化:用户根据文档来判断构件是否满足要求。
(4)独立性:可以在无其他特殊构件的情况下进行组装和部署。
(5)标准化:符合某种标准化的构件模型。
【构件的组装】:
(1)顺序组装:按顺序调用已经存在的构件,可以用两个已经存在的构件来创造一个新的构件。
(2)层次组装:被调用构件的 ”提供“ 接口必须和调用构件的 ”请求“ 接口兼容。
(3)叠加组装:多个构件合并成新构件,新构件整合原构件的功能,对外提供新的接口。
6、快速应用开发RAD【瀑布+构件组装】
7、统一过程/统一开发方法
初始:(1)定义最终产品视图和业务模型(2)确定系统范围
细化:(1)设计及确定系统架构(2)制定工作计划及资源要求
构造:(1)开发剩余构件和应用程序功能,把这些构件集成为产品,并进行详细测试
移交:(1)确保软件对最终用户是可用的,进行β3测试,制作产品发布版本
8、敏捷开发方法
1、极限编程(XP):价值观【交流、朴素、反馈、勇气】、近螺旋式的开发方法。
2、水晶方法:提倡 “机动性” 的方法,拥有对不用类型项目非常有效的敏捷过程。
3、迭代式增量软件开发过程(SCRUM):侧重于项目管理。
4、特征驱动开发方法(FDD):认为有效的软件开发需要3要素【人、过程、技术】。定义了6种关键的项目角色:项目经理、首席架构师、开发经理、主程序员、程序员和领域专家。
5、开放式源码:程序开发人员在地域上分布很广【其他方法强调集中办公】。
6、自适应软件开发(ASD):其核心是三个非线性的、重叠的开发阶段:猜测、合作与学习。
7、动态系统开发方法(DSDM):倡导以业务为核心。
敏捷宣言:
(1)个体和交互胜过过程和工具(2)可工作的软件胜过大量的文档
(3)客户合作胜过合同谈判(4)响应变化胜过遵循计划
敏捷方法 - XP (极限编程):
4大价值观:
(1)沟通【加强面对面沟通】(2)简单【不过度设计】
(3)反馈【及时反馈】(4)勇气【接受变更的勇气】
12条过程实践规则:
(1)简单设计(2)测试驱动(3)代码重构(4)结对编程
(5)持续集成(6)现场客户(7)发行版本小型化(8)系统隐喻
(9)代码集体所有制(10)规划策略(11)规划代码(12)40小时工作制
敏捷方法 - SCRUM(迭代式增量软件开发过程):
Scrum的工作流程包括以下几个步骤:
1、产品负责人确定产品需求和优先级,将它们整理成一个产品待办列表。
2、Scrum Master和开发团队一起参加迭代计划会议,确定下一个迭代的目标和计划。
3、在迭代周期内,开发团队每日进行短暂的站立会议,交流进展和遇到的问题。
4、在迭代开发结束时,开发团队进行回顾会议,评估完成的工作和改进方法。
5、根据产品待办列表,确定下一个迭代的目标和计划,开始新的迭代周期。
Scrum的优势,
1、更快的交付:通过迭代和增量的方法,团队可以更快地交付高质量的成果。
2、更好的合作:Scrum鼓励团队成员之间的互动和交流,促进了更好的合作和协作。
3、更好的控制:Scrum的固定时间和可视化进度可以帮助团队更好地控制项目进度。
4、更好的风险管理:Scrum的迭代式方法可以帮助团队更好地管理风险和问题。
二、逆向工程
与逆向工程相关的概念有重构、设计恢复、再工程和正向工程。
(1)重构/重组(Restructuring):重构是指在【同一抽象级别】上【转换系统描述形式】。是对源代码、数据进行修改,使其易于修改和维护,以适应将来的变更。
(2)设计恢复(Design Recovery):设计恢复是指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面信息。
(3)逆向工程(Reverse Engineering):逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。
(4)正向工程(Forward Engineering):正向工程是指不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量。
(5)再工程/重构工程(Re-engineering):再工程是对现有系统的重新开发过程,包括逆向工程、新需求的考虑过程和正向工程三个步骤。
三、净室软件工程
属于形式化方法,数学理论为基础,以验证为导向,而不是测试。
1、净室即无尘室、洁净室。也就是一个受控污染级别的环境。
2、使用盒结构规约(或形式化方法)进行分析和设计建模,并且强调将正确性验证,而不是测试,作为发现和消除错误的主要机制。
3、使用统计的测试来获取认证被交付的软件的可开行所必需的出错率信息。
【技术手段】
1、统计过程控制下的增量开发:控制迭代
2、基于函数的规范和设计:盒子结构
定义三种抽象层次:行为视图(黑盒)-> 有限状态机视图(状态盒) -> 过程视图(明盒)
3、正确性验证:净室工程核心。
4、统计测试和软件认证:使用统计学原理,总体太大时必须采用抽样方法。
【缺点】
1、太理论化,正确性验证的步骤比较困难且耗时。
2、开发小组不进行传统的模块测试,这是不现实的。
3、脱胎于传统软件工程。不可避免带有传统软件工程的一些弊端。