目录
- 软件工程学概述
- 软件危机的典型表现、产生原因、消除途径
- 软件的构成:程序、数据、文档
- 软件工程的七点特性
- 软件工程的七条基本原理
- 软件工程方法:传统方法学,面向对象方法学
- 软件的生命周期:三个时期,软件定义,软件开发,软件维护
- 生命周期模型,了解模型的特点和适用场景。
- 可行性研究
- 可行性研究的目的
- 可行性研究的 3 个方面:技术可行性、经济可行性、操作可行性
- 系统流程图概念、图形符号
- 数据流图的概念、图形符号、绘制方法
- 数据字典的概念、内容(数据流、数据元素、数据存储、处理)
- 成本效益分析
- 需求分析
- 需求分析需要回答的问题
- 需求分析的任务
- 需求分析的成果:分析模型、软件需求规格说明书(SRS)
- 分析建模
- E-R 图的作用、图形符号、实体关系、绘制方法、数据库表的设计、实体属性
- 数据规范化
- IPO 图
- 总体设计
- 总体设计的目的
- 了解总体设计过程
- 软件设计过程中应该遵循的基本原理:
- 模块独立的概念、定量度量标准(耦合、内聚)
- 耦合方式、内聚方式、扇出、扇入,以及这些概念在模块设计方面的意义
- 作用域、控制域
- 启发规则
- 层次图和结构图的绘制
- 面向数据流的设计方法,了解变换流、事务流的概念及区别,了解变换分析、事务分析。
- 详细设计
- 结构程序设计的概念、基本控制结构(顺序、选择、循环)
- 程序流程图
- PAD
- 判定表
- 判定树
- Jackson 图
- 了解 Jackson 结构程序设计方法
- 流图的概念、流图的绘制、环形复杂度的方法
- 实现
- 实现=编码+测试
- 程序设计语言的选择
- 软件测试的目标
- 大型软件系统的测试过程中的测试步骤
- 测试方法:黑盒测试、白盒测试
- 驱动程序、存根程序
- 单元测试
- 集成测试、渐增式集成测试的集成策略及其优缺点
- 确认测试
- Alpha 测试和 Beta 测试
- 白盒测试技术中的覆盖标准
- 独立路径
- 调试
- 面向对象方法学
- 面向对象方法学
- 面向对象方法学的优点
- 面向对象的基本概念:对象、类、消息、封装、继承、多态性、重载等
- 3 种模型:对象模型、功能模型、动态模型
- 常见 UML 图及其作用
- 期末题库
软件工程学概述
软件危机的典型表现、产生原因、消除途径
定义
在计算机软件的开发和维护过程中所遇到的一系列严重问题
包括两点:1.如何开发软件,以满足对软件日益增长的需求;2.如何维护数量不断膨胀的已有软件
典型表现
- 对软件开发成本和进度的估计常常很不准确。
- 用户对已完成的软件系统不满意的现象时有发生
- 软件的质量往往不可靠
- 软件常常是不可维护的
- 软件通常没有适当的文档资料
- 软件成本在计算机系统总成本所占的比例逐年上升
- 软件开发生产率的速度,远远跟不上计算机应用迅速普及深入的趋势
产生原因
一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。
具体表现如下:
(1)软件是逻辑部件而不是物理部件。
(2)软件的规模越来越大,复杂性越来越大。
(3)轻视需求分析的重要性,轻视软件维护的错误观点和方法
消除途径
- 首先应该对计算机软件有一个正确的认识,软件不等于程序
- 充分认识到软件开发应该是各类人员协同配合,共同完成的工程项目
- 推广使用在实践中总结出来的开发软件的成功技术和方法,并且研究探索更好的技术和方法
- 应该开发和使用更好的软件工具
软件的构成:程序、数据、文档
软件工程方法学的三要素是指方法、工具、过程
软件工程的七点特性
- 软件工程关注于大型程序的构造
- 软件工程的中心课题是控制复杂性
- 软件经常变化
- 开发软件的效率非常重要
- 和谐地合作是开发软件的关键
- 软件必须有效地支持它的用户
- 软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品
大复变效和支文
软件工程的七条基本原理
- 用分阶段的生存周期计划严格管理;
- 坚持进行阶段评审;
- 严格实施的产品控制
- 采用现代程序技术;
- 结果应能清楚地审查;
- 开发小组的成员应该少而精;
- 承认不断改进软件工程的必要性。
分评控现审少改
软件工程方法:传统方法学,面向对象方法学
软件的生命周期:三个时期,软件定义,软件开发,软件维护
每个时期又分为不同阶段,一共八个阶段。
每个阶段要回答的问题
阶段 | 回答 | 任务 | 成果 |
---|---|---|---|
问题定义 | 要解决的问题是什么 | 确切地定义需要解决的问题 | 出关于问题性质、工程目标和工程规模的书面报告 |
可行性研究 | 对于上一个阶段所确定的问题有行得通的解决办法吗? | 从XXX可行性等方面研究可行性 | 可行性分析报告 |
需求分析 | 系统必须做什么 | 确定用户对系统所需的功能 | 需求建模、软件需求规格说明书 |
总体设计 | 系统如何实现 | 建立目标软件系统的总体结构 | 测试计划,数据库、实现计划 |
详细设计 | 如何具体地实现这个系统 | 设计出程序的蓝图 | 详细设计规格说明书 |
编码与单元测试 | 写出正确的容易理解、容易维护的程序模块。 | 源程序代码 | |
综合测试 | 通过各种类型的测试(及相应的调试)使软件达到预定的要求 | 系统集成测试报告 | |
软件维护 | 通过各种必要的维护活动使系统持久地满足用户的需要 |
生命周期模型,了解模型的特点和适用场景。
- 通用模型,需求比较确定。
- 快速原型,快速,更好获取用户需求。
- 喷泉模型,迭代,以对象为驱动。
- 瀑布模型,文档驱动。
- 螺旋模型,风险驱动。
- 增量模型:在一定程度上可以增加速度,但有风险,要求设计人员有更好的素质。
可行性研究
可行性研究的目的
可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
可行性研究的 3 个方面:技术可行性、经济可行性、操作可行性
系统流程图概念、图形符号
系统流程图是概括地描述物理系统的工具
数据流图的概念、图形符号、绘制方法
是一种图形化技术,它描绘信息流和数据从输入移动 到输出的过程中所经受的变换
数据字典的概念、内容(数据流、数据元素、数据存储、处理)
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。
需要定义数据流、数据元素、数据存储、处理
定义的方法
顺序、选择、重复、可选:
成本效益分析
软件开发成本主要表现为人力消耗
成本计算
- 代码行
- 任务分解技术
- 自动估计成本技术
成本效益计算
- 货币时间价值
- 投资回收期
- 纯收入
- 投机回收率
需求分析
需求分析需要回答的问题
准确回答“系统必须做什么”的问题。
需求分析的任务
- 确定对系统的综合需求
- 分析系统的数据需求
- 导出系统的逻辑模型
- 修正系统开发计划
综数逻开
需求分析的成果:分析模型、软件需求规格说明书(SRS)
分析建模
数据模型(实体-联系图)
功能模型(数据流图)
行为模型(状态转换图)
E-R 图的作用、图形符号、实体关系、绘制方法、数据库表的设计、实体属性
key | value |
---|---|
作用 | 它描述了从用户角度看到的数据,它反映了用户的现实环境,而且与在软件系统中的实现方法无关。 |
图形符号 | |
实体关系 | 1:1、1:N、N:M |
数据规范化
key | value |
---|---|
第一范式 | |
第二范式 | |
第三范式 | |
范式级别越高,冗余度越低。
IPO 图
输入 处理 输出
总体设计
总体设计的目的
回答 系统该如何实现 的问题
了解总体设计过程
- 大体分为两个阶段
系统设计和结构设计阶段
- 具体分为九个步骤
- 设想供选择的方案
- 选取合理的方案
- 推荐最佳方案
- 功能分解
- 设计软件结构
- 设计数据库
- 制定测试计划
- 书写文档
- 审查和复审
软件设计过程中应该遵循的基本原理:
模块化、抽象、逐步求精、信息隐藏和局部化、模块独立
模块独立的概念、定量度量标准(耦合、内聚)
模块独立的概念是模块化、抽象、信息隐藏和局部话概念的直接结果。
耦合方式、内聚方式、扇出、扇入,以及这些概念在模块设计方面的意义
功能内聚最高,偶然内聚最低
数据耦合、特征耦合、控制耦合、公共耦合、内容耦合(从低到高)
扇入:指直接调用该模块的上级模块的个数
扇出:指该模块直接调用的下级模块的个数
低耦合高内聚,得较高的模块独立性。顶层扇出高,底层扇入高,是好的模块设计。
如果一个模块被 n 个模块调用,其中直接的上级模块的个数是 m 个( m<=n )那么该模块的扇入数是 m 个。
作用域、控制域
控制域:本身及其所有下级模块
作用域:受该模块内一个判定影响的所有模块的集合
模块的作用域应在模块的控制域之内
启发规则
- 改进软件结构提高模块独立性
- 模块规模应该适中
- 深度宽度扇入扇出都应该适当
- 模块的作用域应该在控制域之内
- 力争降低模块接口的复杂程度
- 设计单入口单出口的模块
- 模块功能应该可以预测
独中深域复单预
层次图和结构图的绘制
面向数据流的设计方法,了解变换流、事务流的概念及区别,了解变换分析、事务分析。
- 复查基本系统模型
- 复查并精化数据流图
- 确定数据流图具有变换特性还是事务特性
- 确定输入流和输出流的边界,从而孤立出变换中心
- 完成“第一级分解”
- 完成“第二级分解”
- 使用设计度量和启发式规则对第一次分割得到的软件结 构进一步精化
详细设计
结构程序设计的概念、基本控制结构(顺序、选择、循环)
定义
- 一个程序的代码块仅仅通过顺序、选择和循环这三种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
- 结构程序设计是尽可能少用GO TO语句的程序设计方法。最好仅在检测出错误时才使用GO TO语句,而且应该总是使用前向GO TO语句。
程序流程图
PAD
问题分析图
判定表
判定树
Jackson 图
了解 Jackson 结构程序设计方法
流图的概念、流图的绘制、环形复杂度的方法
流图是简化了的程序流图
环形复杂度计算:
- 线性无关的区域数
- 边数-节点数+2
- 判定节点+1
实现
编码+测试。
程序设计语言怎么选择,什么标准应用领域、程序员的能力,可用的工具,跨平台性等 有哪些标准
测试的目标:是为了尽可能多的找打软件中的错误,而不是证明软件正确
大型软件测试的步骤有哪些
主要的测试方法:黑河测试,白盒测试。 ; 驱动程序,存根程序。什么时候需要驱动程序什么时候需要存根程序
驱动程序 调用程序的程序。存根程序:替代要调用的模块。
单元测试
测试的重点是什么,集成测试,渐增式集成测试 优缺点
确认测试,内容包括什么
alpha beita测试有什么区别
白盒测试过程中 覆盖标准
覆盖的强弱
环形复杂度独立路径 复杂度。
实现=编码+测试
程序设计语言的选择
- 系统用户的要求
- 可以使用的编译程序
- 可以得到的软件工具
- 工程规模
- 程序员的知识
- 软件可移植性要求
- 软件的应用领域
软件测试的目标
- 测试是为了发现程序中的错误而执行程序的过程
- 好的测试方案是极可能发现迄今为止尚未发现的错误的测试
- 成功的测试是发现了至今为止尚未发现的错误的测试
大型软件系统的测试过程中的测试步骤
- 模块测试
- 子系统的测试
- 系统测试
- 验收测试
- 平行运行
测试方法:黑盒测试、白盒测试
白盒测试主要采用的技术有:路径测试技术和事务处理流程技术
黑盒测试:等价划分、边界值分析,设计测试数据的技术
驱动程序、存根程序
驱动程序 调用程序的程序。存根程序:替代要调用的模块。
自顶向下测试时使用存根程序
自底向上时使用驱动程序
单元测试
单元测试的重点:
- 模块接口
- 局部数据结构
- 重要的执行通路
- 出错处理通路
- 边界条件
集成测试、渐增式集成测试的集成策略及其优缺点
集成测试分为非渐增式集成测试和渐增式集成测试
渐增式继承策略分为自顶向下集成测试和自底向上集成测试
自顶向下测试的主要优点事不需要测试驱动程序,能够在测试阶段的早期实现并验证系统的主要功能,而且在早期发现上层模块的接口错误。
自底向上测试优缺点正好相反
确认测试
确认测试也称验收测试,目标是验证软件的有效性。
内容包括:1. 软件配置复查 2.Alpha测试和 3.Beta测试
Alpha 测试和 Beta 测试
Alpha测试有用户在开发者的场所进行,在开发者的指导下,所以是受控的。
Beta测试有软件的最终用户们在客户场所进行,是不可控的
白盒测试技术中的覆盖标准
判定覆盖>判定覆盖>语句覆盖
独立路径
独立路径遇到循环重复的用…表示 1-2-3-2-…
调试
面向对象方法学
是什么,有什么优点
基本概念,对象类,封装继承重载。
三种模型:对象模型、功能、动态模型
面向对象方法学
同时使用对象、类、继承、消息的方法
面向对象方法学的优点
- 与人类习惯的思维方法一致
- 稳定性好
- 可重用性好
- 易开发大型产品
- 可维护性好
面向对象的基本概念:对象、类、消息、封装、继承、多态性、重载等
- 对象是描述对象属性的数据(静态属性)以及对这些数据施加的所有操作动态行为)封装在一起构成的统一体。
- 类是对具有相同属性和行为的一个或多个对象的描述。
- 消息是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。
调用对象中的方法,例如MyCircle.Show(Green)- 封装是把对象的属性和服务结合成一个独立的系统单位,并尽可能隐藏对象的内部细节
- 继承是子类自动地共享基类(父类)中定义的数据和方法机制
- 多态性是子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。
同样的消息既可以发送给父类也可以发送给子对象,而在不同层次的类可以按自己的需要实现不同的行为- 重载
同一作用域内的若干个参数特征不同的函数可以使用同一个函数的名字,
例:Show(shape)和Show(shape,color)
3 种模型:对象模型、功能模型、动态模型
常见 UML 图及其作用
期末题库
软件工程期末考试题库