【笔记】软件工程题目整理

前言

可能会考到的软件工程题目,按照章节和题型分类。

简答题

  1. 体系结构设计-模块独立性】举例说明模块之间的耦合以及各个类型的模块内聚,并说明降低耦合和提高内聚的好处
    1)耦合的定义: 耦合度指的是两个模块之间的相关联程度,耦合程度取决于模块之间依赖关系的多少。可以划分为紧密耦合、松散耦合和非耦合。模块耦合有六个级别。
    2)耦合的分类:内容耦合】一个模块实际上修改了另一个模块,被修改的模块完全依赖于修改它的模块。可能的情况有:一个模块修改另一个模块的数据项或代码;【公共耦合】不同模块可以从公共数据存储区来访问和修改数据,比如两个模块都要使用的全局变量;【控制耦合】一个模块通过传递参数或返回代码来控制另一模块的活动;【特征耦合】使用一个复杂的数据结构来进行模块之间的信息传递,并且传递的是该数据结构本身。比如将一个数组传递给另一个模块,该数组只用于计算而非控制;【数据耦合】模块间传递为数据值,比如把一个数值当做参数传递给另一个模块,该数值只用于计算而非控制;【非耦合】两个模块之间没有任何信息传递,比如两个毫无关系的方法。
    3)内聚的定义:内聚是指模块内部各组成成分(数据、功能、内部模块)的关联程度,内聚度越高,模块各成分之间相互联系越密切,与总目标越相关。内聚分为高内聚和低内聚。
    4)内聚的分类:【偶然内聚】模块各部分不相关,只为方便或偶然性原因放在一起。比如强行放在一个类中的没有关系的函数;【逻辑内聚】模块中的各部分只通过代码的逻辑结构相关联,会共享程序状态和代码结构,但相对于数据、功能、目标的内聚比较弱。比如因为有相同的某一个计算步骤而放在一起的两个没有关系的计算;【时间内聚】模块各部分要求在同一时间完成或被同一任务使用而形成关系。比如初始化模块中需要完成变量赋值、打开文件等;【过程内聚】模块内各部分要求按照某个确定的顺序执行一系列功能,模块内功能组合在一起只是为了确保这个顺序。与时间内聚相比,其功能和目标的内聚较强。比如读取文件 --> 修改文件 --> 写回文件这一过程;【通讯内聚】模块内各部分访问和操作同一数据集。比如模块内各部分访问同一实验数据集;【顺序内聚】各部分有输入输出关系、操作同一数据集,并且操作有顺序。比如要首先计算出学生的总分,才能计算出排名,通过排名再计算获得奖学金的学生名单;【功能内聚】在理想情况下,各部分组成单一功能,且每个处理元素对于功能都是必须的,每个元素执行且只执行设计功能,比如一个的计算复杂函数的程序;【信息内聚】功能内聚的基础上调整为数据抽象化和基于对象的设计,面向对象设计的目的是高内聚。
    5)高内聚低耦合优点:增加程序的维护性、移植性、重用性与扩展性。

  2. 【需求分析-需求文档】 需求文档中有哪些主要方面和测试原则?
    1)主要方面: 确定对系统的综合要求;分析系统的数据要求;分析系统的逻辑模型;修正系统开发计划;开发原型系统。
    2)测试原则: 【1】测试完全是不可能的;【2】软件测试只能表明缺陷存在而不能证明软件产品没有缺陷;【3】软件产品中潜在的错误数与已发现的错误数成正比;【4】让不同的测试人员参与到测试工作中;【5】尽早进行测试,使测试贯穿整个软件开发过程;【6】要集中测试容易出错或错误较多的模块。

  3. 系统设计】设计用户界面需要注意哪些方面?
    解答:系统相应时间;用户帮助设施;出错信息处理;命令交互。

  4. 需求分析】为什么一个软件开发的错误源于需求分析,而不是设计编码?验证需求分析的正确性应从哪些方面,如何验证?
    1)需求分析阶段的工作是开发软件系统的重要基础,设计编码就是确定如何具体实现需求分析中的系统并分析实现。由于需求分析是设计编码的前置步骤,具有决策性、方向性、策略性的作用,所以错误源于需求分析而不是设计编码。
    2)一致性: 通过人工技术审查验证、软件工具验证;完整性:在用户的密切合作下完成;现实性:分析可能性、必要时候采用仿真或性能模拟辅助分析;有效性:证明需求有效。

  5. 编写程序】为什么在开发过程中,要统一编码规则,这样做有什么好处?
    1)提高可维护性:好的编码规范可以尽可能的减少软件的维护成本。因为几乎所有软件,在其整个生命周期中,都需要让非最初开发人员来维护。
    2)提高可读性:可以让开发人员尽快地理解新的代码。
    3)提高可重用性:越是规范的代码,被再次使用的可能性就越大。
    4)提高效率:好的代码规范可以提高团队的合作效率。
    5)对编码人员:可以让开发人员养成良好的开发习惯,锻炼更严谨的思维。

  6. 面向对象】简述面向对象的三个要素和五个层次
    1)静态结构(对象模型);交互次序(动态模型);数据变换(功能模型)
    2)自顶向下:主题层、类与对象层、结构层、属性层、服务层
    在这里插入图片描述

  7. 【软件工程】什么是软件危机?它有哪些典型表现?为什么会出现软件危机?
    在这里插入图片描述

  8. 描述Rational统一过程的优缺点
    优点:提高了团队生产力,在迭达的开发过程中,需求管理、基于组建的体系结构、可视化软件建模、验证软件质量及控制软件变更方面、针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供了较大的通用性。
    缺点:RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容,此外,它没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能。

  9. 描述形式化说明技术的优缺点
    优点: 比数据流图更精确,一样易于理解。它能帮助发现其它方法不容易发现的系统描述的不一致、不明确或不完整,有助于增加软件开发人员对系统的理解,因此形式化方法是提供软件系统安全性和可靠性的重要手段。
    缺点:【1】形式化方法中包含的数学理论,限制了大多数程序设计人员的学习和使用【2】认为采用形式化方法会延误项目开发周期、增加开发费用【3】对于一些大型系统难以适用;【4】形式化方法不能保证开发出完全正确的软件【5】缺乏对软件声明周期各个阶段提供全面支持的方法

  10. 为什么要进行需求分析?需求分析对系统有什么要求?
    1)为了开发真正满足客户需求的软件产品,需求分析是软件开发工作获得成功的前提条件。需求分析具有决策性、方向性、策略性的作用,在软件开发工程中具有举足轻重的地位。
    功能需求:指定系统必须提供的服务。
    性能需求:指定系统必须满足的定时约束或者容量约束,通常包括速度、信息量速率、主存容量、磁盘容量、安全性方面等要求。
    可靠性与可用性需求:指定系统的可靠性,可用性,量化了用户可以使用系统的程度。
    出错处理:说明系统对环境错误应该怎么响应。
    接口需求:描述应用系统与它的环境通信的格式。
    逆向需求:说明系统不应该做什么
    将来可能提出的需求:不属于当前系统开发需求,但是可能会是将来提出的需求。

  11. 【需求分析】原型化方法主要用于解决什么问题?试说明这种方法的优缺点
    解答:建立原型的主要原因是为了解决在产品开发的早期阶段需求不确定的问题,用户有时不能确定自己的详细\完整需求;开发者无法确定自己的方案是否真实可行。原型化方法可以帮助获取更多细节。
    优点
    1)明确并完善需求:原型作为一种需求工具,它初步实现所理解的系统的一部分,用户对原型的评价可以指出需求中的许多问题。
    2)探索设计选择方案:原型作为一种设计工具,可以探索不同的用户界面技术,使系统达到最佳的可用性,并且可以评价可能的技术方案。
    3)发展为最终的产品:原型作为一种构造工具,是产品最初子集的完整功能实现,通过一系列小规模的开发循环,你可以完成整个产品的开发。
    缺点
    1)用户看到一个正在运行的原型便以为产品即将完成,他们会要求不再进行产品重建,而只是对原型进行一些修改就交付。由于原型没有考虑软件的总体质量和可维护性,交付原型往往造成"欲速则不达"的情况。
    2)开发人员为了快速构造原型,可能会采用不合适的操作系统或程序设计语言,也可能使用一些效率低的算法。在一段时间的开发之后,他们往往已经习惯了这些选择,于是便在系统中参杂了这些不理想的选择。

  12. 【软件测试】什么是黑盒测试法?
    解答:黑盒测试法把程序看成一个盒子,完全不考虑程序内部结构和处理过程。它只检查程序功能是否能按照规格说明书的规定来正常使用,程序是否能适当地接收输入数据,产生正确的输出信息

  13. 【软件测试】什么是白盒测试法?白盒测试采用的技术都有哪些?
    解答:测试者了解被测程序的内部结构和处理过程,对程序的所有逻辑路径进行测试,在不同点检查程序状态,确定实际状态与预期状态是否一致。
    采用的技术:路径测试技术和事务处理流程技术,对包含有大量逻辑判断或条件组合的程序采用基于逻辑的测试技术。

  14. 【软件管理】软件工程管理的内容?
    1)费用管理:对软件开发进行成本核算,使软件生产按照商品生产的规律办事。包括:以简单、科学方法估算软件开发费用,作为签定开发合同的根据;管理开发费用的有效使用,即用经济手段来保证产品如期按质完成。
    2)质量管理:按项目的质量保证计划,确保各个开发阶段的开发和维护工作全部按软件工程的规范进行,保证软件产品的质量。
    3)配置管理:通过对于程序、文档和数据的各种版本所进行的管理,保证资料的完整性与一致性。
    4)项目管理:制定《项目实施计划》,按照计划的内容组织和实施软件的工程化生产。最终目标是以合理的费用和进度,圆满完成计划所规定的软件项目。

  15. 试述增量模型迭代模型以及它们的特点
    【增量模型】系统需求按照功能分为若干子系统,开始建造的版本是规模小的、部分功能的系统,后续版本添加包含新功能的子系统,最后版本是包含全部功能的子系统。
    【特点】能在较短时间内向用户提交可完成部分功能的产品;在把每个新的增量构件集成到现有的软件体系结构中时,必须不破坏原来已经开发的产品,软件体系结构必须是开放的。
    【适用范围】容易分块的大型软件开发
    【迭代模型】系统开始就提供了整体功能框架,后续版本陆续增强各个子系统,最后版本使各个子系统功能达到最强。
    【特点】允许变更需求;逐步集成元素;尽早降低风险;有助于提高团队的士气;生成更高质量的产品;保证项目开发进度。

  16. 【软件工程】什么是软件工程
    软件工程涉及的就是“软件开发的规范”,在规范里面体现出内在的思想与软件工程之规律。它包括:
    【1】软件开发技术:主要解决软件开发“如何做”的问题,包括软件生命周期个阶段所使用各种科学方法。
    【2】软件开发工具:它的主要目标是提高软件的生产效率和软件的可靠性,能自动或半自动地支持软件的开发管理和各类文档的生成。
    【3】软件工程管理:目的是对软件开发中的各种资源进行有机整合,保证软件工程项目能按照进度和预算的要求完成。

  17. 【概要设计】什么是模块?模块具有哪几个特征?概要设计主要考虑什么特征?
    1)模块是数据说明,可执行语句等程序对象的集合,可以单独命名且可通过名字来访问。
    2)模块具有输入和输出(参数传递),功能内部数据结构(局部变量)和程序代码四个特性。
    3)概要设计主要考虑输入和输出(参数传递)和功能两个特性。

  18. 【软件工程】什么是rup(统一过程)的六个经验
    1)迭代式开发:在软件开发的早期阶段就想完全、准确的捕获用户的需求几乎是不可能的。实际上,我们经常遇到的问题是需求在整个软件开发工程中经常会改变。迭代式开发允许在每次迭代过程中需求可能有变化,通过不断细化来加深对问题的理解。迭代式开发不仅可以降低项目的风险,而且每个迭代过程都可以执行版本结束,可以鼓舞开发人员。
    2)管理需求:确定系统的需求是一个连续的过程,开发人员在开发系统之前不可能完全详细的说明一个系统的真正需求。RUP描述了如何提取、组织系统的功能和约束条件并将其文档化,用例和脚本的使用以被证明是捕获功能性需求的有效方法。
    3)基于组件的体系结构:组件使重用成为可能,系统可以由组件组成。基于独立的、可替换的、模块化组件的体系结构有助于管理复杂性,提高重用率。RUP描述了如何设计一个有弹性的、能适应变化的、易于理解的、有助于重用的软件体系结构。
    4)可视化建模:RUP往往和UML联系在一起,对软件系统建立可视化模型帮助人们提供管理软件复杂性的能力。RUP告诉我们如何可视化的对软件系统建模,获取有关体系结构于组件的结构和行为信息。
    5)验证软件质量:在RUP中软件质量评估不再是事后进行或单独小组进行的分离活动,而是内建于过程中的所有活动,这样可以及早发现软件中的缺陷。
    6)控制软件变更:迭代式开发中如果没有严格的控制和协调,整个软件开发过程很快就陷入混乱之中,RUP描述了如何控制、跟踪、监控、修改以确保成功的迭代开发。RUP通过软件开发过程中的制品,隔离来自其他工作空间的变更,以此为每个开发人员建立安全的工作空间。

  19. 【软件测试】什么是单元测试集成测试确认测试系统测试验收测试?白盒测试和单元测试的区别?
    1)单元测试:是指对软件中的最小可测试单元进行检查和验证。一般由程序员来做,因为它需要知道内部程序设计和编码的细节。
    2)区别:单元测试多使用白盒测试。单元测试侧重于模块,白盒测试侧重于测试方式。
    3)集成测试:在单元测试的基础上,需要将所有模块按照概要设计说明书和详细设计说明书的要求进行组装。
    4)确认测试:确认测试的目标是验证软件的功能和性能以及其他特性是否与用户的要求一致。确认测试一般包括有效性测试和软件配置复查。一般有第三方测试机构进行。
    5)系统测试:软件作为计算机系统的一部分,与硬件、网络、外设、支撑软件、数据以及人员结合在一起,在实际或模拟环境下,对计算机系统进行测试,
    6)验收测试:以用户为主的测试,软件开发人员和质量保证人员参加,由用户设计测试用例。

  20. 【面向对象】面向对象的五个层次之间有顺序吗?
    面向对象的五个层次是主题层、类&对象层、结构层、属性层、服务层。五个层次对应着分析建模的五个主要活动。这五个主要活动可以同时(并行)处理,可以从较高的抽象层转移到较低的具体层,然后再返回到较高抽象层继续处理。

  21. 【软件测试】什么是语句覆盖判定覆盖条件覆盖判定条件覆盖条件组合覆盖基本路径测试法
    语句覆盖:语句覆盖法的基本思想是设计若干测试用例,运行被测程序,使程序的每个可执行语句至少被执行一次。
    判定覆盖:判定覆盖法的基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。
    条件覆盖:条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中的每个条件的可能取值至少满足一次。
    判定条件覆盖:判定-条件覆盖是判定和条件覆盖设计方法的交集。即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次。
    条件组合覆盖:条件组合覆盖的基本思想是设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。
    基本路径测试:路径覆盖就是设计所有的测试用例,来覆盖程序的所有可能的执行路径。

