整理By Wolger “做好知识产权保护,有问题别来找我”
此篇内容为速成资料,其中的语言或许不严谨,请不要在意
使用教材为《软件工程实用案例教程》梁洁主编
标有?为考试中经常出现的题目,?越多代表越重要
全部看完不过找我,我把你头给锤烂,这么清晰的资料你能不过多半是有点东西的😅
由于软件行业面临着巨大的挑战,一方面是软件的规模越来越大,复杂程度越来越高,对软件的需求越来越多,另一方面是软件生产效率低下,开发成本和进度难以控制质量难以保证这种现象,早在20世纪60年代被定义为软件危机。
软件工程即按工程化的原则和方法应用于软件开发和管理
软件工程是系统化的,规范化的,可度量的方法应用于软件的开发运行和维护的过程。
模型 | 优点 | 缺点 |
---|---|---|
瀑布模型 | 定义清楚,应用广泛; 强迫开发人员采用规范化的方法; 严格规定每个阶段提交的文档; 易于建模和理解;便于计划和管理; 有支持生命周期模型的多种工具。 | 必须在开始时就知道大多数需求; 不便于适应需求的变化; 在项目接近完成之前,产品不能投入使用; 可运行的软件交付给用户前,用户只能通过文档来了解。 |
快速原型化模型 | 直观形象,符合人们认识事务循序渐进的规律,容易被接受;有效地避免开发人员和用户对需求理解的不一致性; 及时暴露问题、及时反馈,确保系统的正确性; 开发周期短、成本低,软件尽早投入使用。 | 为了加快开发速度,常常导致软件质量的降低; 没有严格的开发文档,维护困难; 缺乏统一的规划和开发标准; 难以对系统的开发过程进行控制。 |
增量模型 | 降低拖延、需求变更及验收间题的风险; 提高项目开发的可管理性; 将一个时间周期较长的项目分解开发。 | 同瀑布模型一样,必须在早期就了解大部分需求: 对选择具体构件的开发方法敏感: 需要对每次发行进行回归试,增加软件试工作量; 生命周期的早期就将产品置于配置控制之下,因而需要正式的更改控制过程,将增加系统开销. |
螺旋模型 | 设计上的灵活性,可以在项目的各个阶段进行变更; 以小的分段来构建大型系统,使成本计算变得简单容易; 用户始终参与每个阶段的开发,保证了项目的方向与可控性; 具有瀑布模型和原型模型两者的优点。 | 采用螺旋模型需要丰富的风险评估经验和专门知识 在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失; 过多的迭代次数会增加开发成本,延迟提交时间。 |
区别:
递增是在每一个发布中增加功能直到构造全部内容。
迭代是交付一个完整系统的子集,在后续发布中补充完善
相同点:
估算方法
分解技术
经验模型技术
软件规模估算的主要方式
???代码行(用源代码长度来测量)
L
O
C
=
(
s
a
+
4
s
m
+
s
b
)
/
6
LOC=(sa+4sm+sb)/6
LOC=(sa+4sm+sb)/6
???功能点(FP Function Point 功能点没有单位)
题目一般会给两个表格,一个是功能点数量表、另一个是权重表,简单的题会告诉你F(因子权重)都等于某个数,一共有14个F
解题方法
算UFP(未调整功能点)
数量表和权重表每行的低中高一一相乘后相加,然后把每行的UFP都加起来得到总的
算TCF(技术复杂性因子,计算量简单的题会告诉你每个F都一样)
T
C
F
=
0.65
+
0.01
?
∑
i
=
1
14
F
i
TCF=0.65+0.01*\sum_{i=1}^{14} F_{i}
TCF=0.65+0.01?i=1∑14?Fi?
把两个相乘
F P = U F P ? T C F FP=UFP*TCF FP=UFP?TCF
例题
基于模型的工作量估算:
IBM模型
???COCOMO模型
基本COCOMO
E是工作量(人月),L是代码行(单位是千行),a和b题目会告诉
E
=
a
?
L
b
E=a*L^{b}
E=a?Lb
D是开发时间(月),c和d题目会告诉应该
D
=
c
?
E
d
D=c*E^{d}
D=c?Ed
???中等COCOMO
在后面乘个调节因子EAF
E
A
F
=
F
1
?
F
2
.
.
.
?
F
17
EAF=F_{1}*F_{2}...*F_{17}
EAF=F1??F2?...?F17?
E = a ? L b ? E A F E=a*L^{b}*EAF E=a?Lb?EAF
高等COCOMO(不考)
软件开发成本的估算(看题目给了什么,要看清楚单位,C是平均成本一般是多少/人月,E是工作量人月)
成本
=
C
?
E
成本=C*E
成本=C?E
在制定软件项目计划之前应先确定 目标和范围
进度计划编制方法:
网络图法
???关键路径法(CPM 采用箭线型网络图)
什么是关键路径?对于一个项目来说最长的或耗时最多的路线,只有这条线结束了项目才算结束
什么是关键任务?就是关键路径上的任务
题型1:给你个网络图,让你找关键路径
解法:
例题:
题型2:给你个网络图,让你算关键任务最早开始时间、最迟开始时间
解法:(和下面例题一起看,以5节点为例,因为它很特殊)
例题:
???软件需求的类别
例子(一个字词检查程序):
??需求工程分为需求开发和需求管理(看图)
**需求开发:**需求获取、需求分析、需求描述、需求验证
**需求管理:**变更控制、版本控制、需求跟踪、需求状态跟踪
别问中间那几章去哪了,反正它不考
??从客观存在的事务构造软件系统
对象是系统的基本单位
事务的静态特征用对象的属性来表示
事务的动态特征用对象的操作来表示
?对象的属性和操作合为一体,构成独立的实体,对外屏蔽内部细节,这叫封装
对事物进行分类,相同属性和操作的对象为一类,每个对象都是类的一个实例
运用抽象的原则,可通过继承一般类的属性和操作,得到特殊的类
复杂对象可以用简单对象来构成(聚合)
对象之间只能通过消息进行通信
用关联来表达两个或多个类之间的关系,就是1对1,1对多的那种图
UML采用“可视化”图形来定义语言,让人和机器都能读懂
用例图
基本元素:
角色(用小人代表、一般为系统的使用者)
用例(用椭圆代表、动词+名词)
关系(一条实线/虚线+小箭头/三角箭头代表、记得写<><>)
用例图中有关联、包含、扩展、泛化关系
角色和用例:关联
用例和用例:包含,扩展,泛化
角色和角色:泛化
注:
包含关系的子用例是一定会用到的,箭头指向子用例
扩展关系的用例只在特定情况下用到,箭头指向父用例
泛化关系是子用例/角色继承父用例/角色的所有东西,但特殊一点,箭头指向父用例
例子:
用例规约(不一定会考):
类图(太简单了懒得写了)
基本元素:
类(用一个框中间一条线表示,一般都是实体类,名词和动词都可以)
关系(关联、聚集和组合、泛化、依赖)
例子:
基本元素:
和其他图的关系:
画图小技巧
无外乎三个类,边界类(就是界面),控制类(就是某个总控制台,可以理解为后端程序),实体类(一般来说就是数据库,各种记录,各种信息)
所以,画顺序图实际上就是套模板,你可以看到之后所有例题,基本都能对应我这套模板。
例子: