考研复试的软件工程重点归纳
原文记录在我的幕布https://mubu.com/doc/3C3pXXIGg0上
里面查看观感更好
思维导图在最后,较为庞大。同样推荐到链接里面查看。点击查看思维导图即可
你可以转载或者保存,如果能注明出处或者点个赞那是最好的啦
感谢!
软件工程
-
一、软件工程和软件过程
-
软件危机
-
软件工程
-
软件生命周期
-
软件生命周期过程模型
-
瀑布模型
-
快速原型模型
-
增量模型
-
螺旋模型
-
喷泉模型
-
-
Rational统一过程(RUP)
-
六个最佳实践
-
十大要素
-
RUP生命周期
-
-
敏捷过程与极限编程
-
敏捷过程4个声明
-
极限编程
-
有效实践
-
开发过程
-
迭代过程
-
-
-
能力成熟模型(CMM)
-
结构
-
成熟等级
-
初试级
-
可重复及
-
已定义级
-
已管理级
-
优化级
-
-
过程关键域
-
-
-
二、传统方法学
-
结构化分析SA
-
与用户沟通
-
访谈
-
简易的应用规格说明技术
-
快速建立软件原型
-
特性
-
快速、
-
容易修改
-
-
方法和工具
-
第四代技术(4GT
-
可重用的软件构件
-
形式化规格说明和原型环境
-
-
-
-
分析建模与规格说明
-
分析建模(数据、功能、行为模型)
-
数据字典(核心)
-
定义、
- 数据字典是描述数据的信息集合,是对系统中使用的所有数据元素的定义的集合
-
CASE
-
结构化分析与设计工具
-
数据字典作为CASE的一部分实现
-
-
-
数据流图(DFD)——处理规格说明(功能模型)
-
定义
- 一种图形化技术,描绘信息流和数据从输入移动到输出过程所经受的变化
-
符号
-
正方形/立体形:源点或终点
-
圆角矩形/圆形:变换数据的处理
-
开口矩形:数据存储
-
箭头:数据流
-
条件符号
-
*且
-
+或
-
圈加:仅
-
-
-
-
实体关系图(ER图)——数据对象描述(数据模型)
-
数据对象
-
定义:数据对象是对软件必须理解的复合信息的表示。复合信息指一系列不同性质或属性的事物。
-
数据对象只封装了数据而没有对作用于数据上操作的引用,这是数据对象与“类,对象”的差别
-
-
属性
- 定义:属性定义了数据对象的性质
-
关系
-
定义:数据对象之间想联系的方式称为关系,联系也有属性
-
分类
-
一对一
-
一对多
-
多对多
-
-
-
ER图符号
-
矩形框:实体(数据对象)
-
菱形框:关系
-
椭圆/圆角矩形:属性
-
-
优点
- 接近人的思维方式,易理解。用户与分析员交流
-
-
状态转换图——控制规格说明(行为模型)
-
定义
- 状态转换图通过描述系统的状态以及引起系统状态转换的事件来表示系统行为
-
状态
-
定义
- 状态是任何可以备观察到的系统行为模式,规定了系统对事件的相应方式。
-
分类
-
初态、终态、中间状态
-
1个初态,0至多个终态
-
-
-
事件
-
定义
- 在某个时刻发生的事情,是对引起系统发生动作或发生状态改变的控制信息
-
-
符号
-
初态:实心圆点
-
终态:同心圆
-
中间状态:圆角矩形
-
上:状态名称
-
中:状态变量名字和值【可选】
-
下:活动表【可选】
-
-
-
-
-
软件需求规格说明(分析阶段的最终产品)
-
-
结构化分析过程
-
问题定义
-
目的:弄清楚计算机解决的根本问题所在,确定新系统的作用域,以及项目所需的资源工期和经费
-
任务:便携项目报告提交审查,为可行性研究作依据
-
-
可行性研究
-
抽象简化的系统分析和设计全过程
-
目标:用最小代价确定问题是否能够解决
-
步骤
-
澄清系统规模和目标
-
研究现有的系统
-
导出高层逻辑模型
-
进一步确定系统规模和目标
-
导出供选择的解法(技术、操作、经济可行性)
-
推荐最佳方案
-
草拟开发计划
-
写出文档提交审查
-
-
-
需求分析
-
目的:明确回答系统必须做什么
-
要点
-
前一阶段特别是数据流图是需求分析的出发点
-
需求分析的好坏直接影响后续开发的质量
-
开发与客户之间的沟通至关重要
-
抽象现有需求还要挖掘隐藏需求
-
需求分析是个迭代过程
-
-
步骤
-
沿数据流图回溯
-
写出文档初稿
-
定义逻辑系统
-
细化数据流图
-
书写正式文档
-
技术审查管理复查
-
-
-
-
-
结构化设计
-
结构化分析到结构化设计
-
数据设计——ER图,数据字典
-
体系结构设计——数据流图
-
接口设计——数据流图
-
过程设计——状态转换图
-
-
相关概念
-
模块化
-
模块:·由边界元素限定的相邻的程序元素的序列,有一个总体的标识符代表它
-
模块化:把程序划分成为可独立命名且独立访问的模块,每个模块完成一个子功能,能把模块集成起来构成一个整体,完成指定功能
-
评价模块系统能力
-
模块可分解性
-
模块可组装性
-
模块可理解性
-
模块连续性
-
模块保护性
-
-
-
抽象
- 现实世界中一定事物、状态或者过程之间总是存在某些相似的方面,把这些相似的方面集中和概括起来暂时忽略差异这就是抽象
-
逐步求精
- 为了集中精力解决主要问题而尽量推迟对问题细节的考虑
-
信息隐藏
- 应该这样设计和确定模块,使得一个模块内包含的信息对于不需要这些信息的模块来说是不能访问的
-
模块独立
-
模块独立是模块化、抽象、逐步求精、信息隐藏等概念的直接结果
-
耦合
-
耦合是对一个软件结构内不同模块直接互联程度的度量
-
耦合的强度取决于接口的复杂程度,进入或访问一个模块的点以及通过接口的数据
-
尽量数据耦合,少控制耦合公共环境耦合,不内容耦合
-
-
内聚
-
标志一个模块内各个元素彼此结合的紧密程度,是信息隐藏和局部化概念的自然扩展
-
内聚更重要
-
功能、顺序、通讯、过程、时间、逻辑、偶然
-
-
-
模块化启发规则
-
改进软件结构提高模块独立性
-
模块规模应该适中
-
深度宽度,扇入扇出应该适当
-
深度:软件结构中控制的层数
-
宽度:软件结构同层次上模块总数最大值
-
扇出:一个模块直接控制(调用)的模块数目
-
扇入:有多少个上级模块直接调用
-
-
模块的作用域应该在控制域之内
-
控制域:这个模块本身以及所有直接或者间接从属于它的模块集合
-
修改办法:上移或者下移
-
-
力争既降低模块接口的复杂度
-
设计单入口单出口的模块
-
模块功能应该可以预测
-
-
-
表示软件结构的图形工具
-
层次图
-
矩形框代表一个模块
-
框间连线表示调用关系(上调用下)
-
-
HIOP图(层次图加输入/处理/输出图)
-
结构图
-
-
面向数据流的设计方法
-
变换流——变换分析
-
事务流——事务分析
-
-
面向数据结构的设计方法
-
jackson方法
-
jackson图
-
顺序
-
选择(可选)
-
重复
-
-
jackson方法
-
分析并确定输入数据和输出数据,用jackson图表示
-
找出输入输出数据结构中有对应关系的数据单元
-
…
-
-
-
-
人机界面设计(接口设计的一个组成)
-
问题
-
系统响应时间(长度和易变性)
- 用户完成某个控制动作到软件给出预期响应的时间
-
用户帮助设施(集成和附加)
-
出错信息处理
-
命令交互
-
-
设计过程
-
迭代过程
-
用户界面工具箱,用户界面开发系统
-
-
界面设计指南
-
一般交互
-
保持一致性
-
提供有意义的反馈
-
执行较大破坏动作前要求用户确认
-
允许取消大多数操作
-
减少两次操作之间的记忆量
-
提高对话移动思考效率
-
允许犯错
-
按功能对动作分类
-
提供帮助设施
-
-
信息显示
-
只显示与当前工作内容有关的信息
-
不要用数据淹没用户
-
使用一致性的标记
-
保持可视化语境
-
产生有意义的出错信息
-
使用窗口分隔不同类型信息
-
-
数据输入
-
减少输入动作
-
保持信息显示与输入信息的一致性
-
允许自定义输入
-
灵活交互
-
不适合的命令不起作用
-
让用户控制交流
-
对输入动作提供帮助
-
消除冗余操作
-
-
-
-
过程设计
-
数据,体系结构,接口设计后进行。详细设计阶段主要任务,基本决定了代码质量
-
三种基本结构(顺序,循环,选择),减少goto
-
工具(图形,表格和语言)
-
程序流程图(程序框图)
-
缺点
-
不是逐步求精的好工具,过早考虑控制流程而不是程序全局结构
-
箭头代表控制流,不顾结构设计
-
不易表示数据结构
-
-
-
盒图(N-S图)
-
功能域明确
-
不能任意转移控制
-
易确定局部和全程数据的作用域
-
易表示嵌套关系与模块的层次结构
-
-
PAD图(问题分析图)
-
必然是结构化程序
-
程序结构十分清晰
-
向右延伸,竖线的总条数就是层次数
-
易读易懂易记
-
易转化为高级语言源程序
-
既可以表示程序逻辑也可以表示数据结构
-
支持自顶向下,逐步求精方法的使用
-
-
判定表
- 清晰表示复杂条件组合与相应动作的对应关系
-
判定树
- 更直观,不简洁
-
过程设计语言(PDL/伪代码)
-
关键字的固定语法
-
自然语言的自然语法
-
数据说明的手段
-
模块定义和调用技术
-
-
-
-
-
结构化实现
-
编码
-
选择程序设计语言
-
用户的要求
-
可使用的编译程序
-
可得到的程序软件
-
工程规模
-
程序员知识
-
软件可移植性
-
软件应用领域
-
-
编码风格
-
程序内部的文档
-
数据说明
-
语句构造
-
输入输出
-
效率
-
-
-
测试
-
基础
-
测试目标
-
为了发现程序中的错误而执行程序
-
好的测试方案是可能发现尚未发现的错误的方案
-
成功的测试是发现了还未发现的错误
-
-
测试准则
-
所有测试追溯到用户需求
-
应该在开始测试开始前就制定出测试计划
-
80%的错误是有20%的模块产生的
-
测试应该从小规模向大规模测试
-
穷举测试是不可能的、
-
为了达到最佳的测试效果,应该由独立的第三方来从事测试工作
-
-
-
白盒测试
-
定义
- 知道产品的内部工作过程,测试产品能否按照规格说明书的规定正常运行
-
逻辑覆盖
-
语句覆盖:每个语句至少执行一次
-
判定覆盖:每个判定的可能结果执行一次
-
条件覆盖:每个条件都取到可能的结果
-
判定/条件覆盖:每个条件与判断都取到可能的结果
-
条件组合覆盖:每个判定表达式中条件的各种可能组合
-
-
控制结构测试
-
基本路径测试
-
根据设计结构画出相应流图
-
计算流图的环形复杂度
-
确定线性独立的基本集合
-
设计可强制执行基本集合中每条路径的测试用例
-
-
条件测试
- 着重测试程序中的每个条件
-
数据流测试
- 根据程序中变量定义和使用的位置,选择程序的测试路径
-
循环测试
-
简单循环
-
嵌套循环
-
串接循环
-
-
-
-
黑盒测试
-
定义:在程序接口进行的测试,不考虑内部结构,只检查程序功能是否能按照规格说明书正常使用
-
等价划分
-
划分有效等价类,无效等价类
-
设计一个方案尽可能多的覆盖多的有效等价类
-
设计新的方案只覆盖一个无效等价类(发现一类错误后就不再检查)
-
-
边界值分析
- 确定边界值,测试边界值,刚大于,小于边界值
-
错误推测
-
靠直觉和经验列举出程序中可能存在的错误和特殊情况
-
一段程序中已经发现的错误数往往和尚未发现的错误数成正比
-
-
-
测试策略
-
单元测试
-
代码审查
-
测试软件
- 开发驱动软件和存根软件
-
-
集成测试(接口)
-
自底向上(原子模块)
-
低层模块组合成实现某个功能的簇
-
写一个驱动程序,协调测试数据的输入输出
-
对模块的子功能簇进行测试
-
去掉驱动软件结构自下往上移动
-
-
自顶向下(深度/宽度优先)
-
对主控制模块进行测试
-
根据选定的结合策略,每次用一个实际模块代替一个存根程序
-
结合进一个模块同时进行测试
-
回归测试
-
-
-
回归测试
-
确认测试
-
以用户为主,主要使用黑盒测试
-
软件配置复查
-
Alpha测试
- 用户在开发者场合进行,由开发者对用户进行指导,记录错误。是可控的环境下进行的测试
-
Bate测试
- 最终用户在一个或多个客户场合进行的,开发者不能控制环境中的真实测试
-
-
-
-
调试(纠错)
-
蛮干法
-
回溯法
- 从发现症状的地方开始,人工沿控制流往回追踪源程序代码,直至找出错误
-
原因排查法
-
对分查找
- 若干个关键点位置的正确值,在附近注入正确值
-
归纳法
- 把错误有关的数据组织起来进行分析,做出假设人后进行分析排除
-
演绎法
- 设想出可能的出错原因,通过测试来排除。细化数据精确定位错误
-
-
-
软件可靠性
-
可靠性:程序在给定时间间隔内,按照规格说明书成功运行的概率
-
可用性:程序在给定时间点,按照规格说明书成功运行的概率
-
-
-
-
三、面向对象的方法学