应用题

  1. UML】通过题意和类图,写出类中应有的属性和方法,并识别类之间的多重度

  2. 测试-等价类划分】输入三个整数a、b、c,分别作为三边的边长构成三角形。通过程序判定所构成的三角形的类型,当此三角形为一般三角形、等腰三角形及等边三角形时,分别作计算。要求:用等价类划分方法为该程序进行测试用例设计
    解析:我认为题目中明确表示输入三个整数,则只需要考虑在3个整数范围内不构成三角形的情况,比如两边之和不大于第三边,或者边小于等于0的情况。
    等价类划分用例设计原则:有效等价类应尽量共用,一个用例可覆盖尽量多个有效等价类;每一个无效等价类都应单独对应一个测试用例
    解答
    在这里插入图片描述

  3. 等价类划分&边界值分析】某城市的电话号码由三部分组成,分别是:地区码:以0开头的3位或4位数字;电话号码:以非0、非1开头的7位或者8位数字。假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。
    (1)使用等价类划分方法,并写出使用该方法的原因,划分等价类,写出测试用例表
    (2)使用边界值分析方法,并写出使用该方法的原因,写出测试用例表
    1)等价类划分优点:等价类划分从每个部分中选取具有代表性的数据当做测试用例进行合理的分类,测试用例由有效等价类和无效等价类的代表组成,从而保证测试用例具有完整性和代表性。并且,这一方法设计测试用例可以不考虑程序的内部结构,而是专注于以需求规格说明书为依据。
    2)边界值分析优点:边界值分析法通常作为等价类划分的补充,长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。
    3)等价类划分
    在这里插入图片描述
    在这里插入图片描述
    4)边界值划分:
    在这里插入图片描述

  4. --------------------------------------------------WARNING:即将进入图的旋涡-----------------------------------------------------

  5. 【题目描述】 程序结构设计-详细设计工具

