软件工程---期末复习题

选择题

1、具有风险分析的软件生命周期模型是( C )。
A、瀑布模型
B、喷泉模型
C、螺旋模型
D、增量模型

螺旋模型是一种迭代的软件开发模型,强调风险管理和迭代开发。在螺旋模型中,项目经理和开发团队通过多个迭代周期来逐步开发和完善软件系统。每个迭代周期包括四个主要阶段:计划、风险分析、工程开发和评审。

2、软件工程的基本要素包括方法、工具和( A )。
A、过程
B、软件系统
C、硬件环境
D、人员

软件工程的基本要素包括方法、工具和过程,并且人员也是一个重要的要素。

3、软件的复杂性是( A ),它引起人员通信困难、开发费用超支、开发时间超时等问题。
A、固有的
B、人为的
C、可消除的
D、不可降低的

软件系统的设计和实现通常涉及到大量的细节和相互关联的部分,这导致了软件本身的复杂性。软件的复杂性是由系统需求、功能规模、交互关系、数据处理等方面的固有特性所决定的。

4、软件过程包括五个框架活动——沟通、策划、建模、构建和部署。其中,哪个活动主要涉及确定软件系统的需求、功能和性能等方面的规范和描述?( C )
A、沟通
B、策划
C、建模
D、构建
E、部署

建模活动主要涉及确定软件系统的需求、功能和性能等方面的规范和描述。在软件过程中,建模活动通过使用不同的建模技术和工具,如需求建模、系统建模、数据建模等,来对软件系统进行抽象和描述,以便于后续的开发、测试和部署工作。

5、“软件危机”是指( C )。
A、计算机病毒的出现
B、利用计算机进行经济犯罪活动
C、软件开发和维护中出现的一系列问题
D、人们过分迷恋计算机系统

6、以下哪个不属于瀑布模型的优点?( D )
A、适用于小型项目
B、强调文档化和可追溯性
C、提供了明确的开发流程
D、强调迭代和快速原型开发

瀑布模型是一种线性的开发模型,按照固定的阶段顺序进行开发,不支持迭代和快速原型开发。瀑布模型的优点包括适用于小型项目、强调文档化和可追溯性、提供了明确的开发流程。

7、以下哪个不瀑布模型的缺点?( D )
A、难以适应需求变化
B、开发周期较长
C、不适用于大型项目
D、不适用于团队协作

瀑布模型的缺点包括难以适应需求变化、开发周期较长、不适用于大型项目。然而,瀑布模型并没有明确指出不适用于团队协作。在实际项目中,瀑布模型可以适用于团队协作,但要求各个团队成员在各个阶段按顺序进行工作,以确保项目的顺利进行。

8、在结构化分析方法中,( C )表达系统内部数据运动的图形化技术。
A、数据字典
B、实体关系图
C、数据流图
D、状态转换图

数据流图(Data Flow Diagram,DFD)是一种图形化的工具,用于描述系统中数据的流动和处理过程。数据流图能帮助分析人员和开发人员更好地理解和描述系统的功能和数据流程,从而进行需求分析、系统设计和功能实现。

9、在软件开发过程中,原型模型和瀑布模型是两种常见的开发方法。以下哪个描述是正确的?( A )
A、原型模型采用迭代和增量的方式进行开发,允许快速原型验证和反馈,适用于需求不明确或经常变化的项目。瀑布模型是一种线性顺序的开发方法,按照预先定义的阶段顺序进行开发。
B、原型模型和瀑布模型都是一种迭代的开发方法,根据项目需求的复杂性和规模选择使用。原型模型更适合小型项目,而瀑布模型适用于大型项目。
C、原型模型和瀑布模型是完全相同的开发方法,只是名称不同而已。
D、原型模型和瀑布模型都是一种敏捷开发方法,强调团队合作和持续交付。它们在开发过程中没有本质上的区别。

B错误,原型模型和瀑布模型适用的项目规模和复杂性没有直接关联。

C错误,原型模型和瀑布模型是两种不同的开发方法,不仅仅是名称的差异。

D错误,原型模型和瀑布模型虽然都有敏捷的特点,但它们在开发过程和方法上有本质的区别。

10、随着软硬件环境变化而修改软件的过程是( B )。
A、校正性维护
B、适应性维护
C、完善性维护
D、预防性维护

适应性维护是指根据软硬件环境的变化对软件进行修改的过程。适应性维护旨在确保软件在新的环境下继续正常运行,并充分利用新的技术和功能。

11、关于极限编程(XP)的优点,以下哪个说法是正确的?( A )
A. 提供高度灵活性和响应变化能力
B. 强调个人技能而忽视团队合作
C. 仅适用于小型项目
D. 降低软件质量和可维护性

极限编程(XP)注重高度灵活性和快速响应变化的能力。它通过迭代开发、持续交付和频繁反馈的方式,使团队能够适应需求变化,并在项目进展中及时调整。

12、软件工程的敏捷理念强调以下哪个重要方面?( C )
A. 高度规范化的流程和文档
B. 个人技能的发展和提升
C. 自组织团队的控制力
D. 长期的计划和预测

软件工程的敏捷理念强调4个关键问题:

  • 自组织团队对所开展工作具有控制力的重要性;
  • 团队成员之间以及开发参与者和客户之间的交流与合作;
  • 对“变更代表机遇”的认识;
  • 强调快速交付让客户满意的软件。

13、Scrum是一种敏捷软件开发框架,强调(自组织、迭代开发和持续反馈)。它通过迭代开发周期,称为(sprint),来持续交付可工作的软件增量。每个(sprint)的工作内容由(团队)自行决定,并通过(产品Backlog)来确定和调整优先级。团队在每天的(每日站会)会议中分享工作进展、遇到的问题和计划。Sprint结束后,进行(回顾会议)会议以评审已完成的工作并进行反馈,以及回顾会议以识别改进机会。

14、需求分析中开发人员要从用户那里了解( A )。
A、软件做什么
B、用户使用界面
C、输入的信息
D、软件的规模

15、软件详细设计的主要任务是确定每个模块的( A )。
A、算法和使用的数据结构
B、外部接口
C、功能
D、编程

16、为了提高模块的独立性,模块内部最好是( C )。
A、逻辑内聚
B、时间内聚
C、功能内聚
D、通信内聚

17、需求分析是( A )。
A、软件开发工作的基础
B、软件生存周期的开始
C、由系统分析员单独完成的
D、由用户自己单独完成的

18、极限编程(XP)模型在处理增量原型方面与螺旋模型有何不同?(ABCD)
A、迭代周期的长度
B、风险管理的方法
C、客户参与程度
D、项目控制的重点

迭代周期的长度:极限编程(XP)模型的迭代周期通常较短,而螺旋模型的迭代周期相对较长。

风险管理的方法:螺旋模型更注重风险管理和风险驱动的开发,而极限编程通过测试驱动开发(TDD)和持续集成等方法来管理风险。

客户参与程度:极限编程强调与客户的密切合作和持续交流,客户作为团队的一员参与到开发过程中。而螺旋模型中的客户参与相对较少。

项目控制的重点:极限编程采用简单的规则和实践来控制项目,如规划游戏、持续集成和团队内部的自我组织。螺旋模型更注重阶段之间的控制和规划。

19、软件维护时(maintenance) ,为扩充功能和改善性能而进行的修改,主要对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征,这种为改善性能、可维护性或其他软件属性而进行的维护一般被称为( C )。
A、适应性维护
B、纠错性维护
C、完善性维护
D、逆向(再生)工程

适应性维护:指为了适应环境变化或新需求而对软件进行修改的维护类型,通常是通过添加新功能或进行适应性调整来应对变化。

纠错性维护:指修复已经发现的软件缺陷或错误的维护类型,旨在使软件恢复到预期的功能状态。

完善性维护:指对已有软件进行修改以改进其性能、可读性、可维护性或其他非功能特征的维护类型。

逆向(再生)工程:指对已有软件系统进行分析和研究,以获取其内部结构、功能和设计原理等信息的过程。

20、软件测试分成几个步骤,其中的( A )是在模拟的环境下,运行黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。任务是验证软件的功能和性能及其他特性是否与用户的要求一致。
A、确认(有效性)测试
B、集成(组装)测试
C、模块(单元)测试
D、并行(平行)测试

确认(有效性)测试:确认测试是一种验证软件是否符合需求的测试方法,旨在确保软件满足用户的期望和规格说明书的要求。

集成(组装)测试:集成测试是在将多个模块或组件组装在一起后进行的测试,以验证它们在联合工作时是否正常运行。

模块(单元)测试:模块测试是对软件中的独立模块或单元进行测试,以验证其功能的正确性和预期行为。

并行(平行)测试:并行测试是指在相同环境中同时运行两个或多个版本的软件,以比较它们之间的性能、功能和其他特性的差异。

21、软件设计(Software Design)是软件开发的关键步骤,直接影响软件质量。下述( B )不是软件设计阶段所应包含的工作?
A、软件(体系)结构
B、软件过程(构件)
C、用户接口
D、软件风险分析

22、下面哪一个选项不属于系统测试( A )。
A、回归测试
B、安全测试
C、性能测试
D、压力测试

回归测试:回归测试是在进行系统修改或更新后执行的测试,旨在确保新的修改不会影响现有功能的正确性。

安全测试:安全测试是验证系统在安全方面的漏洞和弱点的测试,以保护系统免受未经授权的访问、数据泄露或其他安全威胁。

性能测试:性能测试是评估系统在各种负载和压力条件下的性能表现,包括响应时间、吞吐量和资源利用率等方面。

压力测试:压力测试是通过将系统置于负载或压力的最大限度下进行测试,以评估系统的稳定性和可靠性,以及在超负荷条件下的性能表现。

23、软件工程是一门迅速发展的新兴学科,现已经成为计算机科学的一个重要分支。软件工程是一种层次化的技术,软件工程包括( C )三个要素。
A、技术、方法和工具
B、封装、继承、多态
C、方法、工具和过程
D、过程、模型、方法

24、软件质量是难于定量度量的软件属性,但是仍然能够提出许多重要的软件质量指标,这些指标主要从管理的角度对软件质量进行度量。在这些因素中,软件系统在硬件故障、操作错误等意外情况下仍然能够做出适当反应的程度称为软件的( B )。
A.可靠性
B.健壮性
C.可用性
D.完整性

25、软件测试分成几个步骤,其中的( D )通常应该先进行“桌前检查"和/或“步行检查",再以白盒法为主,辅以黑盒法进行动态测试。该类测试可以并行进行。
A、确认(有效性)测试
B、验收(接收)测试
C、模块(单元)测试
D、并行(平行)测试

26、数据流图(DFD: Data Flow Diagram)描绘系统的逻辑模型。它是软件开发( D )阶段经常使用的工具。
A、软件维护
B、软件测试
C、详细(过程)设计
D、需求分析

