2023-03-01-计算机考研复试之软件工程三十问
计算机考研复试之软件工程三十问
/* 前言 :不知道学习软工的小伙伴有没有这种疑问,软工为何这么难学进去?为何这么繁琐?为何这么难背?本小白在初学软工的时候,基本就是长期走神发呆的状态,因为完全不知道软在讲啥,要考啥。 本次二刷软工,我花了18小时来整理软件工程的知识点和可能要考查的面试问题,虽然不能把软工覆盖全面,也比不上一些大佬整理得专业和详细,但是我有信心我自己整理的东西还是比较细致的、比较简洁明了的、比较抓住重点的、也比较适合广大考研学生的 知识扫盲 和 应考背诵记忆 的。
本文参考资料:软件工程导论(第六版)、本人考研院选的本科PPT、一些考研参考资料和CSDN部分优质博客等。
自身专业水平有限,文章如有错误, 恳请批评指正 。整理知识点不易,若对您学习、备考有帮助, 恳请关注、点赞、收藏 。你们的支持、鼓励是我继续打鸡血学习和创作的动力。*/
/软件工程概述***/
问题一:什么是 软件工程 ? 目标 是什么? 内容 是什么?软工 方法学三要素 是什么?什么是 软件过程 ?
软件工程是利用科学知识和技术原理来定义、开发和维护软件的一门学科。
目标是:付出较低的开发成本、取得良好的性能、达到预期的效果……(很多)
软工内容:软工包括 开发技术 和 开发管理 两方面内容。
软工方法学三要素:1. 方法 (指的是开发方法)2. 工具 (支持方法的工具)3. 过程 (管理过程)
软件过程:完成高质量软件开发中的一系列操作。
问题二:软件工程方法学一般有哪两种?
结构化方法学 (又称为 生命周期方法学 ):强调 自顶向下 顺序完成软件开发的任务。结构化方法学中有三种基本控制结构:1.顺序2.选择3.循环
面向对象方法学 :尽量模拟人类习惯的思维方式去开发。
补充:面向对象三大特征:1.封装(把数据和方法放在一个类里封装起来)2.继承(子类继承父类,通过关键词extends)3.多态(相同类型的变量调用同一个方法时呈现出不同的行为特征。Ps:一个细节问题要注意:只有方法才有多态,实例变量不存在多态)
问题三:软件生命周期划分为哪几个阶段?
生命周期划分为 三个时期八个阶段 :
软件定义时期:问题定义、可行性研究
软件开发时期:需求分析、总体设计、详细设计、编码和单元测试、综合测试
软件运行维护时期:运行维护
问题四:什么是软件危机?(本题自由度较大,选取两三点就行)
软件危机指软件开发的成本和开发时期估计不准、软件质量不可靠、软件维护难……
造成软件危机的主要原因有:软件本身的特点、软件开发和维护的方法等……
问题五:软件生命周期中有哪几种模型?哪些适用于面向对象的软件开发?
软件生命周期中常见的模型有:瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、Rational统一过程、敏捷过程、微软过程等等。
喷泉模型适用于面向对象的软件开发 。(因为喷泉模型在整个开发过程中都使用“对象”这个概念,很容易实现各个开发步骤的反复迭代(求精)和逐步深化,因此喷泉模型很好实现了面向对象开发的无缝和迭代特性)
/**可行性研究/
问题六:为什么要进行可行性研究
用最小的代价、在尽可能短的时间内 确定问题是否能被解决 。(注意:不是去解决问题)
问题七:可行性研究工具有哪些?(这是重点)
- 系统流程图:系统流程图是概括的描绘 物理系统 的传统工具。
- 数据流图:描绘 信息流和数据 从输入移动到输出的过程中经受的 变换 。
- 数据字典:是关于 数据的信息的集合 ,是对数据流图中包含的所有元素的定义的 集合 。
问题八:请介绍一下可行性研究的方法。
首先分析问题,试探性的 导出问题的各种解 ,然后进行各种分析和比较, 选择和推荐可行的解决方案。 采用 系统流程图 描述物理数据流;运用 数据流图并结合数据字典 构建系统的逻辑模型。可行性研究的结果 产生可行性研究报告 。
/**需求分析/
问题九:什么是需求分析?(记住要点,用自己的话说)
需求分析是发现、求精、建模、规格说明和复审的过程。
即:先与用户交流,了解基本需求……继续深入,逐步求精需求……建立分析模型……写成软件规格说明书……严格评审……最终得到用户确认。
补充 :一般从1.一致性2.完整性3.现实性4.有效性 四方面去复审软件需求规格说明书。
问题十:请介绍一下什么是需求工程。
需求工程包括 需求分析 和 需求管理 。 需求分析任务主要 包括:1.需求获取2.需求建模3.规格说明4.需求验证。 需求管理 是对系统需要变更了解和控制的工程,包括标识、控制和跟踪需求的活动。
问题十一:需求分析是一项软件工程活动,它的两大主要目标是什么?
- 建立分析模型:可用 实物——联系图 建立 数据模型 ,可用 数据流图 建立 逻辑模型 ,可用 状态图 建立 行为模型。(其中, 数据字典 是把三种分析模型粘合在一起的“粘合剂”,是分析模型的“核心”)
- 编写需求规格说明书(简称:规格说明)
/*总体设计/
问题十二:软件总体设计阶段的主要任务是什么?
如果简要作答:1.确定系统的物理模型2.确定软件的体系结构
详细作答(课本上的原话):总体设计阶段的基本目的是用比较抽象概括的方法确定系统如何完成预定的任务,也就是说,应该确定 系统的物理配置方案 ,进而确定 组成系统的每个程序的结构 。
问题十三:从技术观点上看, 软件设计 包括了什么内容?
- 数据设计2.体系结构设计3.接口设计4.过程设计
Ps:本题为PPT上的知识点, 软件设计包括了总体设计和详细设计 。
问题十四:基本的软件设计原理有哪些?
- 模块化(使复杂问题“分而治之”)
- 抽象(抓事务本质特征,先不考虑细节)
- 逐步求精(集中精力先解决主要问题,尽量推迟对细节的考虑)
- 信息隐藏和局部化(将某些模块的某些过程和数据隐藏起来,其他模块不能访问它)
- 模块独立性(模块独立性是模块化、抽象、信息隐藏的直接产物)
问题十五:什么是内聚性,什么是耦合性,针对这两个特性应该注意什么问题?
内聚性:内聚是一个模块内部各个元素彼此结合紧密程度的度量
耦合性:耦合是模块间互相连接的紧密程度的度量
应注意以下问题:软件设计应追求高内聚、低耦合。
尽量使用 数据耦合 ,少用 控制耦合 和 特征耦合 ,限制 外部耦合 和 公共环境耦合 的范围,不用 内容耦合 。
尽量做到高内聚,中等程度的内聚也可以采用, 坚决不使用低内聚 。
问题十六:软件结构设计的主要手段有哪些?应该遵循的最主要原理是什么?
软件设计原理 和 启发规则 是软件结构设计的两大主要手段, 模块独立性 是其应遵循的最主要原理。
补充: 层次图、HIPO图、结构图 ,是描绘软件结构的常用工具。
问题十七:讲述一下什么是结构化设计方法。
结构化设计(SD)是一种 面向数据流 的设计方法,并基于 模块化 、 自顶向下逐步求精 、 结构化程序设计 等技术,可与结构化分析(SA)方法衔接。
问题十八:数据处理的类型有哪两种?请分别介绍一下。(也可问,信息流的类型有哪几种)
- 变换流:信息输入系统,由外部形式变为内部形式。进入系统的信息经过变换中心,加工处理,再输出系统,由内部形式再变为外部形式。
即: 输入+变换中心+输出
2.事务流:数据沿着输入通路到达一个事务中心, 事务中心 根据事务的类型 在若干个活动流中选择一个 来执行,这种数据流称作事务流。
问题十九:变换分析步骤有哪些?
- 重画数据流图
- 区分逻辑输入、逻辑输出和变换中心部分
- 进行一级分解,设计模块结构顶层和第一层
- 进行二级分解,设计模块结构的中、下层
/详细设计*/
问题二十:详细设计阶段的根本目标是什么?主要任务是什么?
详细设计的根本目标是确定应该怎么具体的实现所需求的系统。主要任务是 过程设计。 需要注意, 过程设计应该在数据设计、体系结构设计和接口设计之后进行 ,过程设计的主要内容是设计解题的详细步骤,即算法。
Ps:接口设计中,人机界面设计是一个重要组成部分,设计原理是一个迭代过程,反复琢磨逐步求精。
问题二十一:过程设计工具有有哪些?
过程设计中,主要分为三类
- 图形工具:程序流程图(直观,但逐步求精不理想,不易表示数据结构)、N-S(又叫盒图,容易确定数据作用域,容易表现嵌套关系)、PAD(又叫问题分析图,problem analysis diagram,PAD翻译成程序代码比较容易, 支持逐步求精 ,支持表示程序逻辑, 支持描绘数据结构 )
- 表格工具:判定表(能表示复杂的条件组合和动作关系)、判定树(判定表的变种,表达简单,但是形式不唯一。PS:树的形式不唯一很好理解)
- 语言工具:PDL(设计程序用语言或者伪代码,易于书写但是不够形象)
补充:在过程设计中,有面向数据结构的设计方法,主要有Jackson方法和Warnier方法。
问题二十二:程序复杂程度的度量方法有哪些?
- McCabe方法:根据程序控制流的复杂程度度量程序复杂度,度 量结果成为程序的环形复杂度。
此为重要内容:环形复杂度有三种计算方法①数一数流图的区域个数②V(G)=E-N+2;E是条数,N是结点数③V(G)=P+1;P是判定节点数目
- Halstead方法:根据程序中 运算符和操作数的总数 来度量程序的复杂度。
/软件测试/
问题二十三:软件测试和软件开发有什么异同?
软件开发过程是一个 自顶向下、逐步求精 的过程,而软件测试过程是采用相反顺序安排的 自底向上,逐步集成 的过程。
问题二十四:软件测试的过程有哪几个步骤?
- 单元测试:检查各个程序模块是否完成了功能
- 集成测试:把测试过的模块组装起来,测试软件体系结构
- 确认测试:检查已经实现的软件是否满足了需求规格说明书的需求
- 系统测试:把已经确认的软件纳入实际运行环境,与其他系统成分一起测试
- 验收测试:向用户表明系统已经符合了用户预期标准
问题二十五:单元测试有哪些内容?
总体上说,单元测试是依据 详细设计说明书 和 源程序清单 ,来了解该 模块的I/O条件 和模块的 逻辑结构 。主要采用白盒测试,辅以黑盒测试。
- 模块接口测试
- 局部数据结构测试
- 路径测试
- 错误处理测试
- 边界测试(注意找数据流、控制流中的刚好等于、大于、小于)
问题二十六:什么是黑盒测试?
黑盒测试法: 把程序看作一个黑盒子, 完全不考虑程序的内部逻辑结构和内部特性 。它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性。黑盒测试又称为 功能测试 或 基于规格说明书的测试 。
黑盒测试包括 :等价类划分法、边界值分析法、错误推测法、因果图法、功能图法和接口测试法。
补充:等价类划分法不好理解,解释一下。即 将所有的输入数据划分成若干部分 ,然后从每一部分中 选取 少数有代表性的数据作为测试用例。
问题二十七:什么是白盒测试?
白盒测试法: 是把测试对象看成一个 玻璃盒子 ,允许测试人员利用 程序内部的逻辑结构 及有关信息,设计测试用例对程序 所有的逻辑路径 进行测试,通过在不同点检查程序的状态,确定实际状态是否与预期一致。白盒测试又称为 结构测试 或 基于程序的测试 。
白盒测试包括 :逻辑覆盖测试、基本路径测试、控制机构测试和数据流测试。
问题二十八:白盒测试中的逻辑覆盖测试主要有哪些?
首先,逻辑覆盖测试指的是对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次。可分为1.语句覆盖2.判定覆盖3.条件覆盖4.判定——条件覆盖5.条件组合覆盖6.路径覆盖。
Ps: 语句覆盖是最弱 的逻辑覆盖, 条件组合覆盖是最强 的逻辑覆盖。
问题二十九:黑盒测试中使用各种测试方法的综合策略是什么?
- 任何时候都 必须使用边界值分析测试法 ,它的检错能力最强
- 必要时使用 等价类划分法 补充测试用例
- 用 错误推测法 再追加一些测试用例
问题三十:什么是软件调试?有哪些调试方法?
软件调试,是在测试成功后进行的工作,用以进一步诊断和改正程序中的 潜在错误。
调试由两部分组成1.确定程序中可疑错误的确切性质和位置2.对程序修改,排除这个错误。
主要的调试方法有1.强行排错2.回溯法调试3.对分查找法4.归纳法5.演绎法
//本文到此结束,麻烦关注我点个赞再走呗~~球球点个赞!
68747470733a2f2f626c6f672e:6373646e2e6e65742f77656978696e5f34323531343733352f:61727469636c652f64657461696c732f313035393930313134