void func() {
	// 输入一元二次方程的系数a,b,c
	p = b*b-4*a*c
	if(p<0)
		// 输出方程无实根
	else if(p>0)
		// 求根并输出
	else (p=0)
		// 求出重根并输出
}
  1. 【N-S图】将伪码转换为N-S图
    关于N-S图:【1】功能域明确,可以从盒图一眼就看出来;【2】不可能随机转移控制;【3】很容易确定局部和全程数据的作用域;【4】很容易表现嵌套关系,也可以表示模块的层次结构。
    在这里插入图片描述
    解答
    在这里插入图片描述

  2. 【PAD图】将伪码转换为PAD图
    关于PAD图:是问题分析图的缩写。
    在这里插入图片描述
    解答
    在这里插入图片描述

  3. 状态转换图】复印机的工作过程大致如下:未接到复印命令时处于闲置状态,一旦接到复印命令则进入复印状态,完成一个复印命令规定的工作后又回到闲置状态,等下一个复印命令;如果执行复印命令时发现没纸,则进入缺纸状态,发出警告,等待装纸,装满纸后进入闲置状态,准备接收复印命令;如果复印时发生卡纸故障,则进入卡纸状态,发出警告等待维修人员来排除故障,故障排除后回到闲置状态,请用状态转换图描绘复印机的行为
    解答
    在这里插入图片描述

  4. 【判定树&&判定表】航空公司托运行李规定:乘客可以免费托运重量不超过30公斤的行李。当行李超过30公斤时,对头等舱的国内乘客超重部分每公斤收费4元,对其它舱的国内乘客超重部分每公斤收费6元,对外国乘客超重部分每公斤收费比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。要求用判定树来表示计算行李费的算法
    判定树
    在这里插入图片描述
    判定表
    在这里插入图片描述

  5. 【程序流程图&&控制流程图】已知有一段代码实现了“输出ABC三个数中的最大值”,要求完成下列问题:
    (1)画出代码的程序流程图
    (2)根据该流程图画出该程序的控制流程图
    (3)计算该程序的圈复杂度
    1)最下面的那个应该是结束
    在这里插入图片描述
    2)
    在这里插入图片描述
    3)【1】圈复杂度 = 区域数(包括外面那层区域);【2】圈复杂度 = 分支节点数+1;【3】圈复杂度=边数-节点数+2;

  6. 【用例图】用例图区分行为者用例

  7. 【Petri网】Petri网的构成,画出Petri网
    经典的Petri网是简单的过程模型,由库所变迁两种节点,有向弧,以及令牌等元素组成。
    对于网结构N(P, T, F),P表示库所、T表示变迁、F表示有向弧
    在这里插入图片描述

  8. 【PDL语言&PAD图】在长度为10的int数组中,求最大数和次大数,分别用程序流程图、PDL语言、PAD图表示
    程序流程图
    在这里插入图片描述
    PAD图
    在这里插入图片描述
    PDL语言(过程设计语言):伪码的一种
    输入输出可以直接文字描述,其它按C++来

  9. 【软件结构图】画出软件结构图

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值