数据流图可以通过图形化的方式描述系统的功能、数据流动和处理过程,帮助分析人员和开发团队理解系统的需求和功能。在需求分析阶段,数据流图可以用于捕捉和表示用户需求、业务过程以及数据在系统中的流动和处理。

27、软件需求确定以后,进入由软件设计、编码 (Coding) 和( B )三个关联阶段构成的软件开发 (development) 阶段。
A、需求分析
B、软件测试
C、系统定义
D、软件维护

28、如果需求不明确,我们最好采用( A )来明确需求。
A、原型模型
B、瀑布模型
C、增量模型
D、螺旋模型

原型模型是一种迭代开发方法,它通过构建初步的原型来帮助用户和开发团队更好地理解需求,并在需求澄清的过程中进行迭代和改进。通过原型模型,用户可以提供反馈和建议,开发团队可以根据反馈进行调整和完善,从而逐渐明确和理解需求。

29、模块内聚性是模块独立性的重要度量因素,在下述的几类内聚性中,具有最弱内聚性的一类是( D )。
A、顺序型内聚
B、通信型内聚
C、功能型内聚
D、偶然型内聚

顺序型内聚:模块内的成分按照顺序连接,前一个成分的输出作为后一个成分的输入。这种内聚性是一种比较强的内聚性,模块的功能被划分为一系列顺序执行的步骤。

通信型内聚:模块内的成分之间通过共享数据进行通信。这种内聚性表示模块内的成分之间通过传递消息或共享数据来实现某个共同的功能。

功能型内聚:模块内的成分执行一组相关的功能,彼此之间紧密联系,共同完成一个明确的任务或功能。这种内聚性是一种比较强的内聚性。

偶然型内聚:模块内的成分之间没有明确的关联,它们被放在同一个模块中是由于历史原因、技术限制或其他非功能性因素。这种内聚性是一种较弱的内聚性,模块内部的成分之间缺乏明确的联系或目标。

30、软件测试分成几个步骤,其中的集成测试一般要在( C )完成后才能进行。
A、确认(有效性)测试
B、验收(接收)测试
C、模块(单元)测试
D、并行(平行)测试

31、瀑布模型本质上是一种( A )。
A、线性顺序模型
B、顺序迭代模型
C、线性迭代模型
D、增量开发模型

瀑布模型是软件开发过程中最早被提出的一种经典模型,它采用线性顺序的方式进行软件开发。在瀑布模型中,各个阶段按照顺序依次进行,每个阶段的输出作为下一个阶段的输入,形成了一个明确的开发流程。

32、( D )是软件投入市场前由支持软件预发行的客户对FLURPSS进行测试,是软件的多个用户在实际使用环境下进行的测试,开发者通常不在测试现场。
A、验收测试
B、功能测试
C、α测试
D、β测试

验收测试:验收测试是在软件开发完成后,由用户或客户进行的测试,以确认软件是否满足其要求和期望。验收测试是软件开发的最后阶段,开发者和用户共同参与。

功能测试:功能测试是验证软件的功能是否按照规格说明书和需求定义进行设计和实现的测试。它主要关注软件的功能是否符合预期,功能测试可以在开发过程的各个阶段进行。

α测试:α测试是在软件开发的早期阶段由开发者或内部测试团队进行的测试。它主要用于发现和修复软件中的缺陷和问题,在软件投入市场前的内部测试阶段进行。

β测试:β测试是软件的多个用户在实际使用环境下进行的测试,通常由终端用户或特定目标用户参与,开发者通常不在测试现场。

33、在程序的规格说明书中,对输入条件有一句话“…输入数据x可以是0到100…”,如果你是测试人员,你该如何定义等价类( A )。
A、一个有效等价类和两个无效等价类
B、一个有效等价类和一个无效等价类
C、两个有效等价类和一个无效等价类
D、三个有效等价类

34、软件维护(maintenance)时,为扩充功能和改善性能而进行的修改,主要对己有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。这种为改善性能、可维护性或其他软件属性而进行的维护一般被称为( C )
A、适应性维护
B、纠错性维护
C、完善性维护
D、逆向(再生)工程

35、下列哪种维护类型是针对已有软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征,为改善性能、可维护性或其他软件属性而进行的维护?( C )
A、更正性维护
B、适应性维护
C、完善性维护
D、预防性维护

完善性维护:针对已有软件系统增加功能与性能特征的维护类型
更正性维护:修复已有软件系统中的错误或缺陷
适应性维护:为了适应环境变化或用户需求变更而对软件进行修改
预防性维护:为了预防潜在的问题或故障而进行的维护活动

36、软件测试分成几个步骤,其中的( A )是在模拟的环境下,运用黑盒测试方法,验证被测软件是否满足需求规格说明书列出的需求。任务是验证软件的功能和性能及其他特性是否与用户的要求一致。
A、确认(有效性)测试
B、集成(组装)测试
C、模块(单元)测试
D、并行(平行)测试

37、软件设计 (Software Design) 是软件开发的关键步骤,直接影响软件的质量。下述( D )不是软件设计阶段所应包含的工作?
A、软件(体系)结构
B、软件过程(构件)
C、用户接口
D、软件风险分析

38、采用甘特(Gantt)图表示软件项目进度安排。下列说法中不正确的是( C )。
A、一种按照时间进度标出工作活动,常用于项目管理的图表。
B、以图示的方式通过活动列表和时间刻度形象地表示出活动顺序与持续时间。
C、纵轴表示时间,横轴表示活动,线条表示活动完成情况。
D、直观地表明任务计划在什么时候进行,及实际进展与计划要求的对比。

甘特图的纵轴表示活动,横轴表示时间。

39、软件工程是一门迅速发展的新兴学科,现已成为计算机科学的一个重要分支。软件工程是一种层次化的技术,软件工程包括( C )三个要素。
A、技术、方法和工具
B、封装、继承、多态
C、方法、工具和过程
D、过程、模型、方法

40、软件质量是难于定量度量的软件属性,但是仍然能够提出许多重要的软件质量指标,这些指标主要从管理的角度对软件质量进行度量。在这些因素中,软件系统在硬件故障、操作错误等意外情况下仍能作出适当反应的程度称为软件的( B )
A、可靠性
B、健壮性
C、可用性
D、完整性

41、软件测试分为几个步骤,其中的( D )通常应该先进行“桌前检查”和/或“步行检查”,再以白盒法为主,辅以黑盒法进行动态测试。该类测试可以并行进行。
A、确认(有效性)测试
B、验收(接收)测试
C、模块(单元)测试
D、并行(平行)测试

42、数据流图(DFD:Data Flow Diagram)描绘系统的逻辑模型。它是软件开发( D )阶段经常使用的工具。
A、软件维护
B、软件测试
C、详细(过程)设计
D、需求分析

43、软件需求确定以后,进入由软件设计、编码(Coding)和( B )三个关联阶段构成的软件开发(develupmeni)阶段。
A、需求分析
B、软件测试
C、系统定义
D、软件维护

44、可行性研究又称为可行性分析,目的是避免盲目投资,减少不必要的损失。下列( C )不是可行性分析阶段的任务。
A、确定项目规模和目标
B、确定资源(人力、硬件、软件等)需求
C、建立新系统的高层逻辑模型
D、提出实现高层逻辑模型的各种方案,并推荐可行的方案

 可行性研究是在项目初期进行的一项工作,旨在评估项目的可行性和可行性方案的可行性。在可行性分析阶段,主要任务包括确定项目规模和目标、确定资源需求(人力、硬件、软件等)、提出实现方案并推荐可行的方案。

 "建立新系统的高层逻辑模型"不是可行性分析阶段的任务,而是在系统设计阶段进行的工作,用于描述系统的逻辑结构和组成部分。

45、 如果需求不明确,我们最好采用( A )来明确需求。
A、原型模型
B、瀑布模型
C、增量模型
D、敏捷模型

46、若有一个计算类型的程序,它的输入量只有一个X,其范围是[-1,0,1,0],现从输入的角度考虑一组测试用例:-0.5,0.5,1.5。设计这组测试用例的方法最可能是( C )
A、条件覆盖法
B、等价分类法
C、边界值分析法
D、错误推测法

47、如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为( C )
A、控制内聚
B、通信内聚
C、时间内聚
D、功能内聚

  • 时间内聚是指模块中的功能被组织在一起,是因为它们必须在同一时间内执行,而不是因为它们在逻辑上紧密相关。
  • 控制内聚是指模块中的功能紧密相关,共同实现一个控制目标。
  • 通信内聚是指模块中的功能紧密相关,共同处理相同的输入和输出数据。
  • 功能内聚是指模块中的功能紧密相关,共同实现一个特定的功能或者完成一个明确的任务。

48、软件测试分成几个步骤,其中的组装(集成)测试(Integration testing)一般要在( C )完成后才能进行。
A、确认(有效性)测试
B、验收(接收)测试
C、模块(单元)测试
D、并行(平行)测试

49、瀑布模型本质上是一种( A )。
A、线性顺序模型
B、顺序迭代模型
C、线性迭代模型
D、增量开发模型

  • 常见的顺序迭代模型有螺旋模型(Spiral Model)和增量螺旋模型(Incremental Spiral Model)。
  • 常见的线性迭代模型有喷泉模型(Fountain Model)和增量模型(Incremental Model)。
  • 常见的增量开发模型有原型模型(Prototype Model)和敏捷开发模型(Agile Model)。

50、软件设计是软件开发的关键步骤,直接影响到软件的质量。软件设计复审是和软件设计本身一样重要的环节,其最主要的目的是( C )。
A、减少测试工作量
B、减少编程工作量
C、避免后期付出高代价
D、缩短软件开发周期

51、结构化程序设计(SP:Structured Program)由荷兰科学家Di jkstra首先提出,它是具有一定限制的程序设计方法,下述的( D )不是结构化程序设计所要求遵循的基本原则:
A、只使用三种程序基本结构
B、使用自顶向下,逐步求精的方式编程
C、保持模块的单入口、单出口
D、有限制地使用switch语句

结构化程序设计要求尽量避免使用复杂的控制结构,如switch语句。它主张使用三种基本结构(顺序结构、选择结构和循环结构)来构建程序,并通过自顶向下、逐步求精的方式进行编程。此外,结构化程序设计还强调模块化,即保持模块的单入口、单出口,以提高程序的可读性和可维护性。

52、模块的内聚性最高的是( D )。
A、逻辑内聚
B、时间内聚
C、偶然内聚
D、功能内聚

53、单元测试的测试用例主要根据( D )的结果来设计。
A、需求分析
B、源程序
C、概要设计
D、详细设计

54、类构件的重用方式有多态重用、继承重用和( A )。
A、实例重用
B、重载重用
C、代码重用
D、方法重用

