软件工程复习
一、选择题:单选,20分
二、填空题 10分
三、简答题 10分
四、简答分析作图 30分
五、综合案例题 30分
一、选择题and填空题 知识点
1、什么是软件?
软件=程序+数据+文档
分类:系统软件、支撑软件、应用软件
2、软件危机:是指在计算机软件的开发和维护过程中遇到的一系列严重问题;
软件危机具体表现:
① 软件延迟交付甚至取消项目
② 软件开发成本超支
③ 软件错误多、性能低、不可靠、不安全
④ 软件维护十分困难
⑤ 软件不能满足用户的需求
3、软件工程的诞生:软件工程一直致力于探索软件开发问题的解决之道
4、软件工程的基本要素:(三要素)
① 过程:支撑软件生命周期的所有活动
② 方法:为软件开发过程提供“如何做”的技术
③ 工具:为软件开发方法提供自动的或半自动的软件支撑环境
5、瀑布模型-v模型(考察对应阶段要做的测试)
6、快速原型模型(?)
适用于用户驱动的系统(即需求模糊或随时间变化的系统)
7、螺旋模型
特点:
① 把软件开发过程组成为一个逐步细化的定义周期(螺旋周期)序列
② 紧密围绕开发中的风险问题,用风险分析推动软件设计向深一层扩展、求精
③ 强调持续地判断、确定和修改用户任务目标,并按成本、效益来分析候选的软件产品性质对任务目标对贡献
④ 可结合采用多种软件开发方法,结合采用哪一种方法由风险分析来决定
适用范围:
① 大型和超大型项目
② 项目需求和技术都很不成熟
③ 处于探索和开拓性的软件系统
④ 项目分析阶段实施
步骤(如图7.4):
① 确认目标,选择方案、设定约束条件
② 评估方案,识别并排除分析
③ 开发,确认以及下一级产品
④ 计划下一个阶段
8、CMM成熟度模型
为企业的发展规定过程成熟级别分位5级:
① 初始级(Initial)
② 可重复级(Repeatable)
③ 定义级(Defined)
④ 管理级(Managed)
⑤ 优化级(Optimizing)
从无序 有序、特殊 一般、定性管理 定量管理、最终到达动态优化。
CMM的核心概念:通过管理来增加软件开发的条理性,减少人为的随意性
① 事前有计划
② 过程有监控
③ 结果有检查
④ 产品有评审
⑤ 事事有记录
⑥ 东西有位置
9、可行性研究
可行性研究主要集中于与风险相关的因素上,体现在四方面:
① 经济、社会效益可行性
② 技术可行性
③ 法律可行性
④ 用户操作可行性
10、需求分析
识别需求
① 功能需求
② 性能需求
③ 环境需求
④ 用户界面需求
11、概要设计
系统构架设计
软件结构设计
a.软件模块划分
模块化、模块化设计原则
1)模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
2)模块独立性:内聚、耦合
模块与模块间耦合度最高的是:内容耦合;最低的是:非直接耦合
最大的内聚:功能内聚 最低的内聚:偶然内聚
b.面向数据流分析
数据流类型:变换型数据流、事务型数据流,混合型数据流
c.数据设计
物理设计
对于不同的DBMS,应用的物理环境不同,提供的存储结构与存取方法各不相同。物理设计就是根据设计数据模式的要求,对DBMS的具体存储管理数据的物理结构进行设计
存储记录结构的设计:聚簇、索引
访问方法的设计:缓存、索引
数据存放位置的设计:分区、分表、分库
12、软件详细设计
a.设计方法
详细设计中的图有:流程图、NS、PAD图、判定表、PDL
b.详细设计的基本任务
① 为每个模块进行详细的算法设计。
② 为模块内的数据结构进行设计。
③ 对数据结构进行物理设计。
④ 其他设计:根据软件系统的类型,还可能要进行以下设计:
⑤ 代码设计。为了提高数据的输入、分类、存储、检索等操作,节约内存空间,对数据库中的某些数据项的值要进行代码设计。
⑥ 输入/输出格式设计。
⑦ 人机对话设计。对于一个实时系统,用户与计算机频繁对话,因此要进行对话方式、内容、格式的具体设计。
c.编码(每一个阶段做什么任务*)
① 目的:使用编程工具完成系统编码
② 在软件实现阶段,根据详细设计用编程语言编写所需的程序。需要完成的任务包括:
③ 根据详细设计,按照编码、用户接口规范编写程序
④ 对程序进行代码复查、编译、调试,直到程序运行通过,符合详细设计的要求;
⑤ 根据单元测试计划进行单元测试,生成单元测试报告
d.软件测试
① 软件测试目的(选择)
是为了发现错误而执行程序的过程,一个成功的测试是发现了至今尚未发现的错误的测试。
② 软件测试的基本任务应该是根据软件开发各阶段的文档资料和程序的内部结构,精心设计一组测试用例,利用这些实例执行程序,找出软件中潜在的各种错误和缺陷。
13.黑盒测试方法:等价类测试、边界值测试、错误推测
白盒测试方法:逻辑覆盖测试法(语句覆盖、条件覆盖、判定覆盖、判定/条件覆盖、组合覆盖、路径覆盖)、独立路径测试法
14.面向对象方法学四要素:对象、类、继承、通信(消息)
二、简答题
1、瀑布模型的定义及特点
定义:瀑布模型是传统的软件研发过程模式,其中的“瀑布”是对这个模型的形象表达:由顶倾泻下来的水,自顶向下、逐渐细化
特点:
① 阶段间具有顺序性和依赖性。
② 推迟程序的物理实现。
③ 质量保证:每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。
④ 易于组织,易于管理:可以预先完成所有计划。
⑤ 是一种严格线性的、按阶段顺序的、逐步细化的过程模型
2、模块化设计原则(启发性原则)
① 改进软件结构提高模块独立性,通过模块分解或合并,提高内聚,降低耦合
② 软件模块规模保持适当
③ 软件的深度、宽度、扇入、扇出都应适当
④ 尽量降低模块接口的复杂性
⑤ 模块的作用域应该在控制域之内
⑥ 设计单入口单出口的模块
⑦ 模块功能应该可以预测
(6,7可不写)
3、面向对象的三大特征是什么
继承性、封装性、多态性(举例)
① 继承性:举例:车辆的继承关系
② 多态性:举例:在父类"几何图形"中定义了一个服务"绘图",但并不确定执行时绘制一个什么图形。子类"圆"和"多边形"都继承了几何图形类的绘图服务,但其功能却不相同:一个是画圆,一个是画多边形。当系统的其他部分请求绘制一个几何图形时,消息中的服务都是"绘图",但圆和多边形接收到该消息时却各自执行不同的绘图算法。
③ 封装性:举例:电视机包括外形尺寸、分辨率、电压、电流等属性,具有打开、关闭、调谐频道、转换频道、设置图象等服务,封装意味着将这些属性和服务结合成一个不可分的整体,它对外有一个显示屏、插头和一些按钮等接口,用户通过这些接口使用电视机,而不关心其内部的实现细节。