软件工程基础复习笔记
- ==**注意:标注(*)的题目为2022年SCAU软件工程基础考试题,仅供参考**==
- 一、名词解释:
- 二、简答题
- 1、组成基于计算机的系统由哪些元素组成?
- 2、常用的需求分析方法
- 3、软件的需求规约主要包含哪些内容
- (*)4、软件设计的任务,在回答接口设计的时候,需要讲清楚3个方面的内容
- 5、软件设计的过程
- 6、内聚与耦合的概念
- (*)7、功能内聚的概念
- 8、程序流程图、判定表
- 9、结构化分析与设计
- 10、可用性与可用性测试
- (*)11、标识符命名需要注意的问题
- 12、书写功能性注释需要注意哪些问题
- 13、测试用例的概念
- 14、测试目的
- 15、白盒测试用例设计与黑盒测试用例设计
- 16、各种逻辑覆盖准则之间的关系
- 17、等价类的概念
- (*)18、V模型中四类测试的对象、依据和任务分别是什么
- 19、压力测试与性能测试
- 20、提高可维护性的方法
- (*)21、什么是软件开发模型?列举四个软件开发模型
- 三、往年卷子简答题
注意:标注(*)的题目为2022年SCAU软件工程基础考试题,仅供参考
一、名词解释:
1、软件
- 计算机软件指计算机中的
程序
、文档
及数据
(*)2、软件工程
-
①、将
系统化的
、严格约束的
、可量化的
方法应用于软件的开发、运行和维护,即将工程化
应用于软件
-
②、在①中所属方法的研究
3、软件危机
-
在计算机软件开发和维护过程中遇到的一系列严重问题。主要表现为:
-
许多软件项目不能满足客户的要求
-
许多软件项目超出预算和时间安排
-
(*)4、软件需求
- 软件需求是指用户对
目标软件系统
在功能、行为、性能、设计约束
等方面的期望,包括功能需求
、性能需求
、用户或人的因素
、环境因素
、界面需求
、文档需求
、数据需求
、资源使用需求
、安全保密需求
、可靠性需求
、软件成本消耗与开发进度需求
等,同时还要预估计以后系统可能达到的目标
5、改善型维护
- 在软件的使用过程中,为了满足用户所提出的
增加新功
能或修改已有功能
而进行的维护,就是改善性维护
6、条件组合覆盖
- 条件组合覆盖是指
选择足够的测试用例
,使得运行这些测试用例时,被测程序的每个判定中条件结果的所有可能组合
都至少出现一次
(*)7、软件生存周期
- 软件也有一个从
孕育、诞生、生长、衰亡
的生存过程,这个过程称为软件的生存周期。它大致可分为6个阶段:计算机系统工程
、需求分析
、设计
、编码
、测试
、运行
和维护
8、信息隐藏
- 每个模块的实现细节对于其它模块来说应该是隐蔽的
- 模块中包含的信息(包括数据和过程)不允许其他不需要这些信息的模块使用。
- 通过信息隐蔽,则可定义和实施对模块的
过程细节
和局部数据结构
的存取限制
9、需求工程
- 需求工程是应用于
已证实有效的技术与方法
开展需求分析,确定客户需求、帮助分析人员理解问题、评估可行性、协商合理的解决方案、无歧义地规约方案、确认规约以及将规约转换到可运行系统时的需求管理 - 将软件需求工程细分为:需求获取、需求分析与协商、系统建模、需求规约、需求验证和需求管理六个阶段。
10、瀑布模型
-
定义:瀑布模型是将软件生存周期的各项活动规定为
按固定顺序而连接
的若干阶段工作,上一阶段的活动完成后向下一阶段的活动过渡,最终得到软件产品 -
特征:
- ①接受上一阶段的结果作为本阶段的输入
- ②利用这一输入实施本阶段应完成的任务
- ③对本阶段工作进行评审
- ④将本阶段的结果作为输出,传递给下一阶段
-
优点:
-
为项目提供了按阶段划分的检查点
-
当前一阶段完成后,您只需要去关注后续阶段
-
可在迭代模型中应用瀑布模型
-
-
缺点:
- ①缺乏灵活性,难以适应
需求不明确
或者需求经常变化
的软件开发 - ②开发早期存在的问题往往要到交付使用时才发现,维护代价大
- ①缺乏灵活性,难以适应
11、软件测试
- 在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程
12、软件配置
- 软件配置是指软件产品在不同时期的组合。该组合随着开发工作的进展而不断变化
(*)13、模块化
- 把软件按照规定原则,划分为一个个较小的、相互独立的但又相互关联的部件,模块化实际上是系统分解和抽象的过程
14、内聚
- 内聚是指同一个模块内部的各个元素彼此结合的紧密程度
15、耦合
- 耦合是指不同模块彼此间相互依赖的紧密程度
16、白盒测试
- 白盒测试又称
结构测试
,这种方法把测试对象看作一个透明的盒子,测试人员根据程序内部
的逻辑结构及有关信息
设计测试用例,检查程序中所有逻辑路径
是否都按预定的要求
正确地工作。 - 主要方法有:
逻辑覆盖测试
、基本路径测试
、数据流测试
和循环测试
17、黑盒测试
- 黑盒测试又称为
行为测试
,这种测试方法把测试对象看作是一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性
,只依据软件的需求规约,检查程序的功能
是否符合需求规约的要求
。 - 主要方法有:等价类划分,边界值分析,比较测试,错误猜测和因果图方法
二、简答题
1、组成基于计算机的系统由哪些元素组成?
-
定义:通过处理信息来完成某些预定义目标而组织在一起的元素的集合
-
主要元素:
软件、硬件、人员、数据库、文档和规程
2、常用的需求分析方法
- 面向
数据流的结构化
分析方法 (SA)、面向数据结构
的分析方法、面向对象
的分析方法 (OOA)
3、软件的需求规约主要包含哪些内容
引言
、信息描述
、功能描述
、行为描述
、检验标准
、参考书目
和附录
(*)4、软件设计的任务,在回答接口设计的时候,需要讲清楚3个方面的内容
- 任务:使用一种设计方法,软件分析模型中通过数据、功能和行为模型所展示的软件需求信息被传送给设计阶段,产生数据/类设计、体系结构设计、接口设计、部件级设计。
(1)数据/类设计
-
将分析类模型变换成类的实现和软件实现所需要的数据结构
-
基础:类、由 CRC 中定义的数据对象和关系、数据字典中描述的详细数据内容
-
数据结构是数据的各个元素之间逻辑关系的一种表示,数据结构设计应 确定数据的组织、存取方式、相关程度以及信息的不同处理方法
-
无论采取什么样的设计方法,如果数据设计得好,往往能产生很好得软 件系统结构,具有很强的模块独立性和较低得程序复杂性。“清晰的数据定义是软件开发成功的关键”
-
数据设计的过程
-
为在需求分析阶段所确定的数据对象选择逻辑表示,需要对不同结构进行算法分析,以便选择一个最有效的设计方案
-
确定对逻辑数据结构所必需的那些操作的程序模块,以便限制或确定各个数据设计决策的影响范围
-
(2)体系结构设计
-
体系结构设计定义了软件的整体结构,由软件部件、外部可见的属性和它们之间的关系组成
-
体系结构设计表示可以从系统规约、分析模型和分析模型中定义的子系统交互导出
(3)接口设计
-
定义:接口设计描述了软件内部、软件和协作系统之间以及软件同人之间的通信方式
-
三个方面:
设计软件模块间的接口
、设计模块与其他非人的信息生产者和消费者(如外部实体)之间的外部接口
以及设计人(用户)与计算机间的人机接口
-
外部接口设计起始于对分析模型的每个外部实体的评估;外部实体的数据和控制需求确定下来以后,就可以设计外部接口了
(4)部件级设计
-
定义:将软件体系结构的结构性元素变换为对软件部件的过程性描述
-
基础:类为基础的模型、流模型、行为模型
5、软件设计的过程
软件设计
是一个把软件需求变换成软件表示
的过程,分为如下 6 个步骤:
① 制订规范
② 体系结构和接口设计
③ 数据/类设计
④ 部件级(过程)设计
⑤ 编写设计文档
⑥ 设计评审
6、内聚与耦合的概念
-
内聚度是指同一个模块内部的各个元素彼此结合的紧密程度 ,耦合度是指不同模块彼此间相互依赖的紧密程度
-
功能独立性比较强的模块应是高内聚低耦合的模块
-
耦合与内聚都是功能独立性的定性标准,都反映功能独立性的良好程度,但耦合是直接的主导因素,内聚则辅助耦合共同对功能独立
性进行衡量
(*)7、功能内聚的概念
- 指一个模块中各个部分都是
为完成一项具体功能而协同工作
,紧密联系,不可分割
8、程序流程图、判定表
-
程序流程图
独立于任何一种程序设计语言,比较直观、清晰、易于学习掌握 -
判定表
能清晰地表达复杂的条件组合
与应做动作
之间的对应关系流程图
、盒图
、判定表
的制作
9、结构化分析与设计
- 结构化方法概述
(1)结构化方法:
结构方法分为:结构化分析
、结构化设计
和结构化程序设计
结构方法是一种以数据流为中心的软件分析模型
和设计模型
结构化方法采用自顶而下
、逐层分解
的思想进行分析建模
(2)结构化分析模型的组成
数据字典:模型核心,描述软件使用和产生的所有数据
数据流图:功能建模,描述系统的输入数据如何经过加工,一步一步变成输出数据
实体-关系图(E-R 图):数据建模,描述数据字典中数据的关系
状态转换图 :行为建模,描述系统接收哪些外部事件,以及外部事件的作用下系统状态的迁移
- 结构化设计概述SD
- 结构化设计 SD 是将结构化分析得到的数据流图映射成软件体系结构的一种设计方法
- 结构化分析的结果
- 一套分层的数据流图
- 一本数据字典(包括数E-R图)
- 一组加工规约以及其他材料补充
10、可用性与可用性测试
-
可用性指的是产品的
使用效率
、易学性
和舒适程度
-
可用性测试可以要求用户完成一系列任务,对用户的完成过程进行记录,再对记录进行评审
(*)11、标识符命名需要注意的问题
-
1、选择含义明确的名字,使其能正确提示标识所代表的实体,例如,标识总量的变量名 Total,表示平均值的用 Average 等
-
2、名字不要太长,太长会增加打字量且易出错,必要时可使用缩写
-
3、不用相似的名字,相似的名字容易混淆,不易发现错误。如 cm、cn、cmn、cnm、cnn、cmm 等
-
4、不用关键字作标识符
-
5、同一个名字不要有多个含义
-
6、名字中避免使用易混淆的字符,如数字 0 与字母 O;数字 1 与字母 I或 l;数字 2 与字母 z 等
12、书写功能性注释需要注意哪些问题
-
1、注解要正确,错误的注解比没有注解更坏
-
2、为程序段作注解,而不是为每一个语句作注解
-
3、用缩进和空行,使程序与注释容易区分
-
4、注解应提供一些从程序本身难以得到的信息,而不是语句的重复
13、测试用例的概念
- 测试软件前,需要设计若干个测试用例,一个测试用例由
测试输入数据
和预期结果
组成,测试时通过输入数据,运行被测程序,如果运行的实际输出与预期结果不一致,则表明发现了程序中的错误
14、测试目的
- 软件测试的目的是
发现软件中的错误和缺陷,并加以纠正
15、白盒测试用例设计与黑盒测试用例设计
-
白盒测试主要用于对模块的测试,包括:
-
1、程序模块中的
所有独立路径
至少执行一次 -
2、对
所有逻辑判定的取值
(“真”与“假”)都至少测试一次 -
3、在
上下边界
及可操作范围内
运行所有循环 -
4、测试内部数据结构的有效性等
-
-
黑盒测试可用于各种测试,它试图发现以下类型的错误:
-
1、不正确或遗漏的功能
-
2、接口错误,如输入/输出参数的个数、类型等
-
3、数据结构错误或外部信息(如外部数据库)访问错误
-
4、性能错误
-
5、初始化和终止错误
-
16、各种逻辑覆盖准则之间的关系
-
白盒逻辑覆盖标准
-
语句覆盖
-
判定覆盖
-
条件覆盖
-
判定-条件覆盖
-
条件组合覆盖
-
路径覆盖
-
-
覆盖准则覆盖逻辑强度依次增强
,为语句覆盖 < 判定覆盖 < 条件覆盖 < 判断/条件覆盖 < 多重条件覆盖。(后者满足则前者(包括前者的前者)满足除了条件覆盖>判定覆盖之外,例如满足判定覆盖,那一定满足语句覆盖)
17、等价类的概念
- 等价类是指输入域的某个子集,该子集中的每个输入数据对揭露软件中的错误都是等效的,测试等价类的
某个代表值
就等价于对这一类其他值的测试。
(*)18、V模型中四类测试的对象、依据和任务分别是什么
- V模型
- 系统工程->系统测试
- 需求分析->确认测试
- 设计->集成测试
- 编码->单元测试
-
单元测试
根据设计描述,对重要的控制路径进行测试,以发现构件或模块内部的错误 -
集成测试
针对集成的软件系统,主要揭露设计阶段产生的错误 -
确认测试
是根据软件需求规约对集成的软件进行确认,主要揭露不符合需求规约的错误 -
对于基于计算机系统中的软件,还需将它集成到基于计算机的系统中,并进行
系统测试
,以揭露不符合系统工程中对软件要求的错误
19、压力测试与性能测试
- 压力测试
- 强制测试,是在一种
需要非正常数量
、频率
、容量
的方式下执行系统 - 目的是检查系统对非正常情况的承受程度
- 强制测试,是在一种
- 性能测试
- 测试软件在
集成的系统中
的运行性能
- 对
实时系统
和嵌入式系统
尤为重要
- 测试软件在
20、提高可维护性的方法
- 1、确定质量管理目标和优先级
- 2、规范化程序设计风格
- 3、选择可维护性高的程序设计语言
- 4、改进程序文档
- 5、保证软件质量审查方法
(*)21、什么是软件开发模型?列举四个软件开发模型
- 软件开发模型是指软件开发全部过程、活动和任务的结构框架。
- 瀑布模型
- 增量模型
- 螺旋模型
- 喷泉模型
- 原型模型
三、往年卷子简答题
1、结构化的软件需求规格说明书包含哪 4 个内容?
-
软件需求是指包含用户对软件系统在功能、性能、行为、设计约束等方面的期望。
-
结构化的软件需求规格说明书包含
一套分层的数据流图
、一本数据字典(包括实体-关系图)
、一组加工规约
及其他补充材料
(如非功能性需求等)。
(*)2、数据流图的一致性指的是什么?
- 分层数据流图的一致性是指
分层DFD中不存在矛盾和冲突
。 - 分层数据流图一致性检查主要包括:
(1) 父图与子图的平衡。
(2) 数据守恒。
(3) 局部文件。
(4) 一个加工的输出数据流不能与该加工的输入数据流同名。
3、衡量模块独立性的两个定性标准是什么?这两个标准的定义分别是什么?
-
衡量模块独立性的两个定性标准是内聚和耦合。
-
耦合是指对一个软件结构内不同模块彼此之间互相依赖(连接)的紧密程度;而内聚则标志一个模块内部各个元素彼此结合的紧密程度
-
关于模块独立性,软件设计追求的目标是高内聚低耦合。
4、可行性分析主要包含哪 3 个方面的分析,并说明每一个分析要解决什么问题
- 可行性分析包括 :
1)经济可行性分析:主要进行成本效益分析,从经济角度确定系统是否值得开发。
2)技术可行性分析:主要根据系统的功能、性能、约束条件等,分析在现有资源和技术
条件下系统能否实现。
3)法律可行性分析:主要研究系统开发过程中可能涉及到的合同、侵权、责任以及各种
与法律相抵触的问题。
5、简述结构化程序设计方法的基本特点
- 结构化程序设计方法的基本特点有:
1)仅使用顺序、选择和循环三种基本控制结构
2)每个代码块只有一个入口和一个出口
3)采用自顶向下,逐步求精的设计方法
4)整个程序模块化
6、自顶而下渐增测试与自底而上渐增测试各有何优、缺点?
自顶而下集成测试
-
优点:
-
1、不需要驱动模块;
-
2、能尽早对
程序的主要控制
和决策机制
进行检验,能较早发现整体性的错误; -
3、
深度优先的自顶向下集成
能较早对某些完整的程序功能
进行检查
-
-
缺点:
-
1、测试时
低层模块用桩模块替代
,不能反映真实情况; -
2、重要数据不能及时回送到上层模块
-
自底而上集成测试
-
优点:
-
1、
易组织,不需要桩模块
,所以容易组织测试; -
2、效率高,将
整个程序结构
分解成若干个簇
,对同一层次的簇可并行进行测试,可提高效率
-
-
缺点:
- 1、整体性的错误发现得较晚
(*)7、什么是软件维护?有哪几种类型的软件维护,请简要说明。说出 3 条软件维护困难的原因
- 软件维护:软件维护是指软件系统交付使用以后,为了改正错误或满足新的需要而修改软件的过程
-
纠错性维护:为了改正软件系统中的错误,使软件能够满足预期的正常运行状态的要求而进行的维护
-
适应性维护:为了使软件适应内部或外部环境变化,而去修改软件
-
改善性维护:满足使用过程中用户提出增加新功能或修改已有功能的建议的维护
-
预防性维护:为了使计算机程序能够被更好地纠错、适应和增强,以提高软件地可维护性、可靠性等,为以后进一步改进软件打下良好基础而修改软件的活动
-
- 软件维护困难的原因:
- 1、理解别人的代码通常非常困难
- 2、软件人员的流动性,使得软件维护时很难与原开发人员沟通
- 3、没有文档或文档严重不足
- 4、软件设计时,欠考虑软件的可修改性,可扩展性
- 5、频繁的软件升级,要追踪软件的演化变得很困难,使软件难以修改
8、提高程序代码的可理解性,需要注意哪些主要问题?
- 1、书写详细正确的文档
- 2、采用结构化程序设计
- 3、书写源程序的内部文档
- 4、使用良好的编程语言
- 5、具有良好的程序设计风格
9、用户界面设计的三大原则
- 1、置界面于用户的控制之下
- 2、减少用户的记忆负担
- 3、保持界面的一致性