软件工程基础题库及答案_第1页
软件工程基础题库及答案_第2页
软件工程基础题库及答案_第3页
软件工程基础题库及答案_第4页
软件工程基础题库及答案_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程基础题库及答案一、单项选择题(共10题,每题1分,共10分)在软件工程中,“软件危机”这一术语主要指的是什么问题?A.软件开发的成本过低B.软件的质量、成本和进度难以控制C.软件编程语言种类过多D.软件用户数量增长过快答案:B解析:软件危机是指在计算机软件开发、维护过程中所遇到的一系列严重问题,主要表现为开发的软件质量差、成本难以控制、开发进度难以预测和维护困难等。选项A和D描述的情况与软件危机的核心问题不符;选项C是技术发展的现象,并非危机的本质。下列哪一项不是软件生命周期模型?A.瀑布模型B.螺旋模型C.敏捷模型D.数据库模型答案:D解析:软件生命周期模型是描述软件开发过程中各个阶段如何组织的方法论框架。瀑布模型、螺旋模型和敏捷模型都是经典的软件生命周期模型。数据库模型是数据组织的方式,属于数据设计范畴,不是描述软件开发过程的模型。在需求分析阶段,用于描述系统与外部实体之间交互的图形化工具是?A.数据流图B.程序流程图C.实体关系图D.状态转换图答案:A解析:数据流图(DFD)是结构化分析方法中用于描绘系统逻辑模型的图形工具,它展示了数据在系统内部的流动、存储和处理过程,以及系统与外部实体(如用户、其他系统)之间的数据交互。程序流程图描述程序的控制流程;实体关系图描述数据实体及其关系;状态转换图描述对象状态的变化。软件设计中的“高内聚、低耦合”原则主要目的是什么?A.提高代码的执行速度B.降低模块间的依赖,提高模块的独立性C.增加软件的复杂度D.减少代码的注释量答案:B解析:“高内聚”是指一个模块内部各元素彼此结合的紧密程度高,功能相关性强;“低耦合”是指模块之间相互依赖的程度低。遵循该原则可以提高软件模块的独立性,使软件更易于理解、开发、测试和维护,并增强其可复用性。它不直接提高执行速度,也不是为了增加复杂度或减少注释。白盒测试技术主要依据的是?A.软件的需求规格说明书B.软件的详细设计和源代码结构C.用户的操作手册D.软件的界面设计答案:B解析:白盒测试,又称结构测试或逻辑驱动测试,测试者需要了解被测程序的内部结构、逻辑路径和代码细节。因此,其依据主要是软件的详细设计和源代码。选项A和C是黑盒测试(功能测试)的主要依据;选项D是界面测试的关注点。在软件项目管理中,用于评估项目规模、成本和工作量的常用模型是?A.PERT图B.Gantt图C.COCOMO模型D.鱼骨图答案:C解析:COCOMO(构造性成本模型)是一种用于估算软件开发工作量、成本和进度的参数化模型。PERT图和Gantt图是用于项目进度计划和管理的工具。鱼骨图(因果图)是用于质量管理和问题分析的工具。下列哪一项属于软件维护中的“完善性维护”?A.修改软件中发现的错误B.为使软件适应新的硬件或软件环境而进行的修改C.为改进软件的性能或可维护性而进行的修改D.为满足用户新增功能需求而进行的修改答案:C解析:软件维护通常分为四类:改正性维护(修复错误)、适应性维护(适应环境变化)、完善性维护(改进性能或可维护性)和预防性维护(为未来改进做准备)。选项A是改正性维护;选项B是适应性维护;选项D通常属于完善性或新功能开发范畴,但严格来说,新增功能需求更偏向于完善性维护或二次开发。面向对象方法中的“多态性”指的是?A.一个类可以派生出多个子类B.一个对象可以属于多个类C.不同对象对同一消息可以做出不同的响应D.将数据和对数据的操作封装在一起答案:C解析:多态性是指允许不同类的对象对同一消息(方法调用)作出不同的响应。选项A描述的是继承;选项B描述的是多重继承(某些语言支持);选项D描述的是封装。配置管理的主要活动不包括?A.版本控制B.变更控制C.系统测试D.配置状态报告答案:C解析:软件配置管理是标识、组织和控制修改的技术,其主要活动包括配置项标识、版本控制、变更控制、配置审计和配置状态报告。系统测试是软件测试阶段的活动,属于质量保证范畴,不属于配置管理的核心活动。在敏捷开发方法中,“用户故事”的主要作用是什么?A.详细描述软件的系统架构B.从用户角度描述软件需要实现的功能价值C.定义软件开发的技术规范D.记录软件测试的用例答案:B解析:用户故事是敏捷开发中用来捕获需求的一种轻量级技术,它以简洁的自然语言从用户(或角色)的角度出发,描述其需要软件提供什么功能以及为何需要,格式通常为“作为[某角色],我希望[做某事],以便[达成某个价值]”。它不描述技术细节、架构或测试用例。二、多项选择题(共10题,每题2分,共20分)下列哪些属于软件工程的基本目标?()A.开发出满足用户需求的软件B.提高软件开发的效率C.降低软件开发的成本D.保证软件的可维护性答案:ABCD解析:软件工程的基本目标是在给定成本、进度的前提下,开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性和可互操作性并满足用户需求的软件产品。选项A是核心目标,B和C是经济性目标,D是保证软件长期生命力的重要质量目标。以下关于瀑布模型的描述,正确的有?()A.阶段划分明确,便于项目管理B.需求变更在后期难以处理C.适用于需求明确且稳定的项目D.强调早期原型构建和用户反馈答案:ABC解析:瀑布模型是一种线性的、顺序的软件开发模型,将生命周期划分为需求、设计、编码、测试、维护等固定阶段。其优点是阶段清晰,文档驱动,便于管理。缺点是缺乏灵活性,后期需求变更代价大,因此更适用于需求明确、技术成熟的项目。选项D描述的是原型模型或迭代模型的特点。在结构化分析中,常用的建模工具有?()A.数据字典B.数据流图C.状态转换图D.类图答案:ABC解析:结构化分析是一种传统的需求分析方法,其核心建模工具包括数据流图(描述数据流和处理)、数据字典(定义数据流和数据存储的细节)和实体关系图(描述数据实体)。状态转换图有时也用于描述系统或实体的状态变化。类图是面向对象分析和设计中的核心工具,不属于传统的结构化分析工具。软件测试的原则包括?()A.测试应尽早、不断地进行B.测试用例应由开发人员自己设计C.穷举测试是不可能的D.杀虫剂悖论:相同的测试用例重复使用会降低发现新缺陷的能力答案:ACD解析:软件测试的基本原则包括:测试应尽早介入并持续进行;测试是为了发现错误,而不是证明程序无错;穷举测试(测试所有可能的输入组合)在实践中不可行;测试用例应由测试人员设计,以保持客观性(因此B错误,开发人员自测存在思维定势);“杀虫剂悖论”指出,重复相同的测试会发现越来越少的缺陷。下列属于软件设计阶段产物的有?()A.概要设计说明书B.详细设计说明书C.测试计划D.模块接口规格说明答案:ABD解析:软件设计阶段通常分为概要(总体)设计和详细设计。概要设计说明书描述系统的总体结构、模块划分和接口;详细设计说明书描述每个模块的内部算法和数据结构;模块接口规格说明是设计的重要产出。测试计划通常在需求分析后期或设计阶段开始制定,但其本身是测试活动的指导文件,并非纯粹的设计产物,通常被视为独立的测试文档。关于黑盒测试,下列说法正确的有?()A.又称为功能测试B.不关心程序内部逻辑C.可以测试出程序中的所有逻辑错误D.常用的技术包括等价类划分和边界值分析答案:ABD解析:黑盒测试将软件视为一个不透明的“黑盒”,只关注输入与输出是否符合规格说明,不关心内部实现逻辑,因此也称为功能测试。等价类划分和边界值分析是其典型技术。由于不查看内部逻辑,黑盒测试无法发现程序内部的逻辑错误、内存泄漏等问题(这些是白盒测试的强项),因此C选项错误。软件项目管理中,影响项目进度的主要风险可能来自?()A.需求不断变化B.技术方案不可行C.人员流动频繁D.客户配合不积极答案:ABCD解析:软件项目进度风险来源广泛:需求风险(如A,需求频繁变更导致返工)、技术风险(如B,采用不成熟技术导致问题)、人员风险(如C,关键人员离职)、管理风险(如资源分配不当)、客户风险(如D,客户反馈延迟或决策缓慢)和环境风险(如政策变化)等。以下哪些是提高软件可维护性的有效手段?()A.编写详细、清晰的文档B.采用良好的编程风格和命名规范C.设计时遵循高内聚、低耦合原则D.在开发后期集中进行代码重构答案:ABC解析:软件可维护性依赖于开发全过程的质量控制。A、B、C都是被实践证明的有效手段:好文档便于理解;好代码风格便于阅读;好设计(高内聚低耦合)便于修改和测试。选项D存在问题,在开发后期集中进行大规模重构风险极高,可能引入新错误并影响进度,重构应是持续、小步进行的过程。面向对象的基本特征包括?()A.抽象B.封装C.继承D.多态答案:ABCD解析:面向对象编程的四大基本特征是:抽象(提取关键特征,忽略次要细节)、封装(将数据和行为捆绑,隐藏内部细节)、继承(子类继承父类的特征和行为,实现代码复用)、多态(同一操作作用于不同对象产生不同行为)。在版本控制系统中,分支(Branch)的主要用途包括?()A.隔离不同开发者的工作B.同时进行多个功能或版本的开发C.记录每一次代码提交的日志D.保留软件发布版本的稳定状态答案:ABD解析:版本控制中的分支是代码库的一个独立副本,允许开发在不干扰主线(如主分支)的情况下进行。其主要用途包括:A,隔离开发,避免互相影响;B,并行开发多个功能或修复不同版本的Bug;D,为发布版本创建稳定分支,便于维护和发布补丁。选项C“记录提交日志”是版本控制系统的基本功能,不是分支特有的用途。三、判断题(共10题,每题1分,共10分)软件就是程序,开发软件就是编写程序。答案:错误解析:这是一个对软件概念的常见误解。软件不仅仅是程序,它还包括相关的文档和数据。软件开发是一个系统的工程过程,包括需求分析、设计、编码、测试、维护等一系列活动,编码(编写程序)只是其中一个环节。快速原型模型的主要目的是为了替代传统的需求分析文档。答案:错误解析:快速原型模型的主要目的是通过快速构建一个可运行的原型,让用户尽早体验和反馈,从而更准确、更完整地理解和确认需求。它是对传统需求获取方法的补充和增强,而不是为了完全取代需求规格说明书。最终,清晰、完整的需求文档仍然是后续设计和开发的重要依据。模块的扇出数是指直接调用该模块的上级模块的个数。答案:错误解析:模块的扇出是指一个模块直接控制(调用)的下级模块的数目。题目描述的是模块的扇入,即有多少个上级模块直接调用它。这是两个不同的结构度量指标。在软件测试中,集成测试的主要目的是发现模块内部的错误。答案:错误解析:集成测试是在单元测试之后,将多个模块按照设计组合起来进行测试。其主要目的是发现模块之间接口和交互时产生的错误,以及全局数据结构、系统架构等方面的问题。发现模块内部的错误是单元测试的主要目的。软件配置项是软件生命周期中产生的所有文档和程序。答案:错误解析:软件配置项是软件配置管理的基本单位,是软件生命周期中产生的、作为独立实体进行管理的信息项。它不仅仅是文档和程序,还包括数据、环境配置、工具等。并且,并非所有产生的信息都是配置项,通常只将那些重要的、需要受控管理的部分识别为配置项。McCabe环路复杂度越高,说明程序的控制结构越复杂,可理解性和可测试性可能越差。答案:正确解析:McCabe环路复杂度(V(G))是一种基于程序控制流图的软件度量,用于衡量程序逻辑的复杂性。V(G)的值越高,意味着程序中的独立路径越多,控制结构越复杂。这通常预示着程序更难以理解、测试和维护,出错的概率也可能更高。敏捷开发宣言强调“可工作的软件胜过面面俱到的文档”,这意味着在敏捷项目中不需要编写任何文档。答案:错误解析:敏捷宣言的价值之一是“可工作的软件高于详尽的文档”,这强调的是工作的核心目标是交付有价值的软件,反对为了文档而文档的形式主义。但这绝不意味着完全不要文档。敏捷项目仍然需要必要的、轻量的文档(如用户故事、架构草图、API说明等)来支持沟通和知识传递,只是形式更灵活、价值导向更强。软件维护的成本通常低于软件开发成本。答案:错误解析:大量研究表明,在软件整个生命周期中,维护阶段(包括改正、适应、完善和预防)所花费的成本通常远高于最初的开发成本,可能占到总成本的百分之六十到百分之八十。因此,提高软件的可维护性对于控制软件总成本至关重要。在面向对象设计中,一个类的职责应该尽可能多,以提高代码的复用率。答案:错误解析:这与面向对象设计原则中的“单一职责原则”相悖。单一职责原则要求一个类只应有一个引起它变化的原因,即一个类只负责一项明确的职责。如果一个类承担了过多职责,它会变得臃肿、难以理解和维护,并且一个职责的变化可能会影响到其他不相关的功能,反而降低了复用性和稳定性。软件质量保证活动贯穿于软件开发的整个生命周期。答案:正确解析:软件质量保证是一套系统性的活动,旨在为软件产品满足既定质量要求提供信心。它不仅仅是测试,而是从项目启动、需求、设计、编码、测试到维护的全过程,通过制定计划、过程评审、产品审计、缺陷预防等多种手段来确保过程质量和产品质量。四、简答题(共5题,每题6分,共30分)简述软件工程的三要素及其关系。答案:第一,过程:指软件生命周期中一系列有序的活动集合,为软件开发提供了路线图和框架,如瀑布模型、敏捷过程等。它定义了“如何做”。第二,方法:指在软件开发过程中为完成各项任务所采用的技术手段,包括需求分析方法、设计方法、编程方法、测试方法等。它提供了“用什么工具和技术做”。第三,工具:指为过程和方法提供自动化或半自动化支持的软件环境,如集成开发环境、版本控制系统、测试工具等。它是“做的辅助手段”。三者关系:过程将方法和工具结合成一个有机整体。好的方法需要合适的工具来高效实施,而工具的设计和使用又受到过程和方法的影响。三者相辅相成,共同支撑高质量软件的开发。简述结构化程序设计的基本要点。答案:第一,采用自顶向下、逐步求精的设计方法:将复杂问题逐层分解为更小、更易处理的子问题,直到可以用简单的程序结构实现。第二,使用三种基本控制结构:任何程序逻辑都可以且应该仅由顺序结构、选择结构(if-else)和循环结构(while,for)这三种基本结构组合而成。这避免了使用无条件跳转(goto)语句,使程序结构清晰。第三,模块化设计:将程序划分为若干个功能独立、接口明确的模块。每个模块应具有高内聚性,模块间应保持低耦合性,以提高程序的可靠性、可读性和可维护性。简述黑盒测试与白盒测试的主要区别。答案:第一,测试依据不同:黑盒测试以软件的需求规格说明书和用户手册为依据,不关心内部实现;白盒测试以程序的内部逻辑结构(源代码)为依据。第二,测试目的不同:黑盒测试主要验证软件功能是否符合需求,检查输入输出是否正确;白盒测试主要验证程序内部结构、逻辑路径和代码细节是否正确。第三,测试方法不同:黑盒测试常用等价类划分、边界值分析、因果图等方法设计用例;白盒测试常用逻辑覆盖(语句、分支、条件、路径覆盖等)方法设计用例。第四,测试阶段不同:黑盒测试通常用于系统测试和验收测试;白盒测试通常用于单元测试和集成测试。两者互补,共同确保软件质量。简述软件配置管理的主要活动。答案:第一,配置项标识:识别出需要受控管理的软件配置项(如需求文档、设计文档、源代码、测试用例等),并为其定义唯一的标识符。第二,版本控制:记录配置项的历史版本,支持对任意版本的检索、回溯和比较,管理并行开发。第三,变更控制:建立正式的流程来评估、批准、实施和验证对配置项的变更请求,确保变更有序进行。第四,配置状态报告:记录和报告配置项的状态、变更历史以及当前基线情况,为项目管理提供决策信息。第五,配置审计:独立地验证配置项是否符合其规格说明,以及配置管理记录是否准确、完整,确保配置管理过程得到遵循。简述敏捷开发方法的核心价值观(敏捷宣言)。答案:第一,个体和互动高于流程和工具:强调团队成员间的直接、有效沟通比僵化的流程和复杂的工具更重要。第二,可工作的软件高于详尽的文档:认为交付可以运行的、有价值的软件是首要目标,反对过度文档化。第三,客户合作高于合同谈判:提倡与客户紧密、持续地合作,共同应对变化,而不是固守合同条款。第四,响应变化高于遵循计划:认为能够快速、灵活地响应需求变化比严格按初始计划执行更有价值。这四点价值观并非否定右边项的价值,而是强调在两者冲突时,左边项具有更高的优先级。五、论述题(共3题,每题10分,共30分)结合一个具体的软件项目场景(如开发一个在线购物系统),论述需求分析阶段的重要性以及可能遇到的挑战和应对策略。答案:论点:需求分析是软件工程的基石,直接决定了项目的成败。在开发“在线购物系统”这类项目中,其重要性尤为突出,同时也会面临诸多挑战。论据与论述:首先,需求分析的重要性体现在:第一,它是连接用户与开发者的桥梁。对于在线购物系统,必须准确理解用户(买家、卖家、管理员)的核心诉求,如商品浏览、购物车、下单支付、订单管理、后台商品上架等功能,任何误解都可能导致开发出无用或错误的功能。第二,它是后续所有开发活动(设计、编码、测试)的依据。清晰、无歧义的需求规格说明书是设计系统架构、数据库和接口的前提。第三,它是控制项目范围、成本和进度的基础。明确的需求边界可以防止项目范围无限制蔓延(即“范围蔓延”)。其次,在该项目中可能遇到的挑战包括:第一,需求获取困难。用户可能无法清晰表达所有需求,或存在隐性需求(如对系统并发性能的期望)。第二,需求频繁变更。市场变化或用户新想法可能导致需求在开发过程中不断变化,例如突然要求增加“直播带货”功能。第三,不同用户(买家、卖家)的需求可能存在矛盾或优先级冲突。第四,需求表述可能存在二义性,导致开发人员理解偏差。应对策略:第一,采用多种需求获取技术。除了访谈,可以运用问卷调查、原型演示(快速做出界面原型让用户体验)、现场观察用户现有购物流程等方法。第二,建立有效的变更管理流程。任何需求变更必须经过评估(对成本、进度的影响)、批准后才能实施,并与客户充分沟通变更代价。第三,进行需求优先级排序。与所有利益相关者共同确定功能的优先级(如使用MoSCoW法则:必须有、应该有、可以有、不会有),优先实现高价值核心功能。第四,使用规范化的需求描述语言和模型。结合自然语言与图形化模型(如用例图、活动图)来描述需求,并组织需求评审会,邀请用户和开发人员共同确认,以减少歧义。结论:总之,在“在线购物系统”项目中,必须高度重视需求分析阶段,通过系统化、科学化的方法和严格的流程管理来应对挑战,才能为项目的成功奠定坚实的基础,避免后期巨大的返工成本和项目失败风险。论述在软件开发中,为什么需要遵循“设计模式”?请结合至少两种具体的设计模式(如工厂模式、观察者模式),说明其解决的问题和应用场景。答案:论点:设计模式是针对软件设计中常见问题的、可复用的优秀解决方案。遵循设计模式可以提高代码的可复用性、可维护性和可扩展性,促进开发人员之间的高效沟通。论据与论述:首先,使用设计模式的意义在于:第一,提供经过验证的解决方案。设计模式是前辈开发人员经验的结晶,直接采用这些模式可以避免重复探索,提高设计质量。第二,提升代码的可读性和可维护性。模式提供了标准的命名和结构,使其他开发者更容易理解设计意图。第三,增强系统的灵活性和可扩展性。许多模式(如策略模式、装饰器模式)的核心思想就是封装变化,使系统更容易应对未来的需求变更。其次,以“工厂模式”和“观察者模式”为例进行具体说明:工厂模式(以简单工厂为例):它解决的问题是对象的创建逻辑过于复杂或需要统一管理的情况。在场景上,假设在线购物系统中需要根据用户支付方式(支付宝、微信支付、银行卡)创建不同的支付处理器对象。如果不使用工厂模式,创建这些对象的代码可能会散落在多个地方,且当新增支付方式时需要修改所有创建代码。使用工厂模式后,可以定义一个“支付工厂”类,它根据传入的参数(如“alipay”)来负责创建对应的支付处理器对象。这样,客户端代码无需关心具体的创建细节,实现了创建逻辑的封装和集中管理,符合“开闭原则”(对扩展开放,对修改关闭)。观察者模式:它解决的问题是对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都能自动得到通知并更新。在场景上,考虑在线购物系统中的商品库存管理。当某个热门商品库存数量发生变化时,需要自动触发多种行为:更新前端商品页面的显示、通知已设置“到货提醒”的用户、可能触发补货逻辑等。这里,库存对象是“被观察者”(Subject),页面更新模块、用户通知模块、补货模块都是“观察者”(Observer)。使用观察者模式,库存对象只需维护一个观察者列表,并在库存变化时遍历列表调用每个观察者的更新方法。这样就解耦了库存对象与具体更新逻辑之间的关系,新增一种通知方式(如发送短信)只需新增一个观察者并注册即可,无需修改库存对象的核心代码,极大地提高了系统的可扩展性。结论:综上所述,设计模式并非僵化的教条,而是应对复杂软件设计中特定问题的强大工具箱。像工厂模式和观察者模式这样,它们通过提供优雅的抽象和解耦方案,使得软件架构更加清晰、健壮和易于演化。在项目中有意识地识别和应用恰当的设计模式,是软件工程师专业能力的重要体现。论述软件测试在软件质量保证体系中的地位和作用,并比较单元测试、集成测试和系统测试的主要目标和测试重点。答案:论点:软件测试是软件质量保证体系中至关重要且不可替代的一环,它通过执行软件来发现缺陷,为评估软件质量提供直接依据。单元测试、集

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论