目录
8. 软件生命周期划分为( )三个阶段,而每一阶段又可分为若干更小的阶段。
10. 在软件维护的内容中,占维护活动工作量比例最高的是( )。
16. 一个模块把数值作为参数传送给另一个模块,这种耦合方式称为( )。
17. 变换流的DFD由三部分组成,不属于其中一部分的是( )。
24. 需求分析和系统设计是最复杂的两个阶段,因此软件生命周期中时间最长的阶段一般就是两者之一。
26. 设计用户界面只需要计算机科学的理论和知识,而不一定需要认知心理学以及人-机工程学、语言学等学科的知识。
29. 软件设计也可看作将需求规格说明逐步转换为软件源代码的过程。
31. 软件需求分析的过程也称之为需求开发,请描述需求开发包括哪几个步骤?
32. 概述瀑布模型、原形模型、增量模型、螺旋模型分别适用于什么项目的开发?
33. 写出模块内聚和耦合由低到高的七个层次。关于内聚和耦合的设计原则是什么?
34. 概述在软件测试执行期间,按顺序要进行哪四个阶段的测试及主要测试内容。
选择前一小题软件结构图中的一个过程,绘制N-S图描述其逻辑处理过程。要求所选过程不能是注册、登录、用户管理等通用功能,必须是与健康码业务相关的功能。
单项选择题
1. 数据字典是对如下内容的描述( )。
A) 数据加工、数据存储、数据流、数据字段
B) 数据加工、数据存储、数据流、数据元素
C) 数据加工、数据存储、数据流、数据项
D) 数据加工、数据存储、数据流、数据起点和终点
参考答案:C
解析:定义问题,不过我一直觉得数据元素和数据项是类似的,硬要说的话是个被包含关系
数据字典的内容:
- 数据加工(Data Processing):描述数据在系统中的处理过程。
- 数据存储(Data Storage):描述数据存储在系统中的位置和结构。
- 数据流(Data Flow):描述数据在系统中的流动路径。
- 数据项(Data Elements):描述数据的基本单位,包括数据项的名称、类型、取值范围和含义。
2. 结构化软件需求分析模型不包括( )。
A) 数据字典
B) 功能模型
C) 用例模型
D) 行为模型
参考答案:C
解析:数据需求分析的模型实际就是主要集中在功能和数据的组织和描述,那传统包括的就是数据字典、功能模型和行为模型。用例模型是UML里面的一种技术,是描述系统的功能需求和用户交互的
3. 软件工程是指导计算机软件开发和( )的一门工程学科。
A) 分析
B) 设计
C) 编程
D) 维护
参考答案:D
解析:开发和维护成套的,分析、设计、编程实际上可以算作开发的一部分了
4. 最适合风险管理的软件开发过程模型是( )。
A) 瀑布模型
B) 增量模型
C) 螺旋模型
D) 快速原型模型
参考答案:C
解析:
你会发现每个时期都会有风险分析的存在,但其他选项是没有这么全面的
5. ( )不是软件危机的突出表现。
A) 对软件开发成本和进度的估计常常很不准确
B) 无法完成功能复杂的软件
C) 用户对“已完成的”软件系统不满意现象经常发生
D) 软件产品的复杂性增加,可靠性、质量却在下降
参考答案:B
解析:常见的表现:
- 对软件开发成本和进度的估计常常很不准确。
- 用户对“已完成的”软件系统不满意现象经常发生。
- 软件产品的复杂性增加,可靠性、质量却在下降。
所以直接选B,功能复杂不代表是软件危机,软件危机关心的是开发过程中的质量问题
6. 软件工程三要素不包括 ( )。
A) 对象
B) 过程
C) 工具
D) 方法
参考答案:A
解析:定义:软件工程的三要素是过程、方法、工具
7. 原型模型的主要特点之一是( )。
A) 开发完毕才见到产品
B) 及早提供工作软件
C) 及早提供全部完整软件
D) 对需求变化适应性差
参考答案:B
解析:A、B选项都太极端了,D完全错,原型模型正是为了适应需求变化而设计的,它通过不断的迭代和用户反馈来完善需求。只有B选项算是折中的表达了
8. 软件生命周期划分为( )三个阶段,而每一阶段又可分为若干更小的阶段。
A) 软件定义、软件开发、软件维护
B) 需求分析、系统设计、编程实现
C) 软件计划、软件开发、软件部署
D) 软件编程、软件测试、软件运行
参考答案:A
解析:软件的生命周期就是定义、开发、维护
BCD选项本质都是软件开发的子阶段,排除。
9. 瀑布模型的关键不足在于( )。
A) 过于简单
B) 不能适应需求的动态变更
C) 过于灵活
D) 各个阶段需要进行评审
参考答案:B
解析:瀑布模型:
这种模型你一往下面走就一泻千里,想往回头就得走到开头去,开发中的需求变更一般是不能实时更新的
10. 在软件维护的内容中,占维护活动工作量比例最高的是( )。
A) 改正性维护
B) 适应性维护
C) 预防性维护
D) 完善性维护
参考答案:D
解析:完善指的就是改进和增强。真要细谈的话ABC都占不了多少时间,D属于长期性的工作
11. 软件维护是指( )。
A) 维护软件的正常运行
B) 软件的配置更新
C) 对软件的改进,适应和完善
D) 软件开发期的一个阶段
参考答案:C
解析:A描述的是运行维护,本质上是改进;B的配置更新本质上是适应;D完全是对不上
所以C才是一个高度概括
12. 关于软件维护的说法错误的是( )。
A) 软件维护是软件生命周期中占用时间最长的一个阶段
B) 软件维护不只是修改软件中的错误
C) 软件维护对于开发商来说是无利可图的
D) 在编码过程中添加适当的注释,可以降低软件维护的难度
参考答案:C
解析:直接看语义就好了,就你C毛病最多
13. 为了提高软件的可维护性,在编码阶段应注意( )。
A) 保存测试用例和数据
B) 提高模块的独立性
C) 避免文档的副作用
D) 养成好的程序设计风格
参考答案:D
解析:A指的是测试,跟编码没关系;B是设计方面的;C在讲文档,跟我代码有什么关系呢
D、比如写注释这样就是好的程序设计风格
14. 软件可行性研究一般不考虑( )。
A) 是否有足够的人员和相关的技术来支持系统开发
B) 待开发的软件是否会有质量问题
C) 是否有足够的工具和相关的技术来支持系统开发
D) 待开发软件是否有市场、经济上是否合算
参考答案:B
解析:可行性就分成那几个部分:技术、时间、社会、经济、法律等等,质量问题属于编码时产生的问题
15. 可行性分析中,系统流程图用于描述( )。
A) 新系统
B) 当前逻辑模型
C) 目标系统
D) 当前运行系统
参考答案:D
解析:死记,系统流程图就是通常用于描述当前运行系统的情况。
16. 一个模块把数值作为参数传送给另一个模块,这种耦合方式称为( )。
A) 数据耦合
B) 公共耦合
C) 控制耦合
D) 特征耦合
参考答案:A
解析:定义问题,跟数值相关,其实只有A比较相符;公共耦合就是多个模块共享,比如全局变量;控制耦合就是在一个模块里面调用另一个模块的功能;特征耦合比较抽象,我理解的是就像编写函数的数据类型作为分类的关键字一样。
17. 变换流的DFD由三部分组成,不属于其中一部分的是( )。
A) 事务中心
B) 变换中心
C) 输入流
D) 输出流
参考答案:A
解析:DFD图就是数据流图,输入,变换、输出三部分。事务中心倾向于事务处理和逻辑,和数据处理的关系不是很大了
18. 软件设计在下面哪个阶段进行( )。
A) 编码
B) 可行性研究
C) 维护
D) 需求分析
参考答案:D
解析:不知道谁选的C,软件设计肯定是在要在编码和维护之前,需求分析之后了,但是可行性研究还在需求分析之前,所以综合下来选D最稳
19. 详细设计的任务是确定每个模块的( )。
A) 算法
B) 功能
C) 调用关系
D) 输入输出数据
参考答案:A
解析:详细设计也是软件设计的部分,但是硬记比较好,B是肯定排除的,这是需求分析的工作
20. 下面说法正确的是( )。
A) 经过测试没有发现错误说明程序正确
B) 测试的目标是为了证明程序没有错误
C) 成功的测试是发现了迄今尚未发现的错误的测试
D) 成功的测试是没有发现错误的测试
参考答案:C
解析:A、太绝对了
B、也绝对了,是为了尽量发现错误以求改进
D、测出错误才是好测试
判断题
21. 原型化开发方法包括生成原型和实现原型两个步骤。
A) 正确
B) 错误
参考答案:A
解析:原型化开发方法就是生成原型和实现原型两个步骤
22. 软件工程过程应该以软件设计为中心,关键是编写程序。
A) 正确
B) 错误
参考答案:B
解析:都说以软件设计为中心了,怎么仅仅只有编写程序是关键呢。
23. 在可行性研究中最难决断和最关键的问题是经济可行性。
A) 正确
B) 错误
参考答案:B
解析:其实我觉得每个可行性都稍微有点最难决断的特征,不过有提到技术可行性是关键。
24. 需求分析和系统设计是最复杂的两个阶段,因此软件生命周期中时间最长的阶段一般就是两者之一。
A) 正确
B) 错误
参考答案:B
解析:前半句不分析,软件生命周期最长的阶段应该是维护阶段才对
25. 编码的依据是详细设计说明书。
A) 正确
B) 错误
参考答案:A
解析:详细设计文档里面就是各模块的描述、算法、数据结构等信息
26. 设计用户界面只需要计算机科学的理论和知识,而不一定需要认知心理学以及人-机工程学、语言学等学科的知识。
A) 正确
B) 错误
参考答案:B
解析:认知心理学,就是好看的皮囊才能吸引用户的,没皮囊谁看你功能好不好呢
27. 单元测试通常由开发人员而不是测试人员来完成。
A) 正确
B) 错误
参考答案:A
解析:单元测试属于开发人员开发的时候顺手就做的事情
28. 瀑布模型的优点之一是,如果发现问题修改的代价很低。
A) 正确
B) 错误
参考答案:B
解析:恰恰相反,需求改变也算作发现问题修改的一环,但这个代价就很大,需要从头来一遍
29. 软件设计也可看作将需求规格说明逐步转换为软件源代码的过程。
A) 正确
B) 错误
参考答案:A
解析:读着没什么毛病
30. 过程描述语言可以用于描述软件的系统结构。
A) 正确
B) 错误
参考答案:B
解析:过程性描述语言都着重在过程了,那当然是用于描述软件的行为的。而描述软件的系统结构应该是结构化描述语言或者图形化建模语言
简答题
31. 软件需求分析的过程也称之为需求开发,请描述需求开发包括哪几个步骤?
答案:
1)需求获取(需求调查):通过调研访谈、实地考察等方法开展的需求收集、发现、提炼等活动。
2)需求分析(需求描述):对获取的需求从系统的角度进行分析与描述。
3)编写文档:撰写需求规格说明书。
4)需求验证(需求评审):对需求文档进行一致性、完整性、现实性与有效性进行验证。
解析:先做调研,再做分析,编写需求规格说明书,最后评审
32. 概述瀑布模型、原形模型、增量模型、螺旋模型分别适用于什么项目的开发?
答案:
1)、瀑布模型适用于软件需求明确,开发技术成熟,工程管理较严格情形。(质量要求高,周期长、开型项目)。
2)、原形模型适合于时间相对较短,需求不太明确,可以先尽快构建成一个原型的应用系统。
3)、增量模型灵活性很强,适用于软件需求不明确、设计方案有一定风险的软件项目,一次投资性投资太高或功能太多也可考虑增量模型。
4)、螺旋模型适合于大型复杂系统,风险较高的项目,吸收了“演化(推进)”概念,可使开发人员和客户了解对每个演化层的风险,继而做出反应。
解析:瀑布模型不用说,需求明确,不会出现需求更改的情况下就用它,而且项目管理要严格,开发过程中不会出现问题
原型模型就是让你能快速拿一个demo出来给客户看,给需求不明确的项目用的
增量模型也是需求不明确时(尤其是加需求的),就一点一点往上面补充,
螺旋模型使用于风险大的系统(看风险分析那么多),多演化多推进,基本每个阶段都能分析演化层的风险,进而调整
33. 写出模块内聚和耦合由低到高的七个层次。关于内聚和耦合的设计原则是什么?
答案:
内聚由低到高的顺序是:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。
耦合由低到高的顺序是:非直接耦合、数据耦合、特征耦合、控制耦合、外部耦合、公共耦合、内容耦合。
设计原则:高内聚低耦合。
解析:死记
34. 概述在软件测试执行期间,按顺序要进行哪四个阶段的测试及主要测试内容。
答案:
1)单元测试:单元模块内和模块之间的功能测试、容错测试、边界测试、约束测试、界面测试、重要的执行路径测试,单元内的业务流程和数据流程等。
2)集成测试:主要测试单元之间的接口,包括集成后的功能测试、业务流程测试、界面测试、重要的执行路径测试、容错测试、边界测试、约束测试及接口测试等。
3)系统测试:是对整个软件系统与运行环境的总测试,对系统的整体性能,功能,安全性,可靠性等方面的综合测试。在系统测试阶段,也可根据需求规格说明书验证软件是否满足需求,称之为确认测试。
4)验收测试:测试产品是否符合最终用户的要求或者合同的要求。验收测试是软件正式交付使用之前的最后一个阶段。
解析:单元测试就是以模块为主的测试,包括功能、容错、边界(边界值)、约束(对应输入类型)、界面、重要的执行路径等测试,还包括模块内的业务流程和数据流程
集成测试则是在单元测试基础上测试单元之间的接口,突出一个集成,还是功能、容错等等
系统测试是对软件系统和运行环境的测试,除了相关的测试,还有验证是否符号需求规格说明书
验收测试,是指项目交付之前的最后一次测试阶段,最后再检查一次符不符合客户要求
分析设计题
为了控制新冠疫情,现计划开发健康码APP,功能如下:通过手机号码注册为个人用户后,可查询健康码状态(红、黄、绿),以及核酸检查结果(阴、阳)。检疫人员批量将个人用户核酸检结果输入系统。若检测结果为阳性则该用户的健康码将转为红码。若个人用户为密接人员,防控办可将其健康码赋为红码或黄码。当个人健康码被赋为黄码后,需短信通知该用户进行核酸检测。当个人健康码被赋为红码后,系统生成隔离任务书给警察对该用户施行隔离。防控办可查询疫情报告。
绘制数据流程图(顶层之下一层)。
解析:直接分析流程:里面出现的实体有个人用户、检疫人员、防控办、警察;数据存储在于用户信息库、健康码状体库、核酸结果库、密接人员信息库、隔离任务库、疫情报告库
那首先顶层设计上如下:
往下扩充则变成:
将前面小题绘制的数据流程图,转化为软件结构图。
答案:生成的软件结构图
选择前一小题软件结构图中的一个过程,绘制N-S图描述其逻辑处理过程。要求所选过程不能是注册、登录、用户管理等通用功能,必须是与健康码业务相关的功能。
答案:这里我取查询健康码吧
我随便画的,不要拷打我
论述题
35. 新冠疫情下,某校急需一款在线教学系统。时间紧任务重。由于你曾在大学阶段的软件工程科目取得了优异成绩,因而获得了这一机会被安排为项目经理负责该项目的开发任务,请结合该系统的业务、所学的软件工程知识,论述你开发该项目的过程,要求不少于500字。
我这里拿gpt-4o跑一个论述来,感觉这种题只要能有自己的观点应该都好得分:
作为项目经理,我将负责开发一个在线教学系统,以应对新冠疫情下的紧急需求。整个开发过程将严格按照软件工程的标准流程,包括可行性研究、需求分析、概要设计、详细设计、编码实现、测试和维护等阶段。以下是详细的开发过程分析。
### 一、可行性研究
在项目启动之初,我们首先进行可行性研究。通过对当前市场需求、技术可行性、经济可行性和时间可行性的评估,我们确定该项目在技术上可以实现,并且在经济和时间上也是可行的。通过与校方和教学人员的初步沟通,我们确认在线教学系统的需求紧迫且具备高优先级,项目必须快速上线以满足教学需求。
### 二、需求分析
可行性研究完成后,我们进入需求分析阶段。通过与校方领导、教学人员、学生等利益相关者进行详细的沟通,我们收集并确定了系统的功能需求和非功能需求。功能需求包括用户注册与登录、课程管理、在线直播授课、作业布置与提交、考试与测评、讨论区、消息通知等;非功能需求包括系统的性能要求、安全要求、可扩展性和易用性等。通过需求分析文档(SRS)的编写,我们确保所有的需求被准确记录和确认。
### 三、概要设计
在概要设计阶段,我们对系统进行模块划分,确定系统的总体结构。系统主要包括用户管理模块、课程管理模块、在线直播模块、作业与考试模块、讨论区模块和通知模块等。我们将系统架构设计为基于微服务的架构,以提高系统的可扩展性和维护性。概要设计文档中详细描述了各模块的功能和相互关系,并确定了关键技术选型,如选择合适的直播技术和数据库系统。
### 四、详细设计
详细设计阶段,我们对每个模块进行详细的设计,确定每个模块的内部结构和实现方式。详细设计文档(DDD)将包括模块的类图、时序图、数据库设计、接口设计等。通过详细设计,我们确保每个模块的实现细节清晰可见,并为后续的编码工作提供详细指导。
### 五、编码实现
编码阶段,我们按照详细设计文档进行系统的编码实现。为了提高开发效率和代码质量,我们采用了敏捷开发的方法,将开发过程划分为多个迭代,每个迭代都完成一定功能的实现并进行测试。开发过程中,我们使用版本控制工具(如Git)进行代码管理,确保团队成员协同工作。代码编写过程中,我们严格遵循编码规范和最佳实践,以提高代码的可读性和可维护性。
### 六、测试
测试阶段,我们进行单元测试、集成测试、系统测试和验收测试。通过单元测试,我们确保每个模块的功能正确性;通过集成测试,我们验证模块之间的接口和交互;通过系统测试,我们确保整个系统的功能和性能达到预期;通过验收测试,我们邀请校方和教学人员进行系统体验,确认系统满足所有需求。测试过程中,我们使用自动化测试工具提高测试效率,并记录和跟踪所有发现的问题,确保问题在发布前得到解决。
### 七、维护
系统上线后,我们进入维护阶段。通过监控系统运行情况,我们及时发现并解决运行中的问题。我们还根据用户反馈,不断优化系统性能和用户体验,并根据需求变化进行功能扩展。维护阶段包括定期的系统更新、漏洞修复和技术支持等。
### 总结
通过以上规范的软件工程过程,我们将确保在线教学系统的高质量和高可靠性。在开发过程中,我们结合所学的软件工程知识和最佳实践,通过科学的管理和高效的开发方法,按时交付满足需求的在线教学系统。该系统将为学校在疫情期间的正常教学提供有力支持,同时提升学校的数字化教学水平。