📜  前 50 名软件工程面试问题和答案

📅  最后修改于: 2022-05-13 01:57:00.662000             🧑  作者: Mango

前 50 名软件工程面试问题和答案

软件工程确实是每个渴望在 IT 行业获得成功的软件工程师软件开发人员等职业的人必去的领域。简而言之,它涉及对软件系统的设计、开发、操作和维护的系统和全面的研究。在几乎所有知名科技公司的技术面试中,招聘人员都会从软件工程概念(如软件开发模型和架构、软件项目管理(SPM)、测试和调试等)提出各种问题来评估候选人。因此,您必须为所有此类软件工程面试问题做好准备才能通过面试。

软件工程面试问答

我们知道软件工程本身就是一个广阔的领域,找出并准备面试中的所有重要概念或问题并非易事。因此,为了让您更轻松、更方便,我们在此为您提供招聘人员经常询问的常见软件工程面试问题的详尽列表。请检查以下所有这些问题:

1. 什么是软件再工程?

软件再造是以新的方式扫描、修改和重新配置系统的过程。应用在软件开发过程中的再造原理称为软件再造。它对软件成本、质量、客户服务和运输速度有积极影响。软件再造改进软件以更有效地创建它。

有关详细信息,请参阅什么是软件再工程?。

2. 软件的特点是什么?

软件有很多特点:

  • 软件被开发或设计;它不是经典意义上的制造:
    • 尽管软件开发和硬件制造之间存在一些相似之处,但很少有活动是根本不同的。
    • 在这两项活动中,高质量是通过良好的设计实现的,但硬件的制造阶段会比软件引入质量问题。
  • 该软件不会“磨损”。
    • 硬件组件受到许多其他环境因素日益严重的影响。简单地说,硬件开始磨损。
    • 软件不易受到导致硬件磨损的环境疾病的影响。
    • 当硬件组件磨损时,它会被备件替换。
    • 没有软件备件。
    • 每个软件故障都表明设计或将设计转换为机器可执行代码的过程中存在错误。因此,适应变更请求的软件维护任务比硬件维护复杂得多。然而,含义很明确——软件不会磨损。但它确实恶化了。
  • 该软件继续定制:
    • 软件部分的计划和执行应该以它倾向于在各种项目中重用为目标。
    • 当前的可重用段封装了这两个信息以及应用于信息的准备工作,使程序员能够从可重用部分制作新的应用程序。
    • 在硬件世界中,组件重用是工程过程的自然组成部分

有关详细信息,请参阅以下文章软件工程特性。

3.活动哪些活动?

软件工程过程框架的活动由各种更高层次的活动补充。伞式活动通常适用于整个软件项目,并帮助软件团队管理和控制进度、质量、变更和风险。常见的顶级活动包括软件项目跟踪和控制风险管理、软件质量保证技术评审测量软件配置管理可重用性管理工作产品准备和生产等。

4. 什么是内聚和耦合?

内聚度表示模块的相对功能容量。聚合模块需要与程序其他部分的其他部分进行较少的交互来执行单个任务。可以说只需要运行一个凝血模块(理想情况下)。内聚力是衡量模块功能强度的指标。一个高内聚低耦合的模块在功能上独立于其他模块。在这里,功能独立意味着一个有凝聚力的模块执行单个操作或函数。耦合意味着模块之间的整体关联。

耦合依赖于通过接口传递的信息以及在其中创建对节或模块的引用的模块之间的接口的复杂性。高耦合支持 低耦合模块假定实际上没有其他模块。当两个模块交换大量信息时,它特别相关。两个模块之间的耦合程度取决于接口的复杂性。

有关详细信息,请参阅以下文章耦合和内聚。

5. SDLC 的各个阶段是什么?

SDLC阶段:

  • 需求收集与分析
  • 设计
  • 实现和编码
  • 测试
  • 部署
  • 维护

有关详细信息,请参阅以下文章软件开发生命周期。

6 、各种CASE工具的名称是什么

  • 需求分析工具
  • 结构分析工具
  • 软件设计工具
  • 代码生成工具
  • 测试用例生成工具
  • 文件制作工具
  • 逆向工程工具

更多详细信息,请参阅以下文章计算机辅助软件工程(CASE)。

7. 什么是黑盒测试?

黑盒测试(也称为传导测试封闭盒测试不透明盒测试)以软件有用的先决条件为中心。换句话说,可以通过尝试完美地发现和满足所有必需品来猜测一组有助于程序的信息条件。没有选择黑盒测试的白盒程序。也许它是一种互补的方法,也许白盒方法会揭示其他类的错误。