55、在白盒测试技术测试用例的设计中,( B )是最强的覆盖标准。
A、语句覆盖
B、路径覆盖
C、条件组合覆盖
D、判定覆盖

  • 路径覆盖是一种白盒测试方法,它要求测试用例能够覆盖软件程序的所有可能路径。
  • 语句覆盖要求测试用例能够覆盖软件程序的每个语句,但并不保证覆盖所有可能的路径。
  • 条件组合覆盖是一种基于条件的覆盖标准,要求测试用例能够覆盖所有条件的组合情况。它通常用于测试具有复杂条件逻辑的程序。
  • 判定覆盖是一种要求测试用例覆盖所有可能的判定结果的覆盖标准,它关注程序中的判断语句和判断结果。

56、在白盒测试技术测试用例的设计中,( A )是最弱的覆盖标准。
A、语句覆盖  
B、路径覆盖
C、条件组合覆盖
D、判定覆盖

57、软件开发的结构化生命周期方法将软件生命周期划分成( A )。
A、计划阶段、开发阶段、运行阶段
B、计划阶段、编程阶段、测试阶段
C、总体设计、详细设计、编程调试
D、需求分析、功能定义、系统设计

58、可行性研究主要从以下几个方面进行研究:( A )
A、技术可行性,经济可行性,操作可行性
B、技术可行性,经济可行性,系统可行性
C、经济可行性,系统可行性,操作可行性
D、经济可行性,系统可行性,时间可行性

软件开发的结构化生命周期方法将软件生命周期划分成计划阶段、开发阶段、运行阶段。计划阶段包括问题定义、可行性研究和需求分析;开发阶段包括概要设计、详细设计、编码和测试;运行阶段包括部署和维护。

59、黑盒测试在设计测试用例时,主要研究( A )。
A、需求规格说明于概要设计说明
B、详细设计说明
C、项目开发计划
D、概要设计说明与详细设计说明

60、根据缺陷排除效率的定义,假设一个软件项目在发布前发现了100个缺陷,而发布后又发现了50个缺陷。计算该项目的缺陷排除效率(DRE)是多少?( C )
A、0.33
B、0.5
C、0.67
D、0.75

 根据缺陷排除效率的公式,E为发布前发现的缺陷数,D为发布以后发现的缺陷数。代入数据,我们有E = 100,D = 50。
 根据公式 DRE = E / (E + D),将数据代入得到 DRE = 100 / (100 + 50) = 0.67。

61、软件测试的目的是( B )。
A、评价软件的质量
B、发现软件的错误
C、找出软件的所有错误
D、证明软件是正确的

62、软件详细设计的主要任务是确定每个模块的( A )。
A、算法和使用的数据结构
B、外部接口
C、功能
D、编程

63、

class JobQueueClass
{
	public:
		int queueLength;
		int queue[25];
	public:
		void initializeJobQueue();
		void addJobToQueue();
		void removeJobFromQueue();
}

JobQueueClass 定义如上图,则该类的内聚情况属于( B )。
A、实用内聚
B、功能内聚
C、顺序内聚
D、通信内聚

 功能内聚是指模块或类内的各个成员函数共同实现一个特定的功能。在给定的代码中,JobQueueClass 类包含了一系列与作业队列相关的操作函数,包括初始化队列、添加作业到队列、从队列中移除作业等。这些函数共同实现了作业队列的功能,因此属于功能内聚。

 其他选项的解释:

  • 实用内聚:模块或类内的成员函数用于实现一组相关的操作,但功能之间没有明显的关联。
  • 顺序内聚:模块或类内的成员函数按照顺序执行,其中一个函数的输出作为下一个函数的输入。
  • 通信内聚:模块或类内的成员函数之间通过共享数据进行通信。

64、关注点分离、模块化、抽象、信息隐蔽概念的直接产物是模块的( A )。
A、独立性
B、重构
C、封装
D、具体化

  • 独立性:模块独立于其他模块,可以单独进行开发、测试和维护。
  • 重构:重构是对现有代码的改进和优化,旨在提高代码的质量和可维护性。
  • 封装是指将模块内部的实现细节隐藏起来,只暴露对外部可见的接口,从而实现模块与外部的隔离。
  • 具体化:不符合给定描述,不是封装的直接产物。

65、在团队协助中,( D )行为是合理的。
A、斤斤计较
B、向组长反映对某个组员的不满
C、找到高薪就跳槽
D、能力很强,大包大揽

66、如果客户要求交付产品的时间非常迫切、团队中有几个项目同时在开发,我们最好采用( A )来开发这个项目。
A、增量模型
B、螺旋模型
C、瀑布模型
D、原型模型

增量模型是一种软件开发方法,它将项目划分为多个小的增量部分,每个增量都是一个可交付的、完整的功能子集。在每个增量中,团队可以按照优先级完成必要的功能和特性。这种方法可以让团队快速交付部分功能,并在后续增量中逐步完善和改进。对于紧迫的项目交付需求和并行开发的情况,增量模型可以帮助团队以迅速且可控的方式进行开发,并及时满足客户的要求。

67、用于衡量软件开发组织的过程能力和成熟度水平的模型是( A )。
A、CMMI
B、RAD
C、CPM
D、UP

  • CMMI(Capability Maturity Model Integration,能力成熟度模型集成):
    CMMI是一种广泛使用的评估模型,旨在评估和改进组织的软件工程过程。它提供了一套指南和最佳实践,帮助组织评估其软件开发和管理过程的成熟度,并提供改进路径。CMMI定义了不同成熟度级别,从初始级到优化级,组织可以根据其过程能力和成熟度水平进行评估和改进。
  • RAD(Rapid Application Development,快速应用程序开发)
  • CPM(Critical Path Method,关键路径法)
  • UP(Unified Process,统一过程)不是用于评估组织过程能力和成熟度的模型。

68、对于一个项目的工作量,给出的乐观、可能和悲观估计分别是10、25、60人月。基于三点估算,这个项目的工作量为( C )人月。
A、25
B、31.7
C、28.3
D、30

 基于三点估算,可以使用PERT(Program Evaluation and Review Technique)来计算项目的工作量。PERT计算公式如下:

 工作量 = (乐观估计 + 4 * 可能估计 + 悲观估计) / 6

 在这个例子中,乐观估计为10人月,可能估计为25人月,悲观估计为60人月。

 工作量 = (10 + 4 * 25 + 60) / 6
 工作量 ≈ 28.3人月

 因此,这个项目的工作量约为28.3人月。

69、用于找到关键路径的方法是( C )。
A、UP
B、UML
C、CPM
D、DFD

用于找到关键路径的方法是:CPM(Critical Path Method,关键路径法)

CPM是一种项目管理技术,用于确定项目中的关键路径和关键活动。关键路径是指在项目网络图中,连接起始节点和结束节点,且具有最长时间的路径。关键路径上的活动对于项目的完成时间具有重要影响,延误任何一个关键路径上的活动都会延误整个项目的完成时间。CPM通过计算活动的最早开始时间、最晚开始时间、最早完成时间和最晚完成时间等参数,确定关键路径和项目的总工期。

UP(Unified Process,统一过程)是一种软件开发过程框架UML(Unified Modeling Language,统一建模语言)是一种图形化建模语言DFD(Data Flow Diagram,数据流程图)是一种描述系统功能和数据流的图形化表示方法;它们与关键路径的计算无直接关系。

70、你现在正在测试一个学籍管理系统。假设你已经完成“学生选课“功能的测试,正在对“课程设置”功能进行测试。现在你发现“课程设置"功能中有一个错误,并进行了改动。按照软件工程测试的要求,此时你应该做( B )。
A、冒烟测试
B、回归测试
C、集成测试
D、确认测试

回归测试是在对软件进行更改或修复后重新运行现有的测试用例,以确保已修复的错误没有引入新的错误或没有破坏现有的功能。在这种情况下,你已经发现并更改了“课程设置”功能中的错误,现在需要对整个系统进行回归测试,以确保修复过程中没有引入其他问题,并且之前通过的测试用例仍然能够通过。

冒烟测试主要用于在对软件进行全面测试之前,快速验证系统的基本功能和稳定性集成测试是用于测试多个组件或模块在一起协同工作的测试确认测试是由最终用户或客户进行的测试,旨在确认软件是否符合其需求和期望。在这种情况下,回归测试是最适合的选择。

71、假设你在开发团队有3个人,每个人的生产率是3000 LOC/月,每条通信路径上的生产率开销为300 LOC/月,但是现在表明你们已经落后于进度。如果加入2个人,每个人的生产率至少是( B )才能使得小组能够赶上进度。
A、1350
B、1050
C、2700
D、2100

 首先,需要计算目前的总生产率,即每月能完成多少LOC的代码。根据题目,一共有3个人,每个人的生产率是3000 LOC/月,但是每条通信路径上的生产率开销为300 LOC/月。通信路径是指团队成员之间的沟通和协作,如果团队有n个人,那么通信路径的数量是n * (n - 1) / 2。所以,目前的总生产率是:

  • (3 * 3000) - (3 * (3 - 1) / 2 * 300) = 8100 LOC/月

 然后,需要计算还需要完成多少LOC的代码,才能赶上进度。假设已经完成了M LOC的代码,还剩下N LOC的代码没有完成,那么需要的时间是:

  • N / 8100 个月

 接下来,需要计算如果加入2个人,这两人的生产率为X LOC/月,那么总生产率会变成多少。根据题目,如果加入2个人,那么团队有5个人,通信路径的数量是5 * (5 - 1) / 2 = 10。所以,总生产率变为:

  • (3 * 3000 + 2 * X) - (10 * 300) = 2X + 6000 LOC/月

 最后,需要计算这两人的生产率至少是多少,才能使得小组能够赶上进度。为了赶上进度,需要在相同的时间内完成N LOC的代码,所以有以下等式:

  • N / (2X + 6000) = N / 8100

 解得:

  • X = 1050 LOC/月

 所以,如果加入2个人,每个人的生产率至少是1050 LOC/月才能使得小组能够赶上进度。

 因此,这道选择题的正确答案是B。

72、团队正在开发一个智慧停车场系统,结合团队实际情况,其中一个风险为:原定复用的构件必需要自行开发,且该风险发生的概率为60%。假设该项目需要复用40个构件,每个构件预估的代码行为200 LOC,每代码行成本为15 元/LOC。则针对此风险的RE是( D )。
A、1800
B、120000
C、48000
D、72000

 针对风险的RE(Risk Exposure)是根据风险概率和风险影响来计算的。在这种情况下,风险是原定复用的构件必需要自行开发,且该风险发生的概率为60%。

 首先,计算风险发生的影响:
影响 = 复用构件数量 * 每个构件的代码行数 * 每代码行的成本
 影响 = 40 * 200 LOC * 15 元/LOC = 120,000 元

