瀑布模型
阶段 紧密相连
特点
- 严格区分阶段,每个阶段因果关系紧密相连
- 只适合需求明确的项目
缺点
- 软件需求完整性、正确性难确定
- 严格串行化,很长时间才能看到结果
- 瀑布模型要求每个阶段一次性完全解决该阶段工作,这不现实。
原型模型
阶段 原型开发
特点
开发一个简单的界面 demo,让用户先看得见效果 弥补了瀑布模型的缺点
适合需求不明确的项目
原型模型的两个阶段
1、原型开发阶段
2、目标软件开发阶段
[抛弃型原型] 与 [演化型原型]
V 模型
阶段 测试贯穿始终
特点
测试贯穿始终
测试分阶段,测试计划提前
迭代与增量 (思想)
阶段 UP/敏捷
特点
增量 增强调一块一块有增加 相当于先完成部分功能,再一步步增加
迭代 强调一轮一轮在变好 先设计抽象层面,再一轮一轮实现变得更具体
螺旋模型
阶段 目标设定&风险分析

特点
以快速原型为基础+瀑布模型
考虑了风险问题
构件组建模型

特点
易扩展、易重用、降低成本、安排任务更灵活。
缺点
构件设计要求经验丰富的架构师、设计不好的构件难重用、强调重用可能牺牲其它指标(如性能)、第三方构件质量难控制。
示例
方舱医院 乐高积木
基于构件的软件工程(CBSE)
CBSE 体现了【购买而不是重新构造】的哲学。
CBSE 的构件应该具备的特征
1、可组装性:所有外部交互必须通过公开定义的接口进行。
2、可部署性:构件总是二进制形式的,能作为一个独立实体在平台上运行。
3、文档化:用户根据文档来判断构件是否满足需求。
4、独立性:可以在无其他特殊构件的情况下进行组装和部署。
5、标准化:符合某种标准化的构件模型。
构件的组装
1、顺序组装:按顺序调用已经存在的构件,可以用两个已经存在的构件来创造一个新的构件。
2、层次组装:被调用构件的“提供”接口必须和调用构件的“请求”接口兼容。
3、叠加组装:多个构件合并形成新构件,新构件整合原构件的功能,对外提供新的接口。
快速应用开发模型(RAD)
重点 快速的原因
特点
基于大量已经开发好的构件基础上,快速开发
统一过程/UP


敏捷方法
特点
是一种比较新型的方法,诞生于千禧年。 敏捷方法是一种软件工程方法论,它强调的是软件开发过程中各个阶段的迭代,而不是整个软件开发过程。

方法介绍
极限编程(XP):价值观【交流、朴素、反馈、勇气】、近螺旋式的开发方法。
水晶方法:提倡“机动性”的方法,拥有对不同类型项目非常有效的敏捷过程。
SCRUM:侧重于项目管理。
特征驱动开发方法(FDD):认为有效的软件开发需要 3 要素【人、过程、技术】。定义了 6 种 关键的项目角色:项目经理、首席架构设计师、开发经理、主程序员、程序员和领域专家。
开放式源码:程序开发人员在地域上分布很广【其他方法强调集中办公】。
ASD 方法:其核心是三个非线性的、重叠的开发阶段:猜测、合作与学习。
动态系统开发方法(DSDM):倡导以业务为核心。
敏捷方法-XP
四大价值观
沟通【加强面对面沟通】
简单【不过度设计】
反馈【及时反馈】
勇气【接受变更的勇气】
十二条过程实践规则
简单设计
测试驱动
代码重构
结对编程
持续集成
现场客户
发行版本小型化
系统隐喻
代码集体所有制
规划策略
规范代码
40 小时工作机制
敏捷方法(SCRUM)
特点
- 不放眼于项目全局
- 强调迭代,拆分工作内容,抓每个小点的进度

如图,抽六个小功能作为代办事项,抓这六个小功能的进度,达到迭代效果
逆向工程

概念
与逆向工程相关的概念有重构、设计恢复、再工程和正向工程。
(1)重构/重组(Restructuring)。重构是指在 【同一抽象级别】 上【转换系统描述形式】
(2)设计恢复(Design recovery)。设计恢复是指借助工具从 已有程序中抽象出有关数据设计 、总体结构设计和过程设计等方面的信息。
(3)逆向工程 (Reverse engineering):逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。
(4)正向工程(Forward engineering)。正向工程是指不仅从现有系统中恢复设计信息, 而且使用该信息去改变或重构现有系统,以改善其整体质量 。
(5)再工程/重构工程(Re-engineering)。再工程是对现有系统的重新开发过程, 包括逆向工程、新需求的考虑过程和正向工程 三个步骤。
净室软件工程
净室即无尘室、洁净室。也就是一个 受控污染级别的环境。
使用盒结构规约(或形式化方法)进行分析和设计建模,并且 强调将正确性验 证,而不是测试 ,作为发现和消除错误的主要机制。
使用统计的测试来获取认证被交付的软件的可靠性所必需的出错率信息。
【技术手段】
统计过程控制下的增量式开发:控制迭代
基于函数的规范和设计:盒子结构 定义 3 种抽象层次:行为视图 (黑盒) ->有限状态机视图 (状态盒) ->过程视图 (明盒)
正确性验证:净室工程的核心
统计测试和软件认证:使用统计学原理,总体太大时必须采用抽样方法
【缺点】
太理论化,正确性验证的步骤比较困难且耗时。
开发小组**不进行传统的模块测试,这是不现实的。**
脱胎于传统软件工程,不可避免带有传统软件工程的一些弊端。
软件系统建模
1、结构化建模方法
结构化建模方法是以过程为中心的技术,可用于分析一个现有的系统以及定义新系统的业务需求。结 构化建模方法所绘制的模型称为数据流图(DFD)。对于流程较为稳定的系统可考虑结构化建模方法。
2、信息工程建模方法(或数据库建模方法)
信息工程建模方法是一种以数据为中心,但过程敏感的技术,它强调在分析和研究过程需求之前,首 先研究和分析数据需求。信息工程建模方法所创建的模型被称为实体联系图(ERD)。主要用于数据 建模。
3、面向对象建模方法
面向对象建模方法将“数据〞和 “过程”集成到被称为“对象”的结构中,消除了数据和过程的人为 分离现象。面向对象建模方法所创建的模型被称为对象模型。随着面向对象技术的不断发展和应用, 形成了面向对象的建模标淮,即 UML(统一建模语言)。UML 定义了几种不同类型的模型图,这些 模型图以对象的形式共建一个信息系统或应用系统,是目前比较常用的建模方法。
人机界面设计(黄金三法则)

结构化设计

高内聚

低耦合

模块的四个要素
输入和输出:模块的输入来源和输出去向都是同一个调用者,即一个模块 从调用者那儿取得输入,进行加工后再把输出返回调用者。
处理功能:指模块把输入转换成输出所做的工作。
内部数据:指仅供该模块本身引用的数据。
程序代码:指用来实现模块功能的程序。
面向对象设计
类的分类

基本过程

设计原则
🌠单一职责原则:设计目的单一的类
🌠开放-封闭原则:对扩展开放,对修改封闭
🌠李氏(Liskov)替换原则:子类可以替换父类
🌠依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程
🌠接口隔离原则:使用多个专门的接口比使用单一的总接口要好
🌠组合重用原则:要尽量使用组合,而不是继承关系达到重用目的
🌠迪米特(Demeter)原则(最少知识原则):一个对象应当对其他对象有尽可能少的了解