用工程化的思想做软件
一、软件开发方法(/原则)
-
软件开发方法(重点)
-
结构化法(面向过程/函数) C
- 概念
- 用户至上
- 严格区分工作阶段,每个阶段有各自的任务和成果
- 强调系统开发的整体性和全局性
- 系统开发工程化,文档标准化
- 自顶向下,逐步分解(求精)
- 缺点
- 写死,不灵活,修改起来困难;
- 而需求是不断变化的,因此出现了面向对象
- 概念
-
原型法 特殊
- 需求分析阶段,适用于需求不明确的开发
- 做一个原型化的界面呈现给客户,让客户有直观感受并反馈提出自己的详细需求,避免完成后再返工
- 包括 抛弃型原型、进化型原型
-
面向对象 C++、Java
- 复用性好
- 建立一个全面、统一、合理的模型
- 分析、设计、实现三个阶段没有明确的界限(做前一个阶段时,一并将后一阶段的一部分做完;而结构化方法每一个阶段做完并且评审后才开始下一个阶段,界限很明确)。
-
面向服务 (颗粒度比对象大)
- SO方法 三个抽象层级
- 操作,传统函数、方法。(抽象类)
- 服务(模块)
- 业务流程,由服务协作完成。(应用程序)
- SOAD 三个层次
- 基础设计层(底层服务件)
- 应用结构层(服务之间的接口和服务级协定)
- 业务组织层(业务流程建模和服务流程编排)
- 服务建模 三阶段
- 服务发现(做什么)
- 服务规约(做的过程中遵循的规则约定、参数)
- 服务实现(做出来)
- SO方法 三个抽象层级
-
-
软件开发模型(重点)
-
瀑布模型(结构化方法产物,适用于需求明确项目)
一阶阶下来像瀑布流水,每个阶段需要进行需求评审,如果评审阶段或者下一阶段发现本阶段有问题不符合要求,需要回退(红色箭头)进行修改。
-
定义阶段
-
软件计划
-
需求分析(论文)
- 缺点 不适合需求不明确的项目,因为需求分析一旦错误,所有阶段都错了,再迭代时间、人力成本太高,且失败概率大于九成。
- 优化 加一个原型给客户,经过几轮修改反馈得到明确的项目;如果还不明确或者客户喜欢创新,从以下两方面解决
- 项目管理,不要制定总价合同,写明迭代的责任方和成本利润
- 选择原型模型
- 演化出其他模型
- 和原型模型演化出
- 增量模型
- 螺旋模型
- 和原型模型演化出
-
-
开发阶段
-
软件设计
-
程序编码
-
软件测试
-
-
运行维护
-
-
演化模型
-
增量模型
- 一个功能模块一个功能模块的实现,每个功能模块实现了都能单独上线一个版本
-
螺旋模型(重点)
-
迭代模型的一种
- 加入迭代思想
- 多轮迭代而成,每轮有个单独的目标(原型);像做画,比如第一轮打线稿,第二轮上色等,最终多轮迭代成最终的产品
-
演化
- 由瀑布模型和原型模型演化而来
- 每轮有一个原型,根据本轮确定的原型进行瀑布模型,一阶段一阶段完成;多轮原型+瀑布迭代成最终产品
- 适合大型项目,并加入风险分析
-
-
原型模型(重点)
-
快速原型模型(抛弃型)
- 在需求阶段就固定原型然后抛掉原型模型使用其他模型,比如瀑布模型按照瀑布模型各个阶段往下做
-
演化模型(变换型)
- 在最初原型的基础上慢慢演化成最终的模型,随时调整,不像螺旋模型一轮迭代完再进行下一轮那样有明确的界限
- 在最初原型的基础上慢慢演化成最终的模型,随时调整,不像螺旋模型一轮迭代完再进行下一轮那样有明确的界限
-
-
喷泉模型 SDLC
- 面向对象的开发模型
- 迭代
- 无间隙
- 形态像喷泉喷出开花一样上面大,再从四周洒下来
- 面向对象的开发模型
-
V模型
- 强调测试
- 测试计划提前做,测试用例角度是在什么场景,用什么输入,得到什么输出;这种思考对问题比较聚焦,能提前发现很多问题并提前完善
- 在需求分析阶段就做验收测试和系统测试的测试计划,在概要设计的时候做集成测试的测试计划,在详细设计的时候做单元测试的测试计划;但是是一轮完成,并非螺旋那种多轮
- 瀑布模型的优化
- 强调测试
- 迭代模型/迭代开发方法
- 快速应用开发 RAD
- 来源
- 基于构件的开发(核心)
- 瀑布模型
- 来源
- 构件组装模型/基于构件的开发方法 CBSD
-
统一过程模型/也可界定为统一开发方法(重点)
-
三个特点
-
用例驱动
- (面向对象的表现),一开始就构建用例,一步步设计用例并实现出来,测试也会根据用例设计一系列测试用例;
- 在这个方法里用例就是整个开发过程的驱动力
-
以架构为核心
-
迭代和增量
-
-
四个阶段
-
初始(需求评审)
-
确定项目范围和边界
-
识别系统的关键用例
- 展示系统的候选架构
- 估计项目费用和时间
- 评估项目风险
-
-
细化(设计架构)
- 分析系统问题领域
-
建立软件架构基础
- 淘汰最高风险元素
-
构建(构件)
- 开发剩余的构件
-
构件组装与测试
-
交付(上线)
- 进行贝塔测试
-
制作发行版本
- 用户文档定稿
- 确认新系统
- 培训、调整产品
-
-
-
敏捷模型--实际是方法(重点)
- 四种模型的结合
- 自适应开发
- 水晶方法
- 特性驱动开发
- 极限编程
- 四种模型的结合
- 模型驱动的开发方法
- 基于架构的开发方法(重点)
-
-
逆向工程
- 实现方式
- 从已有系统拆开逆向得到实现方法,再结合新需求生产新系统
- 现有系统-》逆向工程-〉考虑新需求-》正向工程-〉新系统
- 现有系统-》再工程-〉新系统
- 四个层级(重点)
- 实现级
- 程序设计:抽象语法树、符号表、过程
- 结构级
- 程序分量间相互依赖关系
- 比如调用图、结构图、程序和数据结构
- 功能级
- 程序段功能及程序段间关系
- 比如数据和控制流模型
- 领域级
- 包括反应程序分量/程序实体与应用领域概念之间对应关系的信息
- 比如实体关系模型
- 实现级
- 实现方式
-
净室软件工程
- 去除人为干扰,比如从数学模型通过程序直接转换为可以运行的产品
- 去除人为干扰,比如从数学模型通过程序直接转换为可以运行的产品
二、需求工程(重点)
-
需求获取(重点
- 软件需求是用户对软件在功能、性能、行为、设计约束等方面的期望
- 软件需求是指帮用户达到目标或解决问题所需的条件和能力;是系统满足合同规范所具有的条件和能力;以及反映这些能力的文档说明
-
需求分析(重点
- 结构化分析SA
- 四个模型
- 功能模型
- 对应数据流图
- 行为模型
- 对应状态转换图
- 数据模型
- 对应ER图
- 数据字典
- 配合上面的三种模型,在各自中提供明确的信息,帮助用户理解
- 功能模型
- 三个图
- DFD数据流图
- ER图/模型
- 状态转换图
- DFD数据流图
- 四个模型
- 面向对象分析OOA
-
概念
-
SA以数据流为核心,关注系统的功能模块和数据流动,适合流程明确的系统。
-
OOA以对象为核心,关注系统中的实体及其关系,适合复杂且需要灵活扩展的系统。
-
-
常用工具
-
UML
-
-
- 结构化分析SA
-
UML图(重点,案例分析)
- 静态图(结构图)(选择
- 类图
- 动态图(行为图)(案例分析
- 用例图
- 选择题
- 三大关系
- 包含/使用关系
- 必须用到的基本用例
- 扩展关系
- 可选的,可能用到也可能用不到
- 和包含关系都属于依赖关系
- 泛化
- 父子关系
- 把共性抽出来作为父
- 包含/使用关系
- 选择题
- 根据三大关系选择UML流程的天空
- 注意:调整用例模型是可选的
- 三大关系
- 用例图
- 静态图(结构图)(选择
-
UML视图(重点,案例分析
-
UML关系(重点,案例分析