有关详细信息,请参阅以下文章软件工程 - 黑盒测试。

8. 什么是白盒测试?

白盒测试是一种分析软件的内部结构、使用的数据结构、内部设计、代码结构和行为以及黑盒测试等功能的方法。也称为玻璃盒测试或透明盒测试或结构测试。

有关详细信息,请参阅以下文章软件工程 - 白盒测试。

9. 什么是可行性研究?

软件工程的可行性研究是一项评估拟议项目和系统的充分性的研究。可行性研究是从有效性分析或实践的角度衡量产品开发如何使组织受益的软件产品。出于多种目的进行可行性研究,以分析软件产品在开发、移植、组织项目的贡献等方面的正确性。

有关详细信息,请参阅以下文章软件项目开发中的可行性研究类型文章。

10. 质量保证和质量控制有什么区别?

Quality Assurance (QA)

Quality Control (QC)

It focuses on providing assurance that the quality requested will be achieved.It focuses on fulfilling the quality requested.
It is the technique of managing quality.It is the technique to verify quality.
It does not include the execution of the program.It always includes the execution of the program.
It is a managerial tool.It is a corrective tool.
It is process-oriented.It is product-oriented.
The aim of quality assurance is to prevent defects.The aim of quality control is to identify and improve the defects.
It is a preventive technique.It is a corrective technique.
It is a proactive measure.It is a reactive measure.
It is responsible for the full software development life cycle.It is responsible for the software testing life cycle.
Example: VerificationExample: Validation

11. Verification 和 Validation 有什么区别?

Verification

Validation

Verification is a static practice of verifying documents, design, code, black-box, and programs human-based.Validation is a dynamic mechanism of validation and testing the actual product.
It does not involve executing the code.It always involves executing the code.
It is human-based checking of documents and files.  It is computer-based execution of the program.
Verification uses methods like inspections, reviews, walkthroughs, and Desk-checking, etc.  Validation uses methods like black box (functional) testing, gray box testing, and white box (structural) testing, etc.
Verification is to check whether the software conforms to specifications. Validation is to check whether the software meets the customer’s expectations and requirements.
It can catch errors that validation cannot catch.It can catch errors that verification cannot catch.
Target is requirements specification, application and software architecture, high level, complete design, and database design, etc. Target is an actual product-a unit, a module, a bent of integrated modules, and an effective final product.
Verification is done by QA team to ensure that the software is as per the specifications in the SRS document. Validation is carried out with the involvement of the testing team
It generally comes first done before validation. It generally follows after verification.
It is low-level exercise.It is a High-Level Exercise.

有关更多详细信息,请参阅以下文章软件工程 - 验证和验证。

12.什么是逆向工程?

软件逆向工程是从分析产品的代码中恢复产品的设计、需求规格和功能的过程。它建立一个程序数据库并从中生成信息。逆向工程的目的是通过提高系统的可理解性并为遗留系统生成必要的文档来促进维护工作。

逆向工程目标:

  • 应对复杂性。
  • 恢复丢失的信息。
  • 检测副作用。
  • 合成更高的抽象。
  • 促进重用。

有关详细信息,请参阅以下文章软件工程 - 逆向工程。

13. 什么是 SRS?

软件需求规范(SRS)格式是对软件系统成功开发所需满足的软件需求的完整规范和描述。这些需求可以是功能性的,也可以是非需求性的,具体取决于需求的类型。不同客户和承包商之间的互动是因为需要充分了解客户的需求。有关详细信息,请参阅软件需求规范格式文章。

14. 区分 Alpha 和 Beta 测试。

Alpha Testing

Beta Testing

Alpha testing involves both white box and black box testing.Beta testing commonly uses black-box testing.
Alpha testing is performed by testers who are usually black,it -box internal employees of the organization.Beta testing is performed by clients who are not part of the organization.
Alpha testing is performed at the developer’s site.Beta testing is performed at the end-user,  the of the product.
Reliability and security testing are not checked in alpha testing.Reliability, security, and robustness are checked during beta testing.
Alpha testing ensures the quality of the product before forwarding it to beta testing.Beta testing also concentrates on the quality of the product but collects the user’s time-long input on the product and ensures that the product is ready for real-time users.
Alpha testing requires a testing environment or a lab.Beta testing doesn’t require a testing environment or lab.
Alpha testing may require a real-time long execution cycle.Beta testing requires only a few weeks of execution.
Developers can immediately address the critical issues or fixes in alpha testing.Most of the issues or feedback collected from the beta testing will be implemented in future versions of the product

有关详细信息,请参阅以下文章 Alpha 测试和 Beta 测试。

