软件工程
Software Engineering
冲!
软件工程-》系统开发
绪论
- 什么是软件
- 简化的软件定义:
程序+方法+数据+文档 - 依照功能性来分类
- 系统软件
操作系统、编译程序 - 支撑软件
协助开发应用程序的工具性软件,如Java, Web Server, MySQL等 - 应用软件
图书管理系统等
- 系统软件
- 依照规模来划分
微型、小型····
项目经理,开发人员,测试人员
- 简化的软件定义:
- 软件危机 Software Crisis
软件系统开发本身是复杂的,有着高风险、高失败率的一项工作,所以在开发及维护过程中所遇到的一系列严重问题称为软件危机。 - 什么是软件工程
以系统化的方式去管理软件开发流程 - 软件生命周期分为7个阶段+管理
- 可行性研究
目的:研究方案是否可行
完成的工作:首先问题定义要解决的问题是什么?进一步讨论项目的可行性,确定问题是否值得解。 - 需求分析
目的:系统必须做什么事情
完成的工作:进行需求规划、详尽规格和需求确认 - 系统分析,总体设计OOA
目的:系统要如何实现
完成的工作:如何实现包括系统的业务逻辑、功能模块和系统架构等一系列问题 - 系统设计,详细设计OOD
目的:具体如何去实现设计的系统
完成的工作:采用OOAD&UML设计方法,具体去如何实现设计的系统 - 编码OOP
面向对象的
目的:代码实现
完成的工作:面向对象的编程 - 测试
目的:对开发的系统进行测试,保证系统不出问题
完成的工作:单元测试,系统测试,集成测试等各阶段的测试 - 部署与运行维护
目的:保证软件正常运行 - 加入管理方法
过程管理,项目管理及效绩管理
- 可行性研究
第二章 过程模型
瀑布模型
最主要缺点:需求变动困难、客户参与不高
成本、时间、架构更改都很困难
原型模式
- 演化雏形法
以需求开始,逐步加入新功能 - 丢弃雏形法
先对最不了解的系统需求建立雏形,待确定系统需求后则将不需要的部分丢弃 - 工具
- ps 、vscode
反复式流程
?开发流程由强调瀑布式流程转为强调反复式流程
- 增量式
- 迭代式
V模型
V模型是瀑布模型的变体,用于演示测试活动如何与分析和设计相关联。
特点:每一个阶段都会有一个相应的测试阶段
- 单元测试
- 集成测试
- 系统测试
- 需求测试
转化模型
分阶段开发是增量和迭代
- 增量开发
从小型功能子系统开始,并为每个新版本添加功能
适用于需求变化大的 - 迭代开发
从完整系统开始,然后在每个新版本中更改每个子系统的功能
适用于需求变化不大的
统一软件过程RUP
螺旋式开发程序
- 开发过程由最内圈螺旋转出并向外延伸,每一个循环代表一个开发阶段
- 加入风险评估
- 适合大型、复杂性高、风险高的系统开发项目使用
敏捷式管理
快速和敏捷开发(Agile) - SCRUM团队
- 项目经理
- SCRUM发展团队成员
- SCRUM经理(教练)
- 没有管理权限
- 不是产品经理的角色
- 团队促进者
- SCRUM过程
- 1.利害关系人Stakeholders
拥有产品的愿景和想法 - 2.产品拥有者PO
需求管理与验收产品 - 3.Scrum大师SM
确保Scrum过程顺畅执行 - 4.开发团队
执行工作,做出产品
- 1.利害关系人Stakeholders
结构化分析概述
- 发现需求的方法:
与用户交谈,观察用户的操作
参观用户的工作流程,观察用户的操作
向用户群体发调查问卷
与同行、专家交谈,听取他们的意见
分析已经存在的同类软件产品,提取需求
从行业标准、规则中提取需求
从Internet上搜索相关资料等 - 对需求进行求精
对初步需求反复求精多次细化 - 建模
建立模型- 数据模型:实体-关系图和数据对象描述
E-R图表达
描述数据对象间关系
图中数据对象属性用“数据对象描述”表达 - 功能模型:数据流图和处理规格说明
DFD表达
描绘数据在软件中移动、变换及相应功能
图中功能用“处理规格说明”表达 - 行为模型:状态转换图和控制规格说明
描绘系统状态和在不同状态间转换方式
图中软件控制附加信息用“控制规格说明”表达 - 数据字典 核心
描述软件使用和产生的所有数据对象
- 数据模型:实体-关系图和数据对象描述
- 规格说明
书写软件需求规格说明,作为分析阶段最终成果 - 复审
保证不出问题
1.需求分析
(1)列出需求列表
(2)根据需求画出UML用例图,顺序图
(3)根据需求画出UML活动图(如果有必要的话)
(4)整理出蓝图(系统原型)
(5)分析整理出的数据词汇录入 数据库
整理好后编写需求分析说明书
可行性研究:需求的评估法(商业模型)
(2.2PPT)
2.系统分析阶段
(1)系统架构
(2)UML类图
3.系统设计阶段
类图的详细规划,要符合原则:
- 高内聚、低耦合
- SOLID(单一职责SRP、开闭OCP、里氏代换LSP、接口隔离ISP、依赖倒转DIP)详细概述见:5.1
- 合成复用
- 迪米特原则
4.编码阶段 - 将类图转换成代码
- 代码写作要符合编码规范
IDEA插件 阿里巴巴java - SVB版本控制
- Git
- TortoiseSVN。。。
5.测试阶段
V模型 - 黑盒测试
- 给定输入期望预期输出
- 白盒测试
- 即清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据
1.单元测试:白盒测试
2.集成测试:黑盒为主,白盒为辅
3.系统测试:黑盒测试
4.验收测试:alpha测试、beta测试
git->基线版本(下一个版本更新的快照版本)
6.部署与维护
三层结构的表达
- 表达层
- 控制怎样把数据通过用户界面显示给用户,同时接受用户的交互输入。
- 业务层
- 把跟这个应用相关的业务流程和业务规则集中在一起,形成一个独立部分
- 数据层
- 负责与数据打交道,把数据库中的表,记录等细节隐藏起来,使业务层见到的是普通函数或者数值对象。
软件生命周期
7个阶段+管理
1.可行性研究
2.需求分析
3.系统分析(总体设计)
4.系统设计(详细设计)
5.编码
6.测试
7.运行维护
另外加入管理方法(过程管理、项目管理及绩效管理等等)
Agile敏捷管理(2.4)
常见的有Scrum,XP,Lean...
Scrum或者敏捷(Agile)是同一个东西
- 终极制程(XP)
- 强调客户满意及促进团队合作
- 主要以下列四个方向来促进软件开发
- 沟通
- 简化
- 回馈
- 勇气
- XP是一种严谨有规律的软件开发方式
- SCRUM过程
- 1.利害关系人:拥有产品的愿景和想法
- 2.产品拥有者:需求管理与验收产品
- 3.Scrum大师:确保Scrum过程顺畅执行
- 4.开发团队:执行工作,做出产品