然后,计算风险的RE:
RE = 风险概率 * 影响
RE = 0.6 * 120,000 元 = 72,000 元

因此,针对该风险的RE为72,000 元。

73、在传统软件工程环境中,以下哪个描述最符合控制构件的特点?( B )
A、完成部分或全部用户的需求
B、协调问题域中所有其他构件的调用
C、完成问题域所需相关处理的功能
D、实现构件之间的接口

  • 控制构件:位于高层,协调问题域中所有其他构件的调用;
  • 问题域构件:位于底层,完成部分或全部用户的需求;
  • 基础设施构件:完成问题域所需相关处理的功能。

74、下面哪个原则适用于构件级设计,使得产生的设计在发生变更时能够适应变更并且减少副作用的传播?( A )
A、开闭原则 (The Open-Closed Principle, OCP)
B、Liskov替换原则 (Liskov Substitution Principle, LSP)
C、依赖倒置原则 (Dependence Inversion Principle, DIP)
D、接口分离原则 (Interface Segregation Principle, ISP)

  • 开闭原则:模块应该对外延具有开放性,对修改具有封闭性;
  • Liskov替换原则:子类可以替换它们的基类;
  • 依赖倒置原则:依赖于抽象,而非具体实现;
  • 接口分离原则:多个用户专用接口比一一个通用接口要好。

75、以下情况应该选用什么过程模型?

(1)客户不太清楚待开发的系统需要提供什么服务。

  • 需求不明确
  • 原型模型

(2)开发团队了解待开发软件的相关领域知识,尽管此系统庞大,但其较已经开发的系统差异并不大。

  • 需求明确
  • 瀑布模型

(3)软件的功能是把读入的浮点数开平方,所得到的结果应该精确到小数点后4位。

  • 需求很明确
  • 瀑布模型

(4)开发一个已发布软件的新版本,公司规定了严格的完成期限,并对外公布。

  • 新版本 + 严格期限
  • 增量模型

(5)汽车防锁死刹车控制系统

  • 考虑技术风险 + 循环的方式逐步加深系统定义和实现深度
  • 螺旋模型

(6)大学记账系统,准备替换一个已存在的系统

  • 需求很明确
  • 瀑布模型

(7)一个位于火车站的交互式火车车次查询系统

  • “交互式”体现的是沟通上的迭代,需求不明确
  • 原型模型

76、
(1)黑盒测试是从()观点出发的测试,白盒测试是从()观点出发的测试

 A、开发人员,管理人员
 B、用户,管理人员
 C、用户,开发人员
 D、开发人员,用户

答案:C

(2)使用白盒测试时,确定测试用例应根据()和指定的覆盖标准

 A、程序的内部逻辑
 B、程序的复杂结构
 C、使用说明书
 D、程序的功能

答案:A

(3)软件测试的目的是()

 A、证明软件的正确性
 B、找出软件中存在的所有错误
 C、证明软件中存在错误
 D、尽可能多地发现软件中的错误

答案:D

(4)从下列叙述中,选出依次分别与需求分析、设计、编码相对应的软件测试:

 A、集成测试,确认测试,单元测试
 B、单元测试,集成测试,确认测试
 C、单元测试,确认测试,集成测试
 D、确认测试,集成测试,单元测试

答案:D

(5)一般来说,与测试数据无关的文档是()

 A、需求规格说明书
 B、设计说明书
 C、源程序
 D.、项目开发计划

答案:D

77、
​ 设一个人单独开发软件,生产率是5000行/人年;如果多人开发软件,在每条通信路径上耗费的工作量是 250 行/人年。

​ 若 4 人组成一个小组共同开发这个软件,则需要6条通信路径,则小组中每个人的软件生产率降低为:

  • 5000 - 6 × 250/4 = 4625 行/人年

​ 若 10 人组成一个小组共同开发这个软件,则需要45条通信路径,则小组中每个人的软件生产率降低为:

  • 5000 - 45 × 250/10 = 3875 行/人年

78、
1、软件计划是软件开发的早期和重要阶段,此阶段要求交互和配合的是( B )
A、设计人员和用户
B、分析人员和用户
C、分析人员和设计人员
D、编码人员和用户

2、在软件工程项目中,不随参与人数的增加而使生产率成比例增加的主要原因是( D )
A、工作阶段的等待时间
B、产生原型的复杂性
C、参与人员所需电脑数
D、参与人员之间的通信困难

3、编写程序的工作量通常占用软件开发总工作量的( D )
A、80%
B、60%
C、40%
D、20%

4、描述软件项目进度安排的甘特图能够表示( D )
A、多个任务之间的复杂关系
B、任务之间的相互依赖制约关系
C、哪些任务是关键任务
D、子任务之间的并行和串行关系

5、可行性研究要进行的需求分析和设计应是( C )
A、详细的
B、全面的
C、简化、压缩的
D、彻底的

名词解释

1、RMMM

 RMMM(Risk Mitigation, Monitoring, and Management)是风险缓解、监控和管理计划的缩写,是一种常见的软件项目管理技术。它包括以下几个方面:

  • 风险缓解:指采取措施避免或减少风险发生的可能性或影响,例如消除风险的根源,制定应急预案,提高团队能力等。
  • 风险监控:指对已识别的风险进行跟踪和评估,以确定风险是否发生或变化,以及风险缓解措施是否有效,例如收集风险数据,更新风险状态,调整风险策略等。
  • 风险管理:指当风险缓解失败而导致风险成为现实时,采取应对措施控制风险的损失或影响,例如启动应急预案,分配资源,沟通协调等。

 RMMM计划通常作为软件项目计划的一部分,在项目开始前制定,并在项目过程中持续执行和更新。RMMM计划有助于提高软件项目的质量和成功率。

2、统一过程

统一过程(UP, unified process)是一种“用例驱动,以体系结构为核心,迭代及增量”的软件过程框架,由UML方法和工具支持。它融合了瀑布模型、增量过程模型、演化过程模型、基于构件的开发等多种软件工程方法。它将软件开发生命周期分为四个顺序的阶段:初始阶段、细化阶段、构造阶段和交付阶段,每个阶段包含若干次迭代,每次迭代都以一个可执行的软件版本结束。它还定义了九个核心工作流,分别是业务建模、需求、分析与设计、实现、测试、部署、项目管理、配置与变更管理和环境工作流。

3、依赖倒置原则

依赖倒置原则(Dependency Inversion Principle, DIP)是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。这样可以降低类之间的耦合度,提高代码的可扩展性和可维护性。

4、开闭原则

开闭原则(Open-Closed Principle, OCP)是面向对象设计中的一条基本原则,指的是“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭”。这意味着一个软件实体应该在不修改其源代码的情况下,可以通过扩展来增加新的功能或改变原有的行为。开闭原则的目的是提高软件的可维护性和可复用性,降低软件的耦合度和变更成本。开闭原则的实现方法主要依赖于抽象化多态。通过使用抽象类或接口,将软件实体的公共行为抽象出来,而将不同的行为封装在子类或实现类中。通过使用多态,可以动态地替换不同的子类或实现类,从而改变软件实体的行为。

5、接口分离原则

接口分离原则(Interface Segregation Principle, 简称ISP)是指客户不应该依赖它们用不到的方法,只给每个客户它所需要的接口。接口隔离原则指在设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。 这样可以减少接口之间的耦合,提高接口的内聚性,降低接口的复杂度,提高系统的可维护性和可扩展性。接口隔离原则的实现方法主要依赖于抽象化多态。通过使用抽象类或接口,将软件实体的公共行为抽象出来,而将不同的行为封装在子类或实现类中。通过使用多态,可以动态地替换不同的子类或实现类,从而改变软件实体的行为。

6、Liskov替换原则

Liskov替换原则(The Liskov Substitution Principle, 简称LSP)是由Barbara Liskov女士于1988年提出的,其定义为:“如果对于类型S的每个对象O1存在类型T的对象O2,那么对于所有定义了T的程序P来说,当用O1替换 O2并且S是T的子类型时,P的行为不会改变”。Liskov替换原则是对子类型的特别定义,也是多态性的一种表现。它要求子类型必须能够替换掉它们的基类型,并且保持程序的正确性和一致性。Liskov替换原则的目的是提高软件的可重用性和可扩展性,降低软件的耦合度和复杂度。Liskov替换原则的实现方法主要依赖于继承多态。通过使用继承,可以使子类继承父类的公共属性和方法,而通过使用多态,可以使子类覆盖或重写父类的方法,从而改变或扩展父类的行为。

7、重构

重构(refactoring)是指在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构的目的是提高代码的可理解性,降低代码的修改成本,提升代码的质量。重构的方法有很多,例如提炼函数,提炼变量,提炼类,合并函数,合并变量,合并类,移动函数,移动变量,移动类,重命名函数,重命名变量,重命名类等等。重构的过程应该遵循一些原则,例如小步骤修改,频繁测试,保持可运行状态等等。

8、CRC(Class Responsibility Collaborator)

类—职责—协作者是一种面向对象的分析和设计方法,它通过使用一组表示类的索引卡片来描述系统的结构和行为。每张卡片分成三部分,它们分别描述类名、类的职责和类的协作者。

  • 类名是一个突出的名词或名词词组,代表了一组相似的对象,例如 学生、教授 或 研讨会 。
  • 类的职责是类知道或做的任何事情,包括属性、方法、事件等,例如 学生有姓名、参加研讨会、请求查看成绩单 等。
  • 类的协作者是与该类有交互或依赖关系的其他类,它们可以提供信息或服务来帮助该类完成职责,例如 学生与研讨会、教授、成绩报告单 等有协作关系。

类—职责—协作者方法的优点是简单易用,能够快速地识别出系统中的主要类和它们之间的关系,促进团队合作和沟通。缺点是不够形式化,不能表示细节和约束,需要与其他建模工具如UML类图等结合使用。

9、α测试(Alpha Testing)

α测试(Alpha Testing)是一种软件测试方法,它是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试。α测试的目的是评价软件产品的功能、可用性、可靠性、性能和支持,尤其注重产品的界面和特色。α测试发现的错误,可以在测试现场立刻反馈给开发人员,由开发人员及时分析和处理。α测试可以从软件产品编码结束之后开始,或在模块(子系统)测试完成后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。

10、β测试(Beta Testing)

β测试(Beta Testing)是一种软件测试方法,它是由软件的多个用户在实际使用环境下进行的测试,这些用户返回有关错误信息给开发者。β测试是在开发者无法控制的环境下进行的软件现场应用。β测试的目的是评价软件产品的功能、可用性、可靠性、性能和支持,着重于产品的支持性,包括文档、客户培训和支持产品生产能力。只有当α测试(Alpha Testing)达到一定的可靠程度时,才能开始β测试。

11、信息屏蔽(informetion hiding)

信息屏蔽(information hiding)是一种软件设计原则,旨在将系统的内部实现细节和数据隐藏起来,使其对外部组件和用户不可见。该原则强调将关键的信息封装在模块内部,只暴露必要的接口供其他组件使用,从而提高系统的可维护性和可扩展性。

12、功能独立

功能独立是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其它模块的接口是简单的。功能独立的模块应该是高内聚低耦合的,即模块内部各个元素彼此结合的紧密程度高,而模块之间的互相连接的紧密程度低。这样可以提高模块的可维护性、可测试性、可重用性和可扩展性。

13、模块化

模块化是一种软件设计方法,它把软件系统划分为若干个相对独立的功能单元,即模块。每个模块只负责一项具体的子功能,而且模块之间通过简单的接口进行通信。模块化的目的是降低软件的复杂性,提高软件的可维护性、可测试性、可重用性和可扩展性。

14、软件生命(生存)周期(software life cycle)

软件生命(生存)周期(software life cycle)是指软件产品或软件系统从产生、投入使用到被淘汰的全过程。通常把软件生命(生存)周期分为若干个阶段,如需求、设计、实现(编码)、测试和维护等。每个阶段都有明确的任务、输入、输出和质量标准。软件生命(生存)周期的目的是降低软件开发的复杂性,提高软件的质量和可控性,以满足用户的需求和期望。

简答题

1、某公司的软件产品以开发实验型的新软件为主。用瀑布模型进行软件开发已经有近十年了,并取得了一些成功。若你作为一名管理员刚加入该公司,你认为快速原型法对公司的软件开发更加优越,你要怎么说服老板换成原型开发模型?

1、了解老板的关注点:在与老板进行沟通之前,了解他们对软件开发的关注点和期望是非常重要的。这可以帮助你根据他们的需求和优先事项来展示原型开发模型的优势。

2、准备充分的信息:收集有关原型开发模型的相关信息,并与瀑布模型进行比较。准备一些案例研究或成功故事,说明原型开发模型在其他组织中的优势,如加快开发速度、提高用户参与度、降低错误成本等。

3、强调灵活性和迭代:原型开发模型具有快速迭代的特点,可以更快地响应用户的反馈和变更请求。强调这种迭代过程可以在开发早期阶段发现和解决问题,从而减少后期修复成本。

4、强调用户参与和反馈:快速原型法鼓励用户的参与和反馈,可以帮助开发团队更好地理解用户需求,从而提供更符合用户期望的软件产品。说明通过原型开发模型可以更好地满足用户需求,增加用户满意度和产品市场竞争力。

5、提供风险管理策略:老板可能会关心风险管理方面,因此,在沟通中要强调原型开发模型对风险管理的好处。快速原型法可以在开发早期阶段识别和解决问题,减少项目失败的风险,并提供更准确的时间和成本估计。

6、提供试点项目:如果老板对切换到原型开发模型还有疑虑,你可以建议进行一个试点项目,以验证原型开发模型的有效性。选择一个小型项目,应用原型开发模型进行开发,并在项目完成后评估结果和收益。

2、某公司负责实现运行商携号转网的一部分功能,如果你是项目经理你要怎么安排?从软件规模,软件范围,质量保证,风险管理等角度进行分析。

1、软件规模:首先,需要对软件规模进行评估,确定项目的整体规模和范围。这可以通过需求分析和功能规格说明书来完成。根据业务需求和资源限制,确定项目的开发时间、团队规模、人力资源需求等。

2、软件范围:明确实现携号转网功能的软件范围,包括定义功能边界、系统接口、用户界面等。在与业务方和相关利益相关者的沟通中,明确功能需求、非功能需求和技术限制,确保软件开发的目标明确,并与利益相关者达成共识。

3、质量保证:需要制定适当的质量保证计划来确保软件的质量。这包括制定测试策略、测试计划和测试用例,以确保软件在各个阶段都能满足质量要求。同时,建立代码审查和单元测试的机制,以及进行系统集成测试和用户验收测试,以确保软件的功能完整性和稳定性。

4、风险管理:在项目中,风险管理是至关重要的。需要对潜在风险进行识别、评估和应对计划的制定。针对潜在风险,可以采取预防措施、应急计划和风险转移等策略。同时,建立有效的沟通渠道,及时识别和解决风险,确保项目进展顺利。

5、除了上述方面,还需要考虑项目资源管理、进度管理、沟通管理等方面的安排,以确保项目的顺利实施和交付。

3、请简要说明你对顺序图和状态图使用的看法?

顺序图(Sequence Diagram)
顺序图主要用于描述系统中对象之间的交互和消息传递顺序。它展示了对象之间的时序关系,有助于理解系统的行为和交互流程。
顺序图适用于以下情况:

  • 显示对象之间的消息传递和交互顺序,可以帮助捕捉系统的时序逻辑。
  • 描述用例场景或特定操作的流程,以便识别参与者和对象之间的交互。
  • 强调时间和顺序对系统行为的影响。

状态图(State Diagram)
状态图主要用于描述系统或对象的状态和状态之间的转换。它展示了对象在不同状态下的行为和响应,以及导致状态转换的事件和条件。
状态图适用于以下情况:

  • 描述对象的生命周期和状态转换,特别适用于具有复杂状态和状态变化的系统。
  • 显示系统的不同状态和状态之间的转换条件,有助于识别系统的行为和响应。
  • 捕捉对象或系统的状态行为和约束,以便更好地设计和实现系统。

综上所述,顺序图和状态图在软件系统建模中起着不同的作用。顺序图主要关注对象之间的交互和消息传递顺序,而状态图主要关注对象的状态和状态之间的转换。选择使用哪种图取决于想要描述的系统行为和需求,以及希望强调的方面。通常,在系统设计和开发过程中,这两种图经常结合使用,以提供更全面和准确的系统模型。

4、请简要描述三个适于采用瀑布模型的软件项目。

传统的桌面应用程序:对于传统的桌面应用程序,通常具有明确的功能需求和固定的技术环境。这种项目通常遵循传统的软件开发生命周期,并且在项目开始之前能够明确定义所有的功能和规范。瀑布模型可以帮助团队在每个阶段有序地进行设计、开发和测试。

嵌入式系统开发:嵌入式系统往往需要与硬件进行密切集成,其开发过程需要严格的计划和预测。在这种情况下,瀑布模型可以帮助团队在每个阶段有序地完成需求分析、设计、编码和测试,并最终交付一个完整且稳定的嵌入式系统。

传统的企业级软件开发:某些企业级软件项目对于稳定性和可靠性的要求较高,而且对于变更的容忍度相对较低。这些项目通常有明确的业务需求和规范,并需要按计划进行开发和交付。在这种情况下,瀑布模型可以帮助团队按照预定的计划进行逐个阶段的开发和测试,确保项目按时交付。

5、请简要描述三个适于采用原型模型的软件项目。

用户界面设计:原型模型在用户界面设计方面非常有用。当需要开发一个用户友好、易用的界面时,原型模型可以帮助设计团队更好地理解用户需求并快速验证不同设计概念。通过创建和迭代原型,设计团队可以与用户进行频繁的交互和反馈,以确保最终的用户界面符合用户期望和需求。

前沿技术和创新项目:原型模型适用于前沿技术和创新项目的开发。这些项目通常具有高度的不确定性和变动性,难以明确定义和预测最终产品的形态和功能。通过使用原型模型,团队可以快速建立原型来验证新技术的可行性、用户反馈和市场需求,以便在后续开发阶段进行相应调整和优化。

需求不明确或频繁变化的项目:当项目需求不够明确或经常发生变化时,原型模型是一种有效的开发方法。原型模型允许团队快速构建和演示原型,以便客户或利益相关者提供及时反馈。通过不断迭代和增量开发原型,团队能够更好地理解需求并及时适应变化,从而减少后续开发阶段的风险和错误。

6、用自己的话描述(用于软件项目的)敏捷性。

敏捷性是一种软件开发方法论,旨在通过迭代和增量的方式开发软件项目。它强调灵活性、快速响应变化和高度合作的团队工作。
敏捷性的特点包括以下几个方面:

  • 迭代开发:敏捷方法采用迭代开发的方式,将项目分解为多个短期的开发周期,每个周期称为一个迭代。每个迭代都会产生可用的软件部分,可以进行测试和验证。这种迭代的开发方式可以更好地应对需求变化和项目风险。
  • 增量交付:敏捷方法强调每个迭代都要交付可用的软件增量,而不是等待整个项目完成后才交付。这使得客户能够尽早地获得软件的价值,并提供快速反馈,从而指导后续的开发工作。
  • 灵活性和适应性:敏捷方法鼓励团队在开发过程中灵活应对变化。当需求或市场情况发生变化时,团队可以及时作出调整,重新规划迭代和优先级,以确保软件始终符合最新的需求。
  • 高度合作的团队:敏捷方法注重团队合作和沟通。开发团队与业务代表、用户和利益相关者密切合作,以确保开发出满足需求的软件。团队成员之间的密切协作和信息共享是敏捷方法成功的关键。
  • 持续改进:敏捷方法鼓励团队在开发过程中进行持续改进。通过定期回顾和反思,团队可以识别问题和改进机会,并采取相应的行动来提高开发效率和质量。

总体而言,敏捷性在软件项目中提供了一种迭代、灵活和协作的开发方法,旨在满足客户需求、快速响应变化,并持续改进软件开发过程。

7、请你谈谈你对敏捷开发的认识。

 敏捷开发是一种迭代、增量的软件开发方法,强调通过快速响应变化、灵活应对需求,实现高质量的软件交付。以下是我对敏捷开发的认识:

  • 迭代和增量开发:敏捷开发采用迭代和增量的方式进行开发,将整个开发过程分成多个短期的迭代周期。每个迭代周期内,团队集中精力完成一部分功能,并进行测试和验证。每个迭代周期的结果是一个可交付的、经过测试的软件增量,使得客户可以及时地审查和反馈。

  • 快速响应变化:敏捷开发鼓励面对变化,迎接客户需求的变化。它通过频繁的迭代和交互,及时获取用户反馈,以便及时调整项目方向和优先级。敏捷开发注重灵活性和适应性,可以更好地应对需求的变化和市场的变化。

  • 自组织和跨功能团队:敏捷开发倡导自组织的团队和跨功能的团队合作。团队成员具备多种技能,可以跨越职能边界,共同完成项目的各项任务。团队成员之间密切合作,通过面对面的沟通和协作,实现高效的软件开发。

  • 高度用户参与:敏捷开发强调用户的参与和反馈。用户作为项目的利益相关者,与开发团队紧密合作,提供清晰的需求和反馈。用户参与可以帮助团队更好地理解用户需求,减少沟通误差,并及时调整开发方向。

  • 持续交付和持续集成:敏捷开发强调持续交付和持续集成的原则。团队通过频繁的集成和测试,确保软件质量,减少集成和发布的风险。持续交付使得软件可以更快地交付给用户,实现快速价值的实现。

 总的来说,敏捷开发是一种注重灵活性、迭代和增量的软件开发方法。它强调快速响应变化、高度用户参与和持续交付,通过团队的自组织和跨功能合作,以及频繁的迭代和交互,实现高质量的软件交付。敏捷开发适用于需求变化频繁、市场竞争激烈的项目,可以帮助团队更好地应对变化和快速交付有价值的软件产品。

8、简述瀑布模型的定义,特点和适用场合

瀑布模型是一种经典的软件开发过程模型,它以线性顺序的方式进行软件开发,包括一系列连续且有序的阶段,每个阶段的输出作为下一个阶段的输入。下面是对瀑布模型的定义、特点和适用场合的简述:

定义

  • 瀑布模型是一种顺序进行的软件开发过程模型,按照预定的顺序依次执行需求分析、系统设计、编码、测试和维护等阶段,每个阶段的输出作为下一个阶段的输入。这意味着在开始下一个阶段之前,必须完成上一个阶段的工作。

特点

  • 阶段性:瀑布模型将软件开发过程划分为明确定义的阶段,每个阶段都有特定的目标和交付物。
  • 顺序性:瀑布模型要求各个阶段按照固定的顺序依次执行,前一阶段完成后才能进入下一阶段。
  • 文档驱动:瀑布模型注重详细的文档编写,每个阶段都有相应的文档作为输出和记录。
  • 刚性和预测性:瀑布模型在项目开始时就需要明确的计划和需求,较为刚性,难以适应需求变化。

适用场合
瀑布模型适用于以下场合:

  • 需求相对稳定:适用于需求相对稳定、明确且变动不大的项目,不太适应频繁的需求变更。
  • 小规模项目:适用于相对较小且简单的项目,开发过程相对简单和直观。
  • 需要详尽文档记录:适用于对文档编写和记录要求较高的项目,对软件需求、设计和测试等有严格的文档要求。

 需要注意的是,瀑布模型在应对需求变化、灵活性和快速交付等方面存在一些局限性,因此在实际应用时需要综合考虑项目的特点和需求来选择合适的软件开发过程模型。

9、你被要求负责一个开发软件产品的商业项目,该项目有明确的需求和完成时限,各种人力资源、软硬件资源都已经确定。但你和项目组的成员经过详细的估算后发现在项目中现有的约束条件(需求、人员、进度)下根本无法按时、保证完成项目。请问你现在有哪几种选择。请分析你做这些选择的理由和优缺点。

在面对这种情况时,可能有以下几种选择:

  • 重新评估和调整项目计划:你可以重新评估项目计划,并尝试调整需求、资源分配或进度安排,以减少项目的范围或延长时间表。这样做的理由是通过重新规划项目,有可能在现有的约束条件下更好地满足项目要求。优点是可以提供更现实的项目计划,并减轻团队压力;缺点是可能会导致项目范围缩减或时间延长,可能不符合初期的预期。

  • 增加资源或外包:你可以寻求增加人力资源或外包一部分工作,以增强团队的能力和效率。这样做的理由是通过增加资源,可以更好地满足项目的要求并加快开发速度。优点是可以提供更多的人力资源,加快项目进展;缺点是可能需要额外的成本投入,并且需要管理外包团队的协调与沟通。

  • 与利益相关者沟通并重新协商项目要求:你可以与项目的利益相关者进行沟通,并重新协商项目的要求和交付期限。这样做的理由是通过重新协商,可以调整项目的目标和约束条件,以达到更合理的目标。优点是可以为项目提供更合理的期望,并减轻团队的压力;缺点是可能需要妥协一些项目要求,并与利益相关者进行复杂的谈判和沟通。

  • 延期或取消项目:如果在评估后发现无法在现有的约束条件下完成项目,并且其他选择都不可行,你可能需要考虑延期项目或取消项目。这样做的理由是项目目前的约束条件无法满足要求,延期或取消可能是避免更大风险和损失的最佳选择。优点是可以避免项目失败或质量问题;缺点是可能会损失已经投入的资源和努力,并对利益相关者产生不良影响。

选择哪种方案取决于项目的具体情况和你对风险的评估。在做出选择时,应该综合考虑项目的目标、质量、利益相关者的期望以及团队的能力和资源情况。还应该与项目组成员、利益相关者进行充分的沟通和讨论,以便做出明智的决策,并采取适当的行动来解决项目的困境。

10、什么是黑盒测试法?

黑盒测试法(Black-box testing)是一种软件测试方法,其中测试人员不考虑内部实现细节和代码逻辑,而是基于软件的输入和输出来评估软件的功能和性能。在黑盒测试中,测试人员将软件视为一个黑盒子,只关注输入和输出之间的关系,而不需要了解内部的工作原理。

 黑盒测试方法主要关注以下方面:

  • 功能测试:验证软件是否按照需求规格说明书中规定的功能工作,检查输入数据是否能产生正确的输出结果。

  • 边界值测试:测试软件在边界条件处的行为,包括最小值、最大值、临界值和非法值等。

  • 错误处理测试:测试软件对于错误和异常情况的处理能力,包括错误提示、恢复机制和日志记录等。

  • 性能测试:评估软件在不同负载和压力条件下的性能和响应时间。

  • 用户界面测试:验证软件的用户界面是否符合设计要求,是否易于使用和导航。

 通过黑盒测试,可以发现软件中的功能缺陷、逻辑错误、接口问题和性能瓶颈等。这种测试方法不需要了解软件的内部实现细节,更侧重于对软件功能和外部行为的评估。因此,黑盒测试可以由测试人员独立进行,不依赖于开发人员的知识或代码的访问权限。

11、什么是白盒测试法?

白盒测试法(White-box testing)是一种软件测试方法,其中测试人员具有对软件内部结构和代码的详细了解,并使用这些知识来设计测试用例和评估软件的功能和质量

 在白盒测试中,测试人员可以查看软件的内部逻辑、数据结构和算法,以了解程序是如何处理输入并生成输出的。测试人员可以直接访问源代码、控制流程图和数据流图等开发文档,以及使用调试工具和技术来检查软件的执行过程。

 白盒测试方法主要关注以下方面:

  1. 语句覆盖:确保测试用例能够覆盖软件中的每个语句。

  2. 判定覆盖:测试用例能够覆盖每个判断条件的所有可能结果。

  3. 路径覆盖:测试用例能够覆盖软件中的每条可能路径。

  4. 条件覆盖:测试用例能够覆盖每个条件的所有可能取值。

 通过白盒测试,可以检测软件中的逻辑错误、数据错误、控制流错误和性能问题等。白盒测试依赖于对软件内部实现的详细了解,因此通常由开发人员或具有开发背景的测试人员执行。白盒测试可以在软件开发的早期阶段进行,帮助开发人员及时发现和修复问题,提高软件的质量和可靠性。

12、以下是三个类的代码片段,请根据代码信息,说说在 RootedTreeClass 类已经通过测试的情况下,BinaryTreeClass 和 BalanceBinaryTreeClass 该如何测试。

class RootedTreeClass
{	...
	void displayNodeContents(Node a);
	void printRoutine(Node b);
	//...
}

class BinaryTreeClass extends RootedTreeClass
{	...
	void displayNodeContents(Node a);
	//...
}

class BalanceBinaryTreeClass extends BinaryTreeClass
{	...
	void printRoutine(Node b);
	//...
}

 根据代码片段提供的信息,可以进行以下测试:

 BinaryTreeClass 的测试:
 由于 BinaryTreeClass 是 RootedTreeClass 的子类,并继承了 displayNodeContents(Node a) 方法,可以针对该方法进行测试,以确保在 BinaryTreeClass 中的实现是否正确。测试时可以创建一个 BinaryTreeClass 的实例,调用 displayNodeContents(Node a) 方法,并验证输出结果是否符合预期。

 BalanceBinaryTreeClass 的测试:
 BalanceBinaryTreeClass 是 BinaryTreeClass 的子类,并继承了 printRoutine(Node b) 方法。在测试 BalanceBinaryTreeClass 时,需要对 printRoutine(Node b) 方法进行测试,以验证其在 BalanceBinaryTreeClass 中的实现是否正确。测试时可以创建一个 BalanceBinaryTreeClass 的实例,调用 printRoutine(Node b) 方法,并检查输出结果是否符合预期。

 需要注意的是,由于 BalanceBinaryTreeClass 是 BinaryTreeClass 的子类,而 BinaryTreeClass 又是 RootedTreeClass 的子类,所以在测试 BalanceBinaryTreeClass 时,也应该考虑继承自父类的方法和功能是否正常工作。可以选择一些典型的测试用例,对继承自父类的方法进行测试,以确保继承关系的正确性。

 总结:在已经通过测试的情况下,针对 BinaryTreeClass 和 BalanceBinaryTreeClass,主要测试继承自父类的方法的正确性。对于 BinaryTreeClass,测试 displayNodeContents(Node a) 方法;对于 BalanceBinaryTreeClass,测试 printRoutine(Node b) 方法,并确保继承关系的正确性。

13、公司了解到客户需求不明确,在签订合同时故意提出一个低报价,待客户将来提出需求变更时再索要高价。你认为这样做道德吗?

  1. 需求管理:软件工程的一个重要方面是需求管理,确保准确理解和明确客户的需求。在这种情况下,公司故意提出低报价,暗示满足客户需求,但实际上意图在未来变更需求时索要高价。这种欺骗行为会导致需求不明确,增加开发团队的工作量和风险,可能会导致项目延迟或失败。

  2. 伦理和职业道德:软件工程师应该遵守伦理和职业道德准则。这包括诚实、透明和公正地与客户和利益相关者合作。提出低报价然后在未来变更需求时索要高价是不诚实和不公正的行为,违背了软件工程师的职业道德准则。

  3. 项目管理:在软件项目中,良好的项目管理是确保项目成功的关键。提供准确的成本估计和合理的定价对于项目的成功非常重要。故意提出低报价可能导致项目的预算不足,无法满足客户的期望,并可能导致项目失败。

  4. 风险管理:软件工程包括对项目风险的管理和评估。故意提出低报价然后索要高价会增加项目的风险,可能导致不满意的结果和客户不满。