15. 系统模型构建需要考虑哪些要素?

软件的类型和规模、参考前人的使用经验、获取用户需求的难易程度、开发技术和工具、开发团队的情况、开发风险、软件开发方法等。设计合理、合适的软件开发计划是保证软件开发成功的重要前提。

16.什么是 CASE 工具?

CASE 代表计算机辅助软件工程。 CASE 工具是一套自动化软件应用程序,用于支持、加速和平滑 SDLC 活动。

17. RAD 模型的局限性什么?

  • 对于大型但可扩展的项目,RAD 需要足够的人力资源。
  • 如果开发人员和客户没有在大大缩短的时间范围内承诺,项目就会失败。
  • 如果系统不能模块化,就会出现问题

有关详细信息,请参阅以下文章软件工程 - 快速应用程序开发模型 (RAD)。

18.螺旋模型的缺点是什么?

  • 使用起来可能是一个昂贵的模型。
  • 风险分析需要高度专业的专业知识。
  • 项目的成功很大程度上取决于风险分析阶段。
  • 不适用于较小的项目

更多详细信息,请参阅以下文章软件工程 - 螺旋模型。

19.什么是COCOMO模型?

COCOMO 模型代表建设性成本模型。与所有估计模型一样,它需要大小信息并以三种形式接受:

  • 对象点
  • 函数点
  • 源代码行

更多详细信息,请参阅以下文章软件工程 - COCOMO 模型。

20.基本 COCOMO 模型中定义有机软件的软件开发工作量估算

基本 COCOMO 模型中有机软件的软件开发工作量估计定义为

Organic: Effort = 2.4(KLOC) 1.05 PM

21.什么是敏捷软件开发模式?

敏捷 SDLC 模型是迭代和增量流程模型的组合,重点是通过快速交付工作软件产品来提高流程适应性和客户满意度。敏捷方法将产品分解为小的增量构建。每次迭代都涉及跨职能团队同时在规划、需求分析、设计、编码、单元测试和验收测试等各个领域工作。

优点:

  • 通过快速、持续地交付有用的软件来满足客户的需求。
  • 客户、开发人员和测试人员不断地相互交流。
  • 业务人员和开发人员之间密切的日常合作。
  • 持续关注卓越的技术和良好的设计。
  • 定期适应不断变化的环境。
  • 即使是后期的需求变化也是受欢迎的。

更多详细信息,请参阅以下文章软件工程 - 敏捷开发模型。

22 如果用户参与了SDLC的所有阶段,可以选择哪种模式

如果用户参与了 SDLC 的所有阶段,可以选择 RAD 模型。

23. 有哪些可用的软件项目估算技术?

有一些可用的软件项目估算技术:

  • PERT
  • 工作分解结构
  • 德尔菲法
  • 用户案例点

24.什么是0级DFD?

最高抽象级别称为 DFD 的 Level 0。它也称为上下文级DFD。它将整个信息系统描绘成一张图。

更多详情请参考以下文章DFD。

25.什么是物理DFD?

物理 DFD 侧重于系统的实现方式。创建逻辑 DFD 后要绘制的下一个图表是物理 DFD。它解释了实现系统业务活动的最佳方法。此外,它还涉及业务流程所需的设备和文件的物理实现。换句话说,物理 DFD 包含与植入相关的详细信息,例如运行业务流程所需的硬件、人员和其他外部组件。

26. DFD中的黑洞概念是什么?

数据流图中的块洞概念可以定义为“一个处理步骤可能有输入流但没有输出流”。在黑洞中,数据只能存储入站流。

27. 提到计算程序圈复杂度的公式?

计算程序圈复杂度的公式是:

c = e - n+2p

e = number of edges
n = number of vertices
p = predicates

有关详细信息,请参阅以下文章 Cyclomatic Complexity。

28. 什么是软件再工程?

它是一个软件开发过程,旨在提高软件系统的可维护性。

29. 如何查找软件产品的大小?

软件规模的估计是软件项目管理的重要组成部分。它有助于项目经理进一步预测构建项目所需的工作量和时间。在项目规模估算中使用了各种措施。其中一些是:

  • 代码行
  • ER图中的实体数
  • 详细数据流程图中的进程总数
  • 函数点

30. 提到一些软件分析和设计工具?

  • 数据流图
  • 结构化图表
  • 结构化英语
  • 数据字典
  • 分层输入过程输出图
  • 实体关系图和决策表

31、Bug和Error有什么区别?

Bug:在产品交付给客户之前在开发环境中发现的错误。
错误:实际值和预期/理论值的偏差。

