工程是科学技术再某一领域的应用,通过这一领域应用,使自然界的物质和能源的特性能够通过各种结构,机器,产品,系统和过程,以时间最短和精而少的人力做出高效,可靠且对人类有用的东西。
是一个跨多学科领域的工程,通常专注于如何设计和管理复杂的工程专案。
1968年北大西洋公约(NATO)召开的计算机科学会议
软件工程 = 软件的工程
过程贯穿软件开发的各个环节
过程和方法:管理者在软件工程过程中通过适当的方法对软件开发的质量、进度、成本进行评估管理和控制;
方法和工具:开发人员采用相应的方法和工具生成软件工程产品(模型、文档、数据、报告、表格等)
谁将从问题的解决中获益?
也就是说,谁将是利益相关者?
有哪些是未知的?
哪些数据、功能和特征是解决问题所必须的?
问题可以划分吗?
是否可以描述为更小,更容易理解的问题?
问题可以图形化描述吗?
可以建立分析模型吗?
以前见过类似的问题吗?
潜在的解决方案中,是否可以识别一些模式?是否已经有软件实现了所需要的数据,功能和特征。
类似问题是否解决过?
如果是,解决方案所包含的元素是否可以复用?
可以定义子问题吗?
如果可以,子问题是否已有解决方案
能用一种可以很快实现的方案来描述解决方案吗?
能构建出设计模型吗?
解决方案和计划一致吗?
源代码是否可以追溯到设计模型?
解决方案的每个组成部分是否可以证明正确?
设计和代码是否经过评审?或者采用更好的方式,算法是否经过正确性证明?
能够测试解决方案的每个部分?
是否实现了合适的测试策略?
解决方案是否产生了与所需数据、功能和特征一致的结果?
是否按照项目利益相关者的需求进行了确认?
描述了软件工程工作中遇到的过程相关问题
明确了问题环境
给出了针对该问题的一种或多种可证明的解决方案
通俗地讲,过程模式提供了一个模板
一种在软件过程背景下,统一描述解决问题的方法。包括模式名称和驱动力。
1. 启动条件
1. 组织或者团队的已有活动
2. 过程进入的状态
3. 已有的工程信息或者项目信息
2. 问题:要解决的具体问题
3. 解决方案:如何成功实现
1. 初始状态如何改变
2. 工程信息或者项目信息如何改变
4. 结果:
1. 必须完成的相关活动任务
2. 过程结束状态
3. 产生的工程信息或者项目信息
L1:初始级
L2:可重复级
L3:已定义级
L4:已管理级
L5:优化级
描述软件过程的属性,通过完成一组相互关联的活动,实现一组对建立过程至关重要的目标
CMM的成功导致许多领域也建立了相应的评估模型,但是导致了模型框架和术语等方面的矛盾和不一致
1998年正式启动,来自业界和政府部门和SEI/CMU 三个方面的170余人的支持,经过两年的工作发表了v1.0
软件学科的 SW-CMM
集成化开发和过程开发领域的IPD CMM V0.98
惯用过程模型力求达到软件开发的结构和秩序
这将产生一些问题
传统上分为三个时期,7个阶段
小而可用的软件
Bohem在1988年提出
螺旋模型=瀑布模型(系统化)+原型(迭代)
软件工程项目从螺旋中心开始启动,沿顺时针方向前进
表示一个软件工程活动的状态
所有活动并发存在,但是处于不同的状态
起始阶段:
细化阶段:
构建阶段
转换阶段
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YFKaE1p9-1637057983927)(C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20211109124756741.png)]
四个阶段 阶段的结束标志着重要的里程碑
迭代 是一个基于确定计划和评估标准并产生一个可执行发布版本(内部的或外部的)的独特活动序列。
软件过程定义由 谁 在 什么时候 做 什么事情, 并且 如何 去达到一定的目标
用例模型:用例与用户之间关系(交互时)
分析模型:系统的行为初步分配给一组对象
设计模型:系统静态结构定义为子系统,类,接口,并定义由子系统、类和接口之间的协作所实现的用例
实现模型:构建(表现为源代码)和类到构件的映射
实施模型:计算机的物理节点和构件到这些节点的映射
测试模型:用于验证的测试用例
敏捷是一种理念,是一种以人为本的哲学思想
工程变更的成本 每过一阶段变回变为上一阶段的x倍
一个良好设计的敏捷过程可以拉平成本曲线
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cIj0RXGj-1637057983932)(C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20211109201119948.png)]
三个假设(不可预测性):1)需求变更预测,以及客户优先级的变更预测的困难
2)在构建验证之前很难估计应该设计到什么程度;
3)从在制定计划的角度看,分析,设计,构建和测试不像 我们想象的那样难以预测
因此,我们应当遵守如下过程:
XP策划
XP设计
XP编程
XP测试
IXP的管理具有更大的包容性,扩大了用户角色,升级了技术实践
包括了一系列实践和预定义角色的过程骨架
基本特征:
开发活动由工作单元完成
测试和文档编制工作贯穿始终
发生于一个过程模式中的工作任务称为一个冲刺,其来源于待定项中定义的需求
例会时间很短,有时候甚至站立开会
在规定时间内将演示软件交付给用户
DSDM认为任何事都不能一次性圆满完成,应当以20%的时间完成80%的有用功能,以适应商业目的为准。
在很多方面类似于极限编程
九条基本原则:
用户持续参与
必须授予DSDM团队制定决策的权力
注重产品的经常交付
满足业务用途是接受交付品的主要依据
迭代和增量式开发对于得到正确的业务解决方案是必不可少的
开发过程中所有的变化可逆
在高层次上制定需求的基线
测试自始至终贯穿于开发周期之中
提出一系列的敏捷建模原则
有目的的建模
使用多个模型
轻装上阵
内容重于表述形式
理解模型及工具
适应本地需要
每个AUP迭代执行以下活动
强调个人(团队成员)通过团队合作可以加倍的能力。这是团队成功的关键因素
人员胜过过程,政策胜过人员
敏捷团队都是自组织的,并且具有多种团队结构
计划被保持到最低程度,仅仅接受商业要求和组织标准的限制
博客- 用来与团队成员和客户分享技术信息
微博(如twitter) 允许对关注他们的人员发布实时信息
Targeted on-line 论坛 - 允许参与者发布问题或者观点,并且得到答复。
社交网络:在以分享技术信息为目的的软件开发人员之间建立起联系。
网址收藏夹:允许开发人员追踪和共享网络资源
优势:
缺点:
博客- 用来与团队成员和客户分享技术信息
微博(如twitter) 允许对关注他们的人员发布实时信息
Targeted on-line 论坛 - 允许参与者发布问题或者观点,并且得到答复。
社交网络:在以分享技术信息为目的的软件开发人员之间建立起联系。
网址收藏夹:允许开发人员追踪和共享网络资源
优势:
缺点: