软件工程
软件的本质
- 软件的本质
- 定义
- 有很多种定义, 以书上(P3)的定义为准, 指令的集合+数据结构+软件描述信息
- 软件应用的领域
- 系统软件/应用软件/工业软件/嵌入式软件/产品线软件/Web移动应用程序/AI软件
- 遗留软件
- 挑战:
- 生命周期长
- 质量差
- 原有功能质量不符合现代的要求
- 需要演化的情况
- 适应性调整, 满足新的环境/技术
- 升级, 实现新的商业需求
- 拓展, 与新的系统或数据库互操作
- 改建, 适应不断演化的计算环境
- 挑战:
- 定义
- 软件的变更本质
- 是生命体, 在生长
- 四大类占主导地位的软件
- WebApp/移动App/云计算/产品线软件
- 软件失效率曲线
- 理想曲线: 未知的缺陷将在软件生命周期的前期造成高失效率, 但随着错误的纠正, 曲线将趋于平缓, 软件不会磨损, 但是会退化
- 事实曲线: 软件会面临变更, 每次变更都会导致失效率陡然上升, 在曲线回到最初的状态前, 新的变化又会再次导致曲线上升, 最终导致最小的失效率点沿斜线的形状逐渐上升
- 不断的变更是导致软件失效的根本原因
- 云计算
- 应用软件: 监控/内容/协作/通信/财务
- 平台: 对象存储/身份/运行时/队列/数据库
- 基础设施: 计算/块存储/网络
- 软件的本质
软件工程
- 软件工程的定义
- 以书上为准 IEEE
- 将(系统化, 规范的, 可量化的)工程化方法应用于软件的开发,运行和维护
- 对上述方法的研究
- 软件工程层次
- 工具on方法on过程on质量关注点
- 过程process
- 包括
- 活动activities
- 实现宽泛的目标
- 动作actions
- 主要工作产品生产过程中的一系列任务
- 任务tasks
- 小而明确的目标, 实际产品
- 活动activities
- 过程框架
- 沟通/策划/建模/构建/部署
- 软件工程: 过程框架/普适性活动/框架活动i/软件工程动作i.j/任务集
- 包括
- 方法method:
- 工具tool:
- 以书上为准 IEEE
- 软件开发神话: 为什么需要软件工程
- 注意思考题
- 软件工程的定义
软件过程
- 通用过程框架
- 每个框架活动由一系列动作构成, 每个动作由任务集来定义
- 任务集明确了将要完成的工作任务,将要产生的工作产品,需要的质量保证点,用于表明过程状态的里程碑
- 过程流图
- 线性过程流
- 迭代过程流
- 演化过程流
- 并行过程流
- 明确任务集(细胞)
- 注意
- 过程模式
- 注意
- 模板process pattern
- 模式名称
- 驱动力
- 类型
- 步骤模式
- 任务模式
- 阶段模式
- 启动条件
- 问题
- 解决方案
- 结果
- 相关模式
- 已知应用和实例
- 通用过程框架
过程模型: 1,2个, 也可能简答题
- 分类: 传统的/敏捷的
- 各种模型的特点
- 瀑布模型是基础
- 沟通/策划/建模/构建/部署
- V模型
- 增量模型
- 特点
- 第一个增量是核心产品
- 特点
- 螺旋模型
- 结合原型的选代性质和瀑布模型的可控性和系统性特点
- 特点
- 风险识别和应对
- UP统一过程
敏捷
- 定义
- 敏捷宣言
- XP
- 特征
- 保持KIS原则
- 鼓励使用CRC
- 先单元测试后代码
- 结对编程
- 重构: 以不改变其外部功能或行为而改进设计(或源代码)的内部结构。
- 用户故事: 描述将要开发的软件所需要的输出, 特征以及功能
- 特征
- Scrum
- 特征
- 待定项backlog
- 冲刺sprint
- 每日站会
- 人员
- Product Owner:杜老师
- Scrum Master:邱博
- Team:三个组员
- 步骤
- 我们首先要确定一个Product Backlog(按优先顺序排列的一个产品需求列表)
- 团队根据product backlog做工作量的估算
- 通过Sprint Planning meeting,来从中挑选出一个Story作为本次迭代完成的目标,时间周期是1~4个星期,然后把这个Story进行细化,形成一个Sprint Backlog
- 在Sprint backlog再细化成更小的任务,成员领取任务(2天的工作量左右)
- 过程中要进行每日站立会议,控制在15分钟左右,汇报昨天完成了什么,今天要做什么,遇到了哪些问题
- 做到每日集成,每天都可以有一个成功编译,并且可以演示的版本。
- 当一个Story完成,业绩就是Sprint backlog完成,表示一次Sprint的完成,这时,要进行Sprint review meeting。
- 最后就是Spring Retrospective Meeting,总结会议,每个人总结并讨论改进,放入到下一次Sprint的产品需求中。
- 特征
__
指导实践的原则
- 软件工程知识
- 核心原则
- 指导每个框架活动的原则
需求工程
- 需求工程过程: 开始/获取/细化/协商/规格说明(SRS)/确认/需求管理
- 用例模板
- 用例
- 主/次要参与者, 使用方式
- 何时可用/使用频率
- 需求的建立(开始): 利益相关者/协同合作
- 收集需求(获取)
- 开发用例: 编写用例规约
- 构建分析模型:
- 元素: 基于场景的元素(活动图)/基于类的元素(类图)/行为元素(状态图)
- 状态图: [状态名|状态变量|状态活动]
- 元素: 基于场景的元素(活动图)/基于类的元素(类图)/行为元素(状态图)
需求建模: 基于场景
- 域分析: 查找或创建广泛应用的分析类或分析模式, 进行复用
- 输入: 技术资料/已有的应用系统/客户调查/专家建议/当前,未来需求
- 输出: 类的分类/复用标准/功能模型/域语言
- 用例图, 活动图
- 泳道图
- 域分析: 查找或创建广泛应用的分析类或分析模式, 进行复用
需求建模: 类
- 识别分析类, 属性, 操作
- 语法分析法
- 名词: 类/属性
- 动词: 操作
- CRC
需求建模: 行为和模式
- 识别行为模型: 相对前面的建模是动态的
- 识别用例事件
- 状态表达:
- 状态图
- 顺序图(序列图)
- Web/移动App的需求建模
- 类型:
- 内容模型
- 包含所有内容对象和分析类
- 交互模型
- 功能, 内容和行为之间的交流
- 包括用例/时序图/状态图/UI原型
- 功能模型
- 导航模型
- 配置模型
- 内容模型
- 类型:
设计
- 作用
- 产生设计模型: 数据/类设计,体系结构设计,接口设计,构建级设计
- 设计概念定义
- 抽象/体系结构/模式/关注点分离/模块化/信息隐蔽/功能独立/逐步求精/方面/重构/OOP/设计类/依赖倒置/测试设计
- 设计模型
- xx设计元素: 数据/体系结构/接口/构建级/部署级
- 作用
架构级设计
- 软件体系结构: 系统的一个或者多个结构,它包括软件构件、构件的外部可见属性以及它们之间的相互关系。
- 体系结构环境图ACD
构件级设计
- 构件
- 系统中模块化的, 可部署的和可替换的部件, 该部件封装了实现并对外提供一组接口
- 设计原则
- OCP/LSP/DIP/ISP/REP/CCP/CRP
- 构件
#最后一题: UML的五类图 40分
- 用例图
- 静态图
- 类图
- 对象图
- 包图
- 行为图
- 状态图和活动图格式完全一样, 起点用黑点, 终点是带圈黑点
- 活动图可以带泳道
- 状态图
- 仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图
- 活动图
- 交互图
- 顺序图(序列图)
- 强调时间和顺序
- 协作图(通讯图)
- 强调上下级关系
- 顺序图(序列图)
- 实现图
- 构件图
- 配置图
- 构件图
CMM: 一级为初始级,二级为可重复级,三级为已定义级,四级为已管理级,五级为优化级
P179 构建细化