32.风险和不确定性什么区别?

  • 风险是可以衡量的,而不确定性是无法衡量的。
  • 风险可以计算,而不确定性永远无法计算。
  • 您可以提前制定计划以避免风险。不可能为不确定性制定事先计划。
  • 某些类型的经验观察可以帮助理解风险,但另一方面,不确定性永远不能基于经验观察。
  • 经过努力,风险可以转化为确定性。相反,你不能将不确定性转化为确定性。
  • 在对风险因素进行估计后,可以做出决定,但由于无法计算不确定性,因此无法做出决定。

33. 什么是例图?

用例图是一种行为图,将参与者与正在开发的系统之间的可观察交互可视化。该图由系统、相关用例和参与者组成,并将它们相互关联:

  • 系统:描述了什么?
  • 演员:谁在使用这个系统?
  • 用例:演员在做什么?

34. 用什么模型检查软件的可靠性?

瑞利模型用于检查软件可靠性。瑞利模型是一种参数模型,因为它基于特定的统计分布。当基于软件项目的数据估计统计分布的参数时,可以根据模型对项目的缺陷率进行预测。

35. 什么是坐标测量机?

为了确定一个组织的当前流程成熟度状态,SEI 使用了一种评估,该评估产生了一个五分评分方案。分级方案确定与能力成熟度模型 (CMM) 的合规性,该模型定义了不同过程成熟度级别所需的关键活动。 SEI 方法提供了衡量公司软件工程实践的全球有效性的方法,并建立了五个过程成熟度级别,这些级别按以下方式定义:

  • 级别 1:初始
  • 级别 2:可重复
  • 第 3 级:已定义
  • 级别 4:管理
  • 第 5 级:优化

36. 定义适应性维护?

适应性维护定义为当客户需要产品在新平台、新操作系统上运行或当他们需要产品与新硬件和软件接口时进行修改和更新。

37. 在模块化软件设计的背景下, 哪个组合被考虑用于内聚和耦合?

在模块化软件设计的上下文中,考虑了高内聚和低耦合。

38. 什么是回归测试?

回归测试被定义为一种软件测试,用于确认最近对程序或代码的更改没有对现有功能产生不利影响。回归测试只是选择已运行的全部或部分测试用例。重新运行这些测试用例以确保现有功能正常工作。执行此测试是为了确保新的代码更改不会对现有功能产生副作用。确保在最后一次代码更改完成后,上述代码仍然有效。

39. 黑盒测试总是关注软件的哪些需求?

黑盒测试始终关注软件的功能需求。

40. 哪些测试用于故障模拟?

随着对软件组件质量和组件复杂性的期望越来越高,软件开发人员需要执行有效的测试。在今天的场景中,突变测试已被用作一种故障注入技术来衡量测试的充分性。突变测试采用“故障模拟模式”。

41.什么是函数点?

函数点度量为测量软件应用程序的各种功能提供了一种标准化方法。函数点度量,从用户的角度衡量功能,即基于用户请求和接收的回报。

42. 什么是基线?

基线是定义阶段完整性的度量。在完成与特定阶段相关的所有活动后,该阶段就完成了,并作为下一阶段的基线。

43. 一个有 17 条边和 13 个节点的模块圈复杂度是多少?

具有 17 条边和 13 个节点的模块的圈复杂度 = E – N + 2

E = Number of edges, N = Number of nodes
Cyclometic complexity = 17 – 13 + 2 = 6

44. 软件不会出现传统意义上的磨损,但是随着软件的发展,软件确实会退化,为什么?

软件不会按照传统意义上的术语磨损,但软件确实会随着它的发展而恶化,因为多个变更请求会在组件交互中引入错误。

45. 凝聚力是哪个概念的延伸?

内聚度是指模块内的元素属于一起的内聚度。是信息隐藏概念的延伸。

46.软件项目计划的三个基本组成部分是什么

  • 团队结构,
  • 质量保证计划,
  • 费用估算。

47. 针对 SRS 的软件测试被称为……?

针对 SRS 的软件测试称为验收测试。

48、如何衡量软件复杂度?

为了衡量软件的复杂性,软件工程中有一些方法:

  • 代码行
  • 圈复杂度
  • 类耦合
  • 继承深度

49. 定义术语 WBS

WBS的完整形式是工作分解结构。其工作分解结构包括将大型复杂项目划分为更简单、可管理和独立的任务。为了构建一个工作分解结构,每个节点递归地分解成更小的子活动,直到在叶级,这些活动变得不可分割和独立。 WBS 采用自上而下的方法。有关更多详细信息,请参阅工作分解结构文章。

50. 一个回归测试主要涉及哪些测试?

回归测试主要与维护测试有关。