软件工程面试题

  • 软件工程方法学包含3要素:方法、工具和过程

    • 使用最广泛的软件工程方法学,分别是传统方法学和面型对象方法学

      • 传统方法学使用结构化技术来完成软件开发的各项任务,把软件生命周期划分为若干个阶段,顺序的完成每个阶段的任务,前一个阶段的任务的完成是后一个阶段的开始标准。
      • 面向对象方法学适用于需求不清晰或者会随着时间的变化而变化的软件开发。面向对象方法学把数据和对象看的同等重要。将对象看作数据和对数据进行操作的统一的软件构件,对象彼此之间可以通过发消息互相联系,所有的对象划分成类,并且对类进行分级。面向对象方法学符合人类认识客观世界解决问题的过程,是一个主动的多次反复迭代的演化过程。
      • 面向对象方法学=对象+类+继承+用消息通信
  • 软件过程:通常使用生命周期模型来描述软件过程

    • 瀑布模型
    • 快速原型模型
    • 增量模型
    • 螺旋模型
    • 喷泉模型
    • RUP模型(强调迭代和渐增)
    • 敏捷过程和极限编程
  • 软件定义

    • 问题分析
    • 可行性分析:确定问题是否值得被解决。技术、经济、操作可行性。
      • 数据流图和数据字典构成了系统的逻辑模型。
    • 需求分析
      • E-R图包含着实体、关系和属性三部分
  • 软件开发

    • 软件设计

      • 总体设计

        • 系统设计阶段:确定系统的具体实现方案;
        • 结构设计阶段:确定软件结构
        • 设计原理:

          • 模块化、抽象、逐步求精、信息隐藏和局部化
          • 模块独立

            • 耦合:耦合是对一个软件结构内不同模块之间互联程度的度量。耦合强弱取决于模块间接口的复杂程度,进入和访问一个模块的点,以及通过接口的数据。耦合由高到底分为:内容耦合、公共耦合、控制耦合、标记耦合、数据耦合。尽量使用数据耦合、少使用控制耦合和特征耦合,限制公共环境耦合范围,完全不使用内容耦合。
            • 内聚:模块内各个元素彼此结合的紧密程度。内聚由低到高分为:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚和功能内聚。
            • 设计时应该力争做到高内聚,并且能够辨别出低内聚的模块,有能力通过修改设计提高模块的内聚程度并且降低模块间的耦合程度,从而获得较高的模块独立性。
          • 启发式规则:
            • 模块规模应当适中;深度、宽度、扇出、扇入都应当适当;作用域应该在控制域之内
      • 详细设计:具体实现所要求的系统,也就是经过这个阶段的设计工作可以得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。

        • 程序设计的工具:程序流图、盒图以及PAD图;语言描述:PDL伪码;表格描述:判定表以及判定树。
        • McCabe方法:根据程序控制流的复杂程度定量度量程序的复杂程度。
    • 实现阶段(编码和测试)

      • 模块测试、集成测试、确认测试
      • 白盒测试技术:已知产品内部工作过程,可通过测试检测出产品内部动作是否按照规格说明书的规定正常运行。主要方法:逻辑覆盖(语句覆盖、判定覆盖、条件覆盖、判定\条件覆盖、条件组合覆盖)、基本路径测试
      • 黑盒测试又称为功能测试,已知产品具有的功能,通过测试来检测每个功能是否正常使用。包括:等价划分、边界值分析、错误推测
  • 软件维护

    • 软件维护是软件已经交付使用之后,为了改正错误或者满足新的需要而修改软件的过程。包括:改正性维护、适应性维护、完善性维护、预防性维护
  • 面向对象的思维方式

    • 面向对象的思维是建立在对象以及对对象的操作而实现的,如果说把面向过程的思维方式看作旅游的时候将每天进行详细的规划,那么面向对象的方式就是走着看看,哪里好玩就去哪里的一种方式。
    • 封装(内部的状态不为其他对象知道)、
    • 继承(从其他类继承的状态和行为并且添加新的属性)、
    • 多态(当一个类从另一个类继承而来,多态使得子类代替父类。使用指向父类的指针或者引用,能够调用子类的对象。)、
    • 聚合和组合(整体和部分之间的关系)、
    • 接口和实现(描述一个类的用户如何与这个类进行交互)、
    • 抽象(根据对象的属性和运用规律的相似性进行抽象提炼)
  • 一、软件分析:是一个对用户的需求进行去粗取精去伪存真、正确理解,然后把它用软件工程开发语言表达出来的过程,基本任务是和用户一起确定要解决的问题,建立软件的逻辑模型,编写需求规格说明书文档并最终得到用户的认可。

  • 二、软件设计(概要设计和详细设计):主要任务就是将软件分解成模块使之能实现某个功能的数据和程序说明、可执行程序的程序单元。三、软件编码(单元测试):指把软件设计转换成计算机可以接受的程序,即写成以某一程序设计语言表示的"源程序清单"。四、软件测试:目的是以较小的代价发现尽可能多的错误。要实现这个目标的关键在于设计一套出色的测试用例(测试数据和预期的输出结果组成了测试用例)。

  • 五、软件维护:指在已完成对软件的研制(分析、设计、编码和测试)工作并交付使用以后,对软件产品所进行的一些软件工程的活动。根据软件运行的情况,对软件进行适当修改,以适应新的要求,以及纠正运行中发现的错误。

  • IPO图

  • 瀑布模型

  • 测试覆盖

  • 判定表

  • PAD图

  • SA 方法

  • DFD

  • 三、简答题(简要回答下列问题,每小题4分)

  • 1、什么是软件工程?它目标和内容是什么?

  • 软件工程就是用科学的知识和技术原理来定义,开发,维护软件的一门学科。

  • 软件工程目标:付出较低开发成本;达到要求的功能;取得较好的性能;开发的软件易于移植;只需较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。

  • 软件工程内容:包括开发技术和开发管理两个方面。

  • 2、软件开发中有哪几种过程模型?哪些适用于面向对象的软件开发?

  • 软件开发中常见的软件过程模型有瀑布模型、原型模型、螺旋模型、喷泉模型、统一软件过程等。

  • 其中喷泉模型、统一软件过程适用于面向对象的软件开发。

  • 3、什么是结构分析方法?该方法使用什么描述工具?

  • 结构化分析:简称SA,面向数据流进行数据分析的方法。采用自顶向下逐层分解的分析策略。顶层抽象地描述整个系统,底层具体地画出系统工程的每个细节。中间层则是从抽象到具体的过渡。使用数据流图,数据字典,作为描述工具,使用结构化语言,判定表,判定树描述加工逻辑。

  • 4、什么是软件概要设计?该阶段的基本任务是什么?把一个软件需求转换为软件表示时,首先设计出软件总的体系结构。称为概要设计或结构设计。

  • 基本任务:

  • ⑴设计软件系统结构

  • ⑵进行数据结构及数据库的设计

  • ⑶编写概要设计的文档

  • ⑷评审

  • 5、软件维护有哪些内容?

  • (1)校正性维护。在软件交付使用后,一些隐含的错误在某些特定的使用环境下会暴露出来。为了识别和纠正错误,修改软件性能上的缺陷,应进行确定和修改错误的过程,这个过程就称为校正性维护。

  • (2)适应性维护。为了使应用软件适应计算机硬件、软件环境及数据环境的不断发生的变化而修改软件的过程称为适应性维护。

  • (3)完善性维护。为增加软件功能、增强软件性能、提高软件运行效率而进行的维护活动称为完善性维护。

  • (4)预防性维护。为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。

  • 6、软件测试要经过哪些步骤?这些测试与软件开发各阶段之间有什么关系?

  • 软件测试要经过的步骤是:单元测试→集成测试→确认测试→系统测试。

  • 单元测试对源程序中每一个程序单元进行测试,检查各个模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误。该阶段涉及编码和详细设计文档。

  • 集成测试是为了检查与设计相关的软件体系结构的有关问题,也就是检查概要设计是否合理有效。

  • 确认测试主要是检查已实现的软件是否满足需求规格说明书中确定了的各种需求。

  • 系统测试是把已确认的软件与其他系统元素(如硬件、其他支持软件、数据、人工等)结合在一起进行测试。以确定软件是否可以支付使用。

  • 7、什么是软件生存周期?它有哪几个活动?

  • 软件生存周期:一个软件从提出开发要求开始直到该软件报废为止的整个时期。

  • 包括:可行性分析和项目开发计划,需求分析,概要设计,详细设计,编码,测试,维护。

  • 8、衡量模块独立性的两个标准是什么?各表示什么含义?

  • 内聚和耦合。

  • 内聚:又称为块内联系,指模块内部各成分之间相互关联的程度,以高内聚为设计目标。

  • 耦合:也称块间联系,模块之间相互联系程度的度量,联系越紧密,耦合性越强,独立性越差,以低耦合为设计目标。

  • 9、什么是结构分析方法?结构化分析方法通过哪些步骤来实现?

  • 结构化分析:简称SA,面向数据流进行数据分析的方法。采用自顶向下逐层分解的分析策略。顶层抽象地描述整个系统,底层具体地画出系统工程的每个细节。中间层则是从抽象到具体的过渡。

  • 实现的步骤:⑴了解当前系统的工作流程,获得当前系统的物理模型。 ⑵抽象出当前系统的逻辑模型。⑶建立目标系统的逻辑模型。 ⑷作进一步补充和优化。

  • 1、什么是需求分析?需求分析阶段的基本任务是什么?

  • 需求分析:开发人员准确地理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的需求规格说明的过程。

  • 基本任务:

  • ⑴问题识别

  • ⑵分析与综合,导出软件的逻辑模型

  • ⑶编写文档

  • 11、什么样是"事物流"?什么是"变换流"?

  • 数据流图(DFD)一般可分为"变换流","事物流"两种。

  • ̶变换流":由输入﹑输出﹑变换(或称处理)三部分组成,是一顺序结构。

  • ̶事物流":它的某个加工,分离成许多发散的数据流,形成许多加工路径,并且根据输入值选择其中一个路径来执行。(这人加工称为事务处理中心)

  • 12、单元测试有哪些内容?

  • 单元测试主要针对模块的以下五个基本特征进行测试:

  • (1)模块接口

  • (2)局部数据结构

  • (3)重要的执行路径

  • (4)错误处理

  • (5)边界条件

  • 13、什么是软件生存周期模型?有哪些主要模型?

  • 生存周期模型:描述软件开发过程中各种活动如何执行的模型。对软件开发提供强有力的支持,为开发过程中的活动提供统一的政策保证,为参与开发的人员提供帮助和指导,是软件生存周期模型化技术的基础,也是建立软件开发环境的核心。

  • 主要有:瀑布模型,增量模型,螺旋模型,喷泉模型,基于知识的模型,变换模型。

  • 14、软件设计的基本原理包括哪些内容?

  • ⑴模块化:模块是软件的组成部分,是具有独立功能且可命名的一段程序,所有模块组成整体,可以满足问题的要求。

  • ⑵抽象:认识复杂现象过程所使用权的工具,只考虑事物本质的共同特性,忽略细节和其它因素。通过抽象确定组成软件的过程实体。

  • ⑶信息隐蔽:将模块实现自身功能的细节与数据"隐蔽"起来。模块间仅交换为完成系统功能所必须的信息。

  • ⑷模块独立性:每个模块只完成系统要求的独立的子功能。

  • 15、结构化程序设计的基本要点是什么?

  • 主要有三个:

  • 1、采用自顶向下、逐步求精的程序设计方法

  • 2、使用三种基本控制结构构造程序。任何程序都可以由顺序、选择、重复(循环)三种基本控制结构构造,这三种基本结构的共同点是单入口、单出口。

  • 3、主程序员组的组织形式。

  • 16、详细设计有哪几种描述方法?

  • 详细设计的描述方法有图形、表格和语言,其中图形常用结构化程序流程图、盒图和PAD(问题分析图)为描述工具,语言常用过程设计语言(PDL)来作为工具。

  • 17、单元测试中采用什么方法?

  • 测试的方法是为被测试模块编写驱动模块和桩模块来实现被测试单元的可运行。通过驱动模块来模拟被测试模块的上级调用模块,以上级模块调用被测模块的格式驱动被测模块,接收被测模块的测试结构并输出。桩模块则用来代替被测试模块所调用的模块。它的作用是返回被测模块所需的信息。

  • 18、什么是软件配置管理?什么是基线?

  • 软件配置管理,简称SCM(SoftwareConfiguration Management),是指一组管理整个软件生存期各阶段中变更的活动。软件配置管理技术可以使软件变更所产生的错误达到最小并最有效地提高生产率。

  • 基线:是软件生存期中各开发阶段的一个特定点,它的作用是把开发各阶段工作的划分更加明确化,使本来连续的工作在这些点上断开,以便于检查与肯定阶段成果。

  • 19、简述文档在软件工程中的作用?

  • 文档在软件工程中的作用如下:

  • (1)提高软件开发过程的能见度

  • (2)提高开发效率

  • (3)作为开发人员阶段工作成果和结束标志

  • (4)记录开发过程的有关信息便于使用与维护;

  • (5)提供软件运行、维护和培训有关资料;

  • (6)便于用户了解软件功能、性能。

  • 20、软件工程三要素之间的关系?

  • 软件质量是软件工程的生命线,软件工程以质量保证为基础。

  • 质量管理促进了过程的改进,创造了许多行之有效的软件开发方法和工具。

  • 软件工程釆用层次化的方法,每个层次都包括过程、方法、工具三要素。

  • 方法支撑过程和工具,过程和工具又促进方法学的研究。

  • 21、说明面向对象的特征?

  • 面向对象的特征是:

  • (1)对象唯一性。每个对象都有自身唯一的标识,在对象生存期中,其标识不变,不同的对象不能有不同的标识。

  • (2)分类性。是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类

  • (3)继承性。是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。

  • (4)多态性。是指相同的操作或函数过程可以作用于多种类型的对象上并获得不同的结果。

  • 22、简述"变换分析"设计步骤。

  • ⑴确定变换中心,逻辑输入和输出。

  • ⑵设计软件结构的顶层和第一层--变换结构。

  • ⑶设计中﹑下层模块,对第一层的模块自顶向下分解。

  • ⑷设计的优化 :输入部分求精,每个物理输入设置专门模块,以体现系统的外部接口。其它输入模块与转换数据模块都很简单时,可将它们合并。

  • 23、请简述可行性研究有哪些步骤?

  • 复查系统规模和目标;研究当前的系统;导出新系统的高层逻辑模型;重新定义问题;导出和评价可供选择的解决方案;推荐可行的行动方案;草拟开发计划;书写文档并提交审查。

  • 24、请简述黑盒测试和白盒测试有何区别,黑盒测试有哪些常用方法?

  • 黑盒测试和白盒测试的区别:前者基于功能,后者基于结构;

  • 黑盒测试常用方法有:边界值、等价类、因果图、错误推测法等。

  • 25、什么是软件可维护性?常见的软件维护活动有哪几类?

  • 软件可维护性的定义:软件能够被理解、校正、适应及增强功能的容易程度;

  • 常见的软件维护活动有:改正型、适应型、完善型、预防型。

  • 26、CMM全称是什么?分为哪几个级别?

  • CMM全称是软件能力成熟度模型;

  • 从无序到有序的进化分成5个级别,分别为:

  • 1 初始级;2 可重复级;3 已定义级;4 已管理级;5 优化级。

  • 27、什么是数据字典?简述数据字典与数据流图的关系。

  • 数据字典是关于数据的信息的集合,对数据流程图中的各个元素做完整的定义与说明,是数据流程图的补充工具;

  • 数据字典与数据流图的关系:数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,然而没有数据流图数据字典也难于发挥作用。数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明。

  • 28、软件生命周期划分为哪几个阶段?

  • 软件生命周期分为三个时期八个阶段:

  • 软件定义:问题定义、可行性研究;

  • 软件开发:需求分析、概要设计、详细设计、编码、测试;

  • 软件运行:软件维护

  • 29、简述三种面向对象模型的主要功能?

  • ①对象模型:表示了静态的结构化的系统数据性质,描绘了系统的静态结构,从客观世界实体的对象关系角度来描绘对象。

  • ②动态模型:该模型描述了系统的控制结构,它表示了瞬间的、行为化的系统控制性质,它关心的是系统的控制及操作的执行顺序,它从对象的事件和状态的角度出发,表现了对象的交互行为。

  • ③功能模型:表示变化的系统"功能"性质,它指明系统应该"做什么",因此功能模型更直接的反映了用户对目标系统的要求。

  • 30、详细设计的基本任务是什么?

  • 详细设计的基本任务包括:为每个模块进行详细的算法设计;为模块内的数据结构进行设计;对数据库进行物理设计;其他设计;编写详细设计说明书;评审。

  • 31、黑盒测试和白盒测试有什么区别?

  • (1)黑盒测试法: 把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性。黑盒测试又称为功能测试,包含等价类划分法、边界值法、错误推测法、因果图法等。

  • (2)白盒测试法: 是把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。白盒测试又称为结构测试,包含逻辑覆盖法和基本路径测试法。

  • 32、什么是软件工程?软件工程面临的问题是什么?

  • 软件工程就是用科学的知识和技术原理来定义,开发,维护软件的一门学科。

  • 软件工程面临的问题:软件的费用,可靠性,可维护性,软件生产率和软件的重用。

  • 33、软件工程三要素之间的关系?

  • 软件质量是软件工程的生命线,软件工程以质量保证为基础。

  • 质量管理促进了过程的改进,创造了许多行之有效的软件开发方法和工具。

  • 软件工程釆用层次化的方法,每个层次都包括过程、方法、工具三要素。

  • 方法支撑过程和工具,过程和工具又促进方法学的研究。

  • 34、简述结构化程序设计方法的基本要点。

  • (1)采用自顶向下,逐步求精的程序设计方法。

  • (2)使用三种基本控制结构构造程序,分别是顺序,选择和循环

  • (3)采用主程序员组的组织形式。

  • 35、顾客在自动柜员机中插入银行卡,执行提款的服务项目;银行职员要求自动柜员机打印所有的提款数据。画出自动柜员机的Use Case图。?

  • 36、简述提高可维护性的方法。

  • (1)建立明确的软件质量目标;

  • (2)利用先进的软件开发技术和工具;

  • (3)建立明确的质量保证工作;

  • (4)选择可维护的程序设计语言;

  • (5)改进程序文档。

  • 37、简述文档在软件工程中的作用。

  • (1)提高软件开发过程的能见度;

  • (2)提高开发效率;

  • (3)作为开发人员阶段工作成果和结束标志;

  • (4)记录开发过程的有关信息便于使用与维护;

  • (5)提供软件运行、维护和培训有关资料;

  • (6)便于用户了解软件功能、性能。

  • 38、什么是软件危机?产生原因是什么?

  • 软件开发技术的进步未能满足发展的要求。在软件开发中遇到的问题找不到解决的办法,问题积累起来,形态尖锐的矛盾,导致了软件危机。

  • 产生原因:

  • ⑴ 软件规模越来越大,结构越来越复杂。

  • ⑵ 软件开发管理困难而复杂。

  • ⑶ 软件包开发费用不断增加。

  • ⑷ 软件开发技术落后。

  • ⑸ 生产方式落后,仍采用手工方式。

  • ⑹ 开发工具落后,生产率提高缓慢。

  • 39、调试的目的是什么?调试有哪些技术手段?

  • 调试则是在进行了成功的测试之后才开始的工作。调试的目的是确定错误的原因和位置,并改正错误,因此调试也称为纠错(Debug)。调试的技术手段有简单的调试方法、归纳法、演绎法和回溯法等。

  • 4、在传统软件工程方法指导下,数据流图和数据字典的关系如何?

  • 数据字典是关于数据的信息的集合,对数据流程图中的各个元素做完整的定义与说明,是数据流程图的补充工具。

  • 数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,然而没有数据流图数据字典也难于发挥作用。数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明

相关推荐
Theodore_10223 小时前
4 软件工程——总体设计
java·开发语言·数据库·算法·java-ee·软件工程·设计
Theodore_10223 小时前
1 软件工程——概述
java·开发语言·算法·设计模式·java-ee·软件工程·个人开发
shinelord明10 小时前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
人才程序员2 天前
QML z轴(z-order)前后层级
c语言·前端·c++·qt·软件工程·用户界面·界面
Theodore_10222 天前
3 需求分析
java·开发语言·算法·java-ee·软件工程·需求分析·需求
做人求其滴2 天前
GDPU软件工程习题(挖空版)
软件工程
MrFlySand_飞沙2 天前
软件工程
软件工程
jokr_2 天前
【软件工程复习】
软件工程
云空2 天前
《软件工程文档攻略:解锁软件开发的“秘籍”》
软件工程
人才程序员2 天前
【无标题】
c语言·前端·c++·qt·软件工程·qml·界面