软件工程复习
分值分布:
-
单选 10
-
单选 10
-
多选 20
-
简答 20
-
填空 20
-
综合 20(DFD、用例图、白盒法三选一)
第一章
1.1 软件工程的产生和发展
-
软件危机怎么产生?
经费预算不足
计划完成时间一拖再拖
开发的软件不符合用户需求
软件可维护性差
软件可靠性差
-
软件危机的表现
软件产品质量差
软件生产效率低
-
什么叫软件工程
工程化地管理软件项目
-
软件工程的主要目标
以较少的投资获取高质量的软件
-
软件划分
系统软件、支撑软件、应用软件
1.3 软件工程模型
-
软件生命周期
可行性研究→需求分析→概要设计→详细设计→编码→测试→运行与维护
-
软件工程三要素
方法、工具、过程
-
过程模型
-
瀑布模型
适合需求明确的软件项目开发
优点:简单易用,清晰地描述了软件生命周期的全过程,消除非结构化软件,降低软件的复杂性,促进软件开发工程化
缺点:无法解决需求不明确的问题
瀑布模型是整体开发模型
-
增量模型
适合于软件需求不明确、设计方案有一定风险的项目
增量模型是非整体开发模型
-
原型模型(循环模型)
①快速分析
②构造原型
③运行和评价原型
④修改与改进
-
螺旋模型
螺旋模型是一种迭代模型,将瀑布模型和增量模型结合,加入风险评估
优点:降低开发风险
缺点:增加开发成本
-
智能模型(专家模型)
智能模型也称为基于知识的软件开发模型,是知识工程与软件工程在开发模型上结合的产物,是以瀑布模型与专家系统的综合应用为基础建立的模型
-
1.4 软件开发方法
-
面向结构化开发,包含哪三个
结构化分析方法(Structured Analysis,SA)、结构化设计方法(Structured Design,SD)、结构化程序设计方法(Structured Program,SP)
-
面向对象开发包括哪三个
面向对象分析(Object-Oriented Analysis,OOA)、面向对象设计(Object-Oriented Design,OOD)、面向对象程序设计(Object-Oriented Program,OOP)
-
敏捷开发
敏捷开发方法是以人为核心,迭代式的开发方法
-
XP方法(极限编程)
以用户需求作为软件开发的最终目标,是一种测试驱动的开发方法
核心价值观:沟通、简单、反馈、勇气
-
第二章
2.1 软件需求的基本概念
-
哪个是软件需求阶段?
需求分析
-
软件需求的分类
用户需求
-
系统需求
功能需求
非功能需求
领域需求
-
2.2 需求工程过程
-
获取需求的方法?
了解领域知识
需求收集
-
需求获取的困难
应用领域广泛
非功能需求的建模技术缺乏
沟通困难
需求不断变化
-
需求分析与建模(DFD)
p56-57
-
需求的有效性验证
有效性
一致性
完备性
可验证性
-
需求变更方法
软件基线
软件家族法
多视点法
2.4 需求分析方法与建模技术
-
SA
SA法建立的分析模型以分层的数据流图为主,再辅以数据词典和加工的逻辑说明,对构成数据流图的主要成分做进一步描述
-
DFD三大原则
先全局后局部,先整体后细节,先抽象后具体
-
数据词典的4类条目
数据流
数据项
文件
基本加工
第三章
3.2 软件体系结构设计
-
仓库模型
有利于数据共享
-
优点
从一个子系统产生的数据可以被其他子系统共享数据
各个子系统之间不需要知道其他子系统如何使用它产生的数据
所有子系统都拥有一致的视图
-
缺点
子系统之间必须要有一致的视图
数据结构可能被改变,翻译代价高
-
-
层次模型
-
OSI七层模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
-
-
分布式系统模型
B/S
C/S
-
优势
开放性高
容错能力强
透明性高
-
不足
复杂性
安全性
不可预知性
-
-
云计算模型
-
3种服务模式
软件即服务(Software as a Service,SaaS)
平台即服务(Platform as a Service,PaaS)
基础架构即服务(Infrastructure as a Service,IaaS)
-
3种部署模式
公有云
私有云
混合云
-
-
雾计算
在云资源和用户之间加了一个中间体提高计算速度
-
控制模型
-
分类
-
集中控制模型
调用-返回模型
管理者模型
-
事件驱动控制模型
广播模型
中断驱动模型
-
-
-
模块分解
-
原则
低耦合,高内聚(数据耦合,功能内聚)
-
基本单元
功能
逻辑
状态
-
3.4 详细设计描述工具
流程图
N-S图
PAD问题分析图
PDL
判立表
判立树
3.6 MVC设计模式
模型-视图-控制器
第四章
-
UML
-
静态建模
用例图
-
类图
属性
-
关系
关联
-
聚合
整体
部分
-
-
对象图
-
包图
依赖
泛化
组件图
配置图
-
-
动态建模
-
状态图
状态
事件
-
活动图
对象
泳道
-
顺序图
激活
时间轴
合作图
-
消息
简单消息
同步消息
异步消息
-
-
-
常用的连接关系
关联:用于连接模型元素或链接(一条直线)(—————)
依赖:一个元素依赖于另一个元素(一条虚线箭头)(- - - - - - - >)
泛化:用于描述父类与子类之间的继承关系(一条空心箭头)(————▷)
聚合:表示整体与部分的关系,由部分元素构成整体,其中菱形一端是整体类,另一端是部分类(一条菱形空心箭头)(—————◇)
组合:比聚合更紧密的整体-部分关系(一条菱形实心箭头)(————◆)
细化:依赖关系的一个变体,类B是类A细化的结果(一条虚线空心箭头)(类B - - - - - ▷ 类A)
第五章
5.1 程序设计语言的选择
-
语言分类
-
低级语言
机器语言
汇编语言
-
高级语言
面向过程
面向对象
混合型
-
-
程序设计语言选择准则
项目的应用领域
算法和计算复杂性
软件的执行环境
性能因素
数据结构的复杂性
软件开发人员的知识水平及心理因素
5.2 程序设计方法
-
面向对象的核心概念
数据封装
继承
多态性
泛型编程
5.6 软件复用
-
软件复用
合成复用
渐进复用
第六章
6.1 软件测试概述
-
软件测试的基本步骤
①单元测试
②集成测试
③确认测试
④系统测试
⑤验收测试
6.6 面向对象的测试
-
面向对象的测试
-
不同点
能更早地定义出测试用例,早期介入进行测试可以降低成本
尽早编写系统测试用例,以便开发人员与测试人员对系统需求的理解保持一致
面向对象的测试模式更注重软件的实质
-
第七章
7.1 软件维护的基本概念
-
维护类型
完善性维护
适应性维护
纠错性维护
预防性维护
7.4 软件可维护性
-
可维护性
可理解性
可靠性
可测试性
可修改性
可移植性
效率
可使用性
7.5 软件工程再工程技术
-
逆向工程
核心:抽取
处理抽取
界面抽取
数据抽取
第八章
8.2 项目进度计划
-
进度计划
进度表
甘特图
时标网状图
PERT、CPM
8.3 软件项目成本估算技术
-
COCOMO模型
基本COCOMO模型
中间COCOMO模型
详细COCOMO模型
8.4 软件项目人力资源管理
-
3类成员
事业型
自我实现型
交际型
-
凝聚力
拥有内部标准
成员紧密工作
成员了解彼此工作
无私编程
8.6 软件质量保证
-
度量方法
精确度量
全面度量
简易度量
-
CM
标识变更
控制变更
确保变更