14、“2022年全国多地出现的本土新冠肺炎确诊病例,依旧时刻年动着大众的心,疫情这三年,在缺乏新冠特效药,仅以疫苗和核酸撑起全民防疫的时间里,“隔离”,“保持距离”、“外出戴口罩”等,都在强调一种防范措施:减少与病毒的正面对抗。5月25日,人工智能制药公司英矽智能(Insilico Medicine)宣布,凭借其AI平台,发现了一款就向主蛋白酶(3CL)的全新临床前候选药物,用于治疗新型冠状病毒引起的肺炎。作为人工智能制药领域的明星企业,英矽智能自2021年以来已经发现了8款临床前候选药物。成为国内为数不多的将研发项目推进到临床阶段的AI制药公司。目前,英矽智能上海JLABs的生物学实验室,主攻靶点验证。苏州也正在建设英砂智能的智能机器人实验室,将最大限度实现湿实验自动化,为靶点发现以及化合物筛选提供高效的实验验证。而实验中收集到的数据,也将被处理分析,促进Al平台的迭代。
 正如英砂智能创始人兼首席执行官 Alex Zhavoronkov 博士表示,“疫情大流行的背景下,全球都在关注快速开发新冠药物的迫切医疗需求。我们在疫情早期就下定决心要推进新冠药物的研发,期待与学术界和产业界联动,展示AI工具在人类与疾病斗争中的强大力量。”
 阅读上述材料:
(1)社会、健康、安全、环境、法律、文化等现实元素将对软件项目产生深远影响,谈谈你对这个项目可行性的理解。
(2)若你是这个利用AI平台研制靶向药物分子式项目的负责人,团队积累了大量的案研数据集用于AI算法的训练学习,项目是研究和探索性质的,预计在一年后能够形成优化后的产品。请问你会以何种方式组织你的团队成员?为什么?

(1) 这个项目可行性的理解:
 该项目是利用人工智能平台进行新冠肺炎药物研发的探索性项目。考虑到社会、健康、安全、环境、法律、文化等现实元素对软件项目的影响,以下是对项目可行性的理解:

  • 社会影响:疫情对全球社会造成了巨大的影响,对新冠药物的需求迫切。该项目可以为社会提供一种新的药物研发方法,可能对抗疫情产生积极的社会影响。
  • 健康影响:新冠肺炎对全球人类健康构成了严重威胁。该项目旨在研发治疗新冠肺炎的药物,如果成功,将对健康产生积极影响,降低患者病情严重程度和死亡率。
  • 安全影响:在药物研发过程中,确保药物的安全性是至关重要的。项目需要遵守相关法律法规和伦理准则,确保药物的安全性和有效性。
  • 环境影响:项目本身在软件开发和数据处理过程中不会对环境产生直接影响。然而,在实验室阶段可能需要使用化学试剂和生物材料,需要遵守环境保护的相关规定和标准。
  • 法律影响:药物研发涉及众多法律方面的规定,包括知识产权、临床试验、药物注册等。项目需要遵守国家和地区的相关法律法规,确保合规性和合法性。
  • 文化影响:不同地区对药物研发和使用有不同的文化和习俗。项目需要充分尊重和考虑当地文化的特点,与相关利益相关者进行合作,确保项目在文化层面上的可行性。

 综上所述,项目的可行性取决于多个方面的影响因素,包括社会、健康、安全、环境、法律和文化等现实元素。团队需要全面评估这些因素,确保项目在各方面具备可行性。

(2) 若我是这个利用AI平台研制靶向药物分子式项目的负责人,我会采取以下方式组织团队成员:

  • 跨学科团队:由具有不同专业背景和技能的成员组成,包括药学、生物学、计算机科学等领域的专家和研究人员。这样的团队可以充分发挥各自的专业优势,在不同领域之间进行合作和知识交流。

  • AI算法专家:团队需要拥有具备深度学习和人工智能算法方面的专家,能够熟练应用AI算法进行数据分析和模型训练。他们可以负责开发和优化AI算法,以支持药物分子式的预测和筛选工作。

  • 实验室研究人员:在药物研发过程中,需要进行实验室实验验证。团队应该有一支实验室研究人员团队,负责样本采集、生物实验和数据收集。他们将协助AI算法的训练和验证,并确保实验过程的合规性和准确性。

  • 临床专家:在项目进展到临床阶段时,需要有临床专家加入团队。他们可以提供临床实践的经验和指导,确保药物研发符合临床要求和标准。

  • 项目管理人员:负责整个项目的规划、组织、协调和监控。项目管理人员应具备项目管理知识和经验,能够确保项目按时、按质完成,并协调各个团队成员之间的合作。

 通过以上方式组织团队成员,可以充分发挥每个成员的专业优势,并促进团队之间的协作与合作。同时,团队成员之间的多样性和跨学科性也有助于提供全面的解决方案和创新思维,推动项目的顺利进行和取得预期成果。

综合题

1、某公司正在进行一个软件开发项目,项目计划总工作量为800人小时,预算为10000美元。已经进行了200人小时的工作,实际花费为3000美元。请使用挣值分析计算以下指标,并分析项目的绩效:

  • 计划值(Planned Value,PV)
  • 实际值(Actual Cost,AC)
  • 挣值(Earned Value,EV)
  • 成本偏差(Cost Variance,CV)
  • 成本偏差率(Cost Variance Percentage,CV%)
  • 进度偏差(Schedule Variance,SV)
  • 进度偏差率(Schedule Variance Percentage,SV%)

请根据给定的数据计算上述指标,并对项目的绩效进行分析。

根据挣值分析的公式,可以计算以下指标:

  • 计划值(Planned Value,PV)= 项目计划总工作量 * 计划完成比例 = 800 * 200 / 800 = 200美元
  • 实际值(Actual Cost,AC)= 实际花费 = 3000美元
  • 挣值(Earned Value,EV)= 实际完成的工作量 * 计划单价 = 200 * 10000 / 800 = 2500美元
  • 成本偏差(Cost Variance,CV)= 挣值 - 实际值 = 2500 - 3000 = -500美元
  • 成本偏差率(Cost Variance Percentage,CV%)= 成本偏差 / 挣值 = -500 / 2500 = -20%
  • 进度偏差(Schedule Variance,SV)= 挣值 - 计划值 = 2500 - 200 = 2300美元
  • 进度偏差率(Schedule Variance Percentage,SV%)= 进度偏差 / 计划值 = 2300 / 200 = 1150%

根据以上指标,可以分析项目的绩效如下:

  • 项目的成本偏差为负值,成本偏差率为-20%,说明项目的实际成本超出了预算,存在成本超支的风险。
  • 项目的进度偏差为正值,进度偏差率为1150%,说明项目的实际进度超前于计划,存在进度提前的机会。

综合来看,尽管项目的成本超出了预算,但项目的进度超出了计划值,表示在这个时间点上项目的绩效整体上是较好的。然而,仍然需要关注成本超支的情况,并采取适当的措施来控制项目的成本。

2、假设你正在设计一个自动售货机的软件系统。该售货机根据货物的种类和支付方式来确定出货和找零的逻辑。根据以下规则,请填写完整的判定表:

规则:

  • 如果货物种类是饮料且支付方式是现金,则出货并找零。
  • 如果货物种类是零食且支付方式是现金,则出货并找零。
  • 如果货物种类是饮料且支付方式是刷卡,则出货但不找零。
  • 如果货物种类是零食且支付方式是刷卡,则出货但不找零。
  • 如果货物种类是其他且支付方式是现金,则不出货。
  • 如果货物种类是其他且支付方式是刷卡,则不出货。

请根据以上规则填写完整的判定表。

判定表如下:

货物种类支付方式出货找零
饮料现金
饮料刷卡
零食现金
零食刷卡
其他现金-
其他刷卡-

3、某单位招收暑假实习生,方案为:
 ①如果该学生的校内成绩为优秀,则直接录用。
 ②如果该学生的校内成绩为良好,同时导师推荐成绩为良及以上,则直接录用。
 ③如果该学生的校内成绩为中等,同时导师推荐成绩为良及以上,则直核录用。
 ④如果该学生的校内成绩为中等,同时导师推荐成绩为中,则需要考试。
 ⑤如果该学生的校内成绩为及格,同时导师推荐成绩为良及以上,则需要考试。
 ⑥如果该学生的校内成绩为及格,同时导师推荐成绩为中及以下,则拒绝录用。
 ⑦如果该学生的校内成绩为中等,同时导师推荐成绩为中以下。 则拒绝录用。
用判定表表述上述方案。

根据给定方案,可以使用判定表来表述。判定表由条件和动作组成,根据不同的条件组合确定相应的动作。以下是根据方案描述的判定表:

校内成绩导师推荐成绩录用/考试/拒绝录用
优秀-录用
良好良及以上录用
中等良及以上直核录用
中等考试
及格良及以上考试
及格中及以下拒绝录用
中等中以下拒绝录用

根据上述判定表,可以根据学生的校内成绩和导师推荐成绩确定相应的录用动作,或者需要进行考试,或者拒绝录用。

4、已知被测试模块的C语言源程序如下:

#include<stdio.h>
int main(void) {
	int a, b, c;
	scanf("%d%d%d", &a, &b, &c);
	if(a>=0)
		printf("1\n");
	if(a>5 && (b<5 || c!=5))
		printf("2\n");
	else
		printf("3\n");
	return 0;
}

(1)画出该程序对应的流图。
(2)上述程序有几条独立路径,即求环路复杂性:V(G)的值。
(3)设计一组测试用例以强制执行每条独立路径:必须列出测试用例的输入数据和所经
过的路径。
(4)设计满足“判定、条件”覆盖的一组最少的测试用例并说明符合的理由。

(1)对程序进行标号:
在这里插入图片描述
该程序对应的流图如下:
在这里插入图片描述

(2)程序中存在4条独立路径。

(3)设计测试用例以强制执行每条独立路径:

  • 路径1: a = 1, b = 1, c = 1
  • 路径2: a = 6, b = 4, c = 5
  • 路径3: a = 6, b = 4, c = 6
  • 路径4: a = -1, b = 1, c = 1

(4)
测试用例:

  • 路径1: a = 1, b = 1, c = 1
  • 路径2: a = 6, b = 4, c = 5

使用路径1和路径2的测试用例即可实现"判定、条件"覆盖。因为路径1和路径2涵盖了所有的判定和条件语句。

5、某经营文具用品企业需要构建一个在线购物系统,下图是某个用户通过系统下订单的效果图。
我的全部订单
订单编号:2016010008625
订单生成时间:2022-05-22 18:20:15
送货地址:福州市大学城区学院路2号
付款方式:货到付款

商品编号商品名称购买数量单价(元)
A0023涂改带205.00
B04210.7mm签字笔103.00
B04220.5mm签字笔102.50

总价:155.00
(1)要达到这样的效果,该如何设计相关类?给出主要类图
(2)为了促销,该企业决定推出618活动:满100元减5元、满200元减15元、满300元减30元。考虑到将来还会有双十一、双十二等不同促销手段的活动,你将如何修改设计方案,以适应上述要求?给出设计方案并说明运用了哪些设计原则。

(1) 主要类图设计如下:
在这里插入图片描述
(2)为了促销,可以使用策略模式来修改设计方案,以适应不同的促销手段。策略模式是一种行为型设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法独立于使用它的客户端。
 具体来说,可以定义一个抽象类或接口促销策略,它有一个抽象方法计算优惠金额。然后定义不同的促销策略类,如618活动、双十一活动等,它们都实现或继承促销策略类,并重写计算优惠金额方法。最后,在订单类中增加一个属性促销策略,并在计算总价方法中调用促销策略的计算优惠金额方法。
 这样做的好处是,可以根据不同的活动动态地选择不同的促销策略,而不需要修改订单类的代码。这符合开闭原则(对扩展开放,对修改关闭)和单一职责原则(每个类只负责一件事)。
 修改后的设计方案如下:
在这里插入图片描述

6、假定你是一个项目管理者,受命为一个小型软件项目进行挣值统计。这个项目共计划需要 200 人日才能完成,下面给出相关进度安排数据(单位:人日)。
 目前有5个工作任务已经完成,但是按照项目进度,现在应该完成7个工作任务。
 请计算:该项目的计划完成任务 BCWS、实际完成任务 BCWP、进度表执行指标 SPI、进度偏差 SV、预定完成百分比、完成百分比、已经完成任务 ACWP、成本执行指标 CPI和成本偏差 CV,并说说你认为该团队的现状如何。

任务计划工作量实际工作量
168
21618
345
4129
553
616——
713——

根据给出的进度安排数据,我们可以计算以下指标:

  • 计划完成任务(BCWS):按照项目进度,目前应该完成的任务数。
    BCWS = 计划工作量之和 = 6 + 16 + 4 + 12 + 5 + 16 + 13 = 72 人日
  • 实际完成任务(BCWP):目前已经完成的任务数。
    BCWP = 实际工作量之和 = 8 + 18 + 5 + 9 + 3 = 43 人日
  • 进度表执行指标(SPI):衡量实际完成任务与计划完成任务的比例。
    SPI = BCWP / BCWS = 43 / 72 ≈ 0.597
  • 进度偏差(SV):实际完成任务与计划完成任务之间的差异。
    SV = BCWP - BCWS = 43 - 72 = -29 人日
  • 预定完成百分比:已经完成的任务百分比。
    预定完成百分比 = BCWP / BCWS * 100% = 43 / 72 * 100% ≈ 59.72%
  • 完成百分比:已经完成的任务百分比。
    完成百分比 = (已经完成的任务数 / 总任务数) * 100% = (5 / 7) * 100% ≈ 71.43%
  • 已经完成任务(ACWP):已经完成的工作量之和。
    ACWP = 实际工作量之和 = 8 + 18 + 5 + 9 + 3 = 43 人日
  • 成本执行指标(CPI):实际完成工作量与预算之间的比例。
    CPI = BCWP / ACWP = 43 / 43 = 1
    成本偏差(CV):实际完成工作量与预算之间的差异。
    CV = BCWP - ACWP = 43 - 43 = 0

根据计算的指标:

  • 进度表执行指标 (SPI) 小于 1,表示项目进度滞后于计划。
  • 进度偏差 (SV) 为负值,表示项目进度落后于计划。
  • 预定完成百分比小于完成百分比,也说明项目进度滞后于计划。
  • 成本执行指标 (CPI) 等于 1,表示实际完成工作量与预算相符。
  • 成本偏差 (CV) 为零,表示实际成本与预算相符。

综上所述,该团队目前的现状是项目进度滞后于计划,但成本控制良好,实际完成工作量与预算一致。需要采取措施加快进度,以保证项目按时完成。

7、现有一段程序如下图,要求:
(1)给出以上程序对应程序控制流图(自行在代码上标出测试节点编号)。
(2)本段程序存在多少个独立路径?
(3)给出一组包含全部独立路径的测试集。

void task(int x, int y)
{
	int a;
	while(x<y)
	{
		if( (x<1)&&(y<10) )
		{
			y = x + y;
		}
		if( (x == 5)||(y>8) )
		{
			a = x*y;
		}
		x++;
	}
	printf("%d, %d, %d", x, y, a);
}

(1)以下是给定程序的控制流图(包括标注的测试节点编号):
在这里插入图片描述
在这里插入图片描述

(2)该程序存在 4 个独立路径。

(3)给出一组包含全部独立路径的测试集:

输入数据预期输出结果覆盖的独立路径
x = 5, y = 4x = 5, y = 4, a = 20路径1
x = -1, y = 9x = 9, y = 8, a = -9路径2
x = 5, y = 9x = 6, y = 9, a = 45路径3
x = -1, y = 11x = -1, y = 11, a = -11路径4

8、互联网技术和智能手机的普及,使得人们出行方式发生了改变,人们可以通过叫车系统呼叫或预约汽车,送顾客到目的地,系统根据行程的距离、用车时段、车型以及是否拼车等方式计算出行费用,用户到达目的地后再结算费用并评价司机服务。其中叫车系统提供三种出行方案:快车、出租车和顺风车。其中快车方式,用户可以选择车型,不同车型价格不同;出租车方式,用户可以添加调度费来召唤出租车;顺风车方式,用户可以选择是否拼车。如果用户的用车时间恰恰是在高峰时段,那么总费用将上浮40%。用户可以通过充值的方式给自己账户充钱,也可以通过绑定银行卡的方式,结算费用时直接扣去银行卡余额。叫车系统对于司机需要认证,主要通过身份证和机动车驾驶证,同时,根据用户用车后的评价,给予司机奖励和提成,差评率高的司机将进入黑名单,好评率高的司机将优先推荐。
(1)使用用例图表述系统的功能。
(2)使用类图表述支撑系统功能的主要分析类和类间关系,每个类要给出必要的属性与操作。
(3)分析系统第0层和第1层的数据流图。

(1)用例图
在这里插入图片描述
(2)类图
在这里插入图片描述
(3)数据流图
 第0层数据流图:
在这里插入图片描述
 第1层数据流图:
在这里插入图片描述

9、

void quick_ sort(int data[], int low, int high)
{
int i, j, pivot;
if (low < high)
{
 pivot=data[low]; 
 i=low;
 j=high;
while(i<j)
{
 while(i<j && data[j]>=pivot)
  j--;
 if(i<j)
  data[i++]=data[j]; //将比枢轴记录小的记录移到低端
 while (i<j && data[i]<=pivot)
  i++;
 if(i<j)
  data[j--]=data[i]; //将比枢轴记录大的记录移到高端
}
 data[i]=pivot; //枢轴记录移到最终位置
 quick_sort(data, low, i-1);
 quick_sort(data, i+1, high);
}
}

以上为一个快速排序算法的代码段,请你采用基本路径测试方法进行测试。
要求:
①画出相应的程序控制流图;
②分析该段程序的环路复杂性;
③什么是独立路径?给出该程序的一组独立路径。

(1)
在这里插入图片描述
(2)程序的环路复杂性为4,表示需要至少执行4条独立路径才能覆盖所有的语句和分支。
(3)以下是一组独立路径:

  • Start -> if (low < high) -> while (i < j) -> while (i < j && data[j] >= pivot) -> if (i < j) -> data[i++] = data[j] -> while (i < j && data[i] <= pivot) -> if (i < j) -> data[j–] = data[i] -> data[i] = pivot -> quick_sort(data, low, i-1) -> Return
  • Start -> if (low < high) -> while (i < j) -> while (i < j && data[j] >= pivot) -> if (i < j) -> data[i++] = data[j] -> quick_sort(data, low, i-1) -> quick_sort(data, i+1, high) -> Return

这是两个独立路径的示例,覆盖了程序中的所有语句和分支。

  • 21
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: 嵌入式软件工程师是一种专业的软件工程师,他们主要从事于嵌入式系统开发。嵌入式系统是指嵌入于其他产品中以完成特定功能的电路系统和软件系统。嵌入式软件工程师需要掌握多种编程语言,如C语言、C++、汇编语言和其他高级语言。同时,他们需要掌握嵌入式系统的硬件原理和工作原理。 对于嵌入式软件工程师来说,试题主要包括几个方面。首先是嵌入式系统的基础知识,例如系统的结构、组成部分、软硬件接口、中断和时钟等方面。接着是熟练掌握C语言编程,包括指针、数组、结构体和函数等内容。此外,还需要熟悉协议栈的相关知识,如TCP/IP、RS232、RS485等。同时,了解嵌入式系统的调试和测试方法是必要的。 对于企业而言,拥有优秀的嵌入式软件工程师可以极大地提高产品的竞争力和市场占有率。因此,在职场中,嵌入式软件工程师的职业前景非常广阔,其薪资水平也相对较高。但是,能否成为合格的嵌入式软件工程师,取决于其专业知识和实践能力的积累。 ### 回答2: 嵌入式软件工程师试题需要具备以下几方面的技能和知识: 1. 熟悉计算机操作系统和嵌入式系统的原理和应用,具备嵌入式系统开发和调试经验。 2. 熟悉C语言及其编译器系统,掌握基本算法和数据结构,擅长利用硬件资源进行系统开发。 3. 熟悉单片机架构,能够进行底层芯片编程和开发,包括通信接口和外设控制等。 4. 熟悉嵌入式系统标准协议,如TCP/IP协议,串口通讯协议等。 5. 具备团队协同和沟通能力,良好的学习和自我提升能力。 在面试过程中,可以通过技术性笔试、手写代码、项目经验等方式来考察应聘者的技能和知识水平。在面试中重点考察面试者的思路和解决问题的能力,看是否能够从问题中提取关键信息,对问题进行分析和解决。同时,需要了解面试者的学习能力和自我提升能力,以确保其能适应不断变化的市场需求和技术要求。 ### 回答3: 嵌入式软件工程师是一种专门从事嵌入式系统软件设计、开发、测试等工作的职业,需要具备扎实的计算机基础、丰富的编程经验以及深入的嵌入式系统技术知识。在csdn上面的嵌入式软件工程师试题,主要测试面试者的技术水平、工作经验以及解决实际问题的能力。 这些试题涵盖了各种嵌入式系统开发技术,例如C语言编程、嵌入式架构设计、嵌入式操作系统、通信接口、调试技术等等。对应的题型也包括选择、填空、编程、设计等不同类型,从而全面考察面试者的知识广度和深度。 在应对这些试题时,面试者需要有很强的逻辑思维能力和独立解决问题的能力,能够从工程实际出发,分析问题、提出解决方案,并深入思考性能优化、效率提升、安全保障等实际问题,从而更好地满足嵌入式系统的实际需求。 总之,嵌入式软件工程师试题所考察的技能和能力是非常丰富和全面的,需要面试者具备扎实的理论基础和实践经验,同时在实践解决问题时注重细节、性能和效率等。对于嵌入式软件工程师而言,不断学习和技术提升才能更好的胜任这项职业。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值