面试常见问题——软件工程(一)

面试常见问题——软件工程(一)

----------------分界线:本博客2020年3月14日进行了一次修正---------------

目录:

  1. 软件开发的基本过程工作阶段划分及其相应文档
  2. 可行性研究原因及主要研究问题
  3. 软件需求规格说明书内容
  4. 软件危机定义、产生原因、消除方法
  5. 有人认为软件开发时,一个错误发现得越晚,为改正它所付出的代价越大。提出你的观点并解释原因。从项目经理出发,如何管理软件项目
  6. 数据流图的作用和基本成分
  7. 软件工程定义,与软件工程方法学的关系
  8. 软件生命周期(软件过程模型),瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点
  9. 分析模型(数据字典、数据流图、实体-关系图、状态转换图)

1、 软件开发的基本过程工作阶段划分及其相应文档

  • 问题定义
    • 确定要解决的问题是什么。通过调研,系统分析员要提出关于问题性质、工程目标和工程规模的书面报告,并且要得到客户对这份报告的确认。
    • 《用户需求分析分档》
  • 可行性研究
    • 确定问题是否有行得通的解决办法。用最小的代价在尽可能短的时间内确定问题是否能够解决。
    • 《可行性研究报告》和《项目开发计划》
  • 需求分析
    • 确定目标系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰和具体的要求。
    • 《软件需求规格说明书》、《数据要求说明书》、《初步用户手册》
  • 概要设计(总体设计、初步设计、逻辑设计、高层设计)
    • 概括地说,怎样实现目标系统?
      • 确定解决问题的方案及目标系统中应该包含的程序。
      • 设计程序的体系结构,确定程序由哪些模块组成以及模块间的关系。
    • 《概要设计说明书》、《测试计划初稿》
  • 详细设计(模块设计、物理设计、低层设计)
    • 把解决办法具体化,详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。
    • 《详细设计说明书》、《数据库设计说明书》
  • 编码和单元测试
    • 把详细设计的结果翻译成用选定的语言书写的程序,并且仔细测试编写出的每一个模块。
    • 《模块开发卷宗(始)》、《用户手册(完)》、《操作手册》
  • 综合测试
    • 通过各种类型的测试及相应的调试使软件达到预定的要求。最基本的测试是集成测试和验收测试。
      • 集成测试(组装测试):根据设计的软件结构,把经过单元测试检验的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试。【前后端联调】
      • 验收测试(确认测试):按照规格说明书的规定,由用户对目标系统进行验收。【UAT测试】
    • 《模块开发卷宗(完)》、《测试计划》、《测试分析报告》、《项目开发总结报告》
  • 软件维护
    • 通过各种必要的维护活动使系统持久地满足用户的需要,包括四类维护活动:
      • 改正性维护:诊断和改正软件错误
      • 适应性维护:修改软件以适应环境的变化
      • 完善性维护:根据用户要求改进或扩充软件使它更完善
      • 预防性维护:修改软件为将来的维护活动预先做准备
    • 《开发进度月报》、《软件维护报告》、《软件问题报告》、《软件修改报告》

2、 在软件开发早期阶段为什么要进行可行性研究?可行性研究主要研究什么问题?

  • 进行可行性研究原因:
    • 开发一个软件时,需要判断原定的系统模型和目标是否现实,系统完成后所能带来的效益是否值得,从而避免在这些工程上的任何时间、人力、软硬件资源的浪费。
    • 可行性研究的实质是进行一次大大压缩简化了的系统分析和设计过程,就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
  • 主要研究问题:
    • 技术可行性。包括对要开发项目的功能、 性能和限制条件进行分析, 确定在现有的资源条件下,技术风险有多大,项目是否能实现。这里的资源包括已有的或可以搞到的硬件、软件资源,现有技术人员的技术水平和已有的工作基础。
    • 经济可行性。包括进行成本评估以及利润评估, 确定要开发的项目是否值得投资开发。对于大多数系统,一般衡量经济上是否合算,应考虑一个“底线”,经济可行性研究范围较广,包括:
      • 成本—效益分析
      • 长期公司经营策略
      • 开发所需的成本和资源
      • 潜在的市场前景
    • 操作可行性。有时还要研究社会可行性问题,研究要开发的项目是否存在任何侵犯、妨碍等责任问题。社会可行性所涉及的范围也比较广,它包括合同、责任、 侵权和其他一些技术人员常常不了解的陷阱等。
    • 必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性。
 

3、 软件需求规格说明书包括哪些内容?

  • 引言(陈述软件的目标)
    • 系统参考文献
    • 整体描述
    • 软件项目约束
  • 信息描述(陈述软件必须解决的问题)
    • 信息内容
    • 信息流
      • 数据流
      • 控制流
  • 功能描述(给出为解决问题而需要的每个功能)
    • 功能分解
    • 功能描述
      • 处理说明
      • 限制
      • 性能需求
      • 设计约束
      • 支撑图
    • 控制描述
      • 控制规格说明
      • 设计约束
  • 行为描述(说明作为外部事件和内部产生控制结果的软件操作)
    • 系统状态
    • 事件和动作
  • 确认标准(对所有其他需求的隐式复审)
    • 性能范围
    • 测试种类
    • 预期的软件响应
    • 特殊考虑
  • 参考书目(列出与该软件有关的全部文档,包括其他软件工程文档,技术参考文献以及厂商资料及标准)
  • 附录(规格说明的补充信息:表格数据、详细算法、图表及其他材料)

4、软件危机:

  • 定义:
    • 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
      • 如何开发软件,以满足对软件日益增长的需求
      • 如何维护数量不断膨胀的已有软件
  • 典型表现:
    • 对软件开发成本和进度的估计不准确
    • 用户对“已完成”的软件系统不满意
    • 软件产品的质量没有得到保证
    • 软件不可维护
    • 软件没有完备的文档资料
  • 产生原因:
    • 与软件本身的特点有关:
      • 软件不同于硬件,它是系统中的逻辑部件而不是物理部件,缺乏“可见性”
      • 开发进展情况较难衡量,软件的质量也较难评价
      • 软件在运行过程中不会因为使用时间过长而被“用坏”,运行中修改原有设计,较难维护
      • 软件规模庞大,程序复杂性随着程序规模的增加而呈指数上升
    • 与软件开发和维护的方法不正确有关:
      • 忽视软件需求分析的重要性
      • 轻视软件维护
    • 与软件开发人员的弱点有关:
      • 软件产品是人的思维结果,因此软件生产水平最终在相当程度上取决于软件人员的教育、训练和经验的积累;【产品经理的锅】
      • 对于大型软件往往需要许多人合作开发,甚至要求软件开发人员深入应用领域的问题研究,这样就需要在用户与软件人员之间相互通讯,在此过程中难免发生理解的差异,从而导致后续错误的设计或实现,而要消除这些误解和错误往往需要付出巨大的代价;【项目经理的锅】
      • 由于计算机技术和应用发展迅速,知识更新周期加快,软件开发人员经常处在变化之中,不仅需要适应硬件更新的变化,而且还要涉及日益扩大的应用领域问题研究。【研发的锅】
  • 解决办法:
    • 方法论:对计算机软件有一个正确的认识。软件是程序、数据及相关文档的完整集合。
      • 程序:能够完成预定功能和性能的可执行的指令序列。
      • 数据:使程序能够适当处理信息的数据结构。
      • 文档:开发、使用和维护程序所需要的图文资料。
    • 工具栈:
      • 软件工程支撑环境:各个阶段所使用的软件工具有机整合,支持软件开发的全过程。
    • 管理:
      • PM的组织管理

5、 有人认为软件开发时,一个错误发现得越晚,为改正它所付出的代价越大。提出你的观点并解释原因。如果你是项目经理,你如何管理你的软件项目?

  • 从表中可以看出,在需求分析阶段检查和修复一个错误所需的代价只有程序编码阶段所需代价的1/5到1/10,而在维护阶段做同样的工作所付出的代价却是编码阶段的20倍。
  • 原因:
    • 在软件开发的不同阶段进行修改付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;
    • 在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;
    • 在软件“已经完成”时在引入变动,付出的代价更高。
  • 项目管理:
    • 做好需求评估、方案评审,识别项目干系人,管理好项目干系人的期望;
    • 协调项目团队内部关系和任务分配,对开发人员的招募、培训、调配和指导;
    • 做好项目管理计划,在启动、规划、执行、监控、收尾过程中严格按照项目管理方法,充分管控项目的范围、进度、成本、质量、风险等要素;
    • 总结和分析项目的成败得失,充分总结经验和教训,作为以后项目的借鉴和参考。
 

6、数据流图的作用是什么?它有哪些基本成分?

  • 定义:
    • 数据流图(Data Flow Diagram,DFD)是用来描绘软件系统逻辑模型的图形工具,用于描绘信息流和数据从输入移动到输出的过程中所经受的变换。
  • 数据流图由四种基本符号组成:
    • 数据的源点或终点:用正方形(或立方体)表示;
    • 数据的处理:用圆角矩形(或圆形)表示;
    • 数据的存储:用开口矩形(或两条平行横线)表示;
    • 数据流:用箭头表示。
  • 附加符号:
    • 星号(*):表示数据流之间是“与”关系
    • 加号(+):表示数据流之间是“或”关系
    • 异或号(⊕):表示数据流之间是互斥的关系。

7、什么是软件工程?它与软件工程方法学有何关系:

  • 定义:
    • 软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,经济地开发出高质量的软件并有效地维护它。
    • 软件工程是把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件之中。
    • 软件工程过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
  • 软件工程与软件工程方法学的关系:
    • 软件工程包括技术和管理两个方面的内容。
    • 软件工程方法学是指在软件生命周期全过程中使用的一整套技术方法的集合,包括了方法、工具和过程。
      • 方法:完成软件开发的各项任务的技术方法,回答“怎么做”的问题;
      • 工具:为运用方法而提供的自动的或半自动的软件工程支撑环境;
      • 过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

8、什么是软件的生命周期?试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点。

  • 软件生命周期(软件工程模型)由软件定义、软件开发和运行维护三个时期组成。
    • 软件定义分为三个阶段:
      • 问题定义
      • 可行性研究
      • 需求分析
    • 软件开发分为四个阶段:
      • 系统设计:
        • 总体设计(概要设计)
        • 详细设计
      • 系统实现:
        • 编码和单元测试
        • 综合测试
    • 运行维护:
      • 通过各种必要的维护活动使系统持久地满足用户的需要。
      • 每一次维护活动本质上都是一次压缩和简化了的软件定义和开发过程。
  • 瀑布模型(文档驱动,目前应用最广泛):
    • 定义:
      • 将软件生命周期各活动规定为依线性顺序联接的若干阶段的模型,是一种整体开发模型。里程碑或基线驱动或者说文档驱动。过程逆转性很差,或者说不可逆转。
      • 收集需求→分析→设计→编码→测试→维护。
    • 特点:
      • 阶段间具有顺序性和依赖性。
      • 推迟实现:清楚地区分逻辑设计和物理设计,尽可能推迟程序的物理实现。
      • 质量保证:
        • 每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。
        • 每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。
    • 优点:
      • 严格按照生命周期的各个阶段来进行开发,强调了每一阶段的严格性。解决在开发阶段后期修正不完善的需求说明所花费的巨大费用问题。
      • 在消除非结构化软件、降低软件的复杂性、促进软件开发工程化方面起了很大作用。
    • 缺点:
      • 开发过程一般不能逆转,否则代价太大。
      • 实际的项目开发很难严格按该模型进行。
      • 客户往往很难清楚地给出所有的需求,而该模型却要求如此。
      • 最终交付的产品可能不是用户真正需要的。
    • 适用场景:
      • 在开发时间内需求没有或很少变化。
      • 分析设计人员对应用领域很熟悉。
      • 低风险项目(对目标、环境很熟悉)。
      • 用户使用环境很稳定。
      • 用户除提出需求以外,很少参与开发。
  • 快速原型模型(原型驱动):
    • 定义:
      • 以某个软件原型为参照模型的开发方法,叫做原型法。原型驱动。本质是“快速”。
      • 收集需求→快速原型→构建→移交部署。
      • 在初步需求分析之后,马上向客户展示一个软件产品原型,对客户进行培训,让客户试用,在试用中收集客户意见,修改原型,再让客户试用,反复循环几次,直到客户确认为止。
    • 特点:
      • 不带反馈环,开发基本按照线性顺序进行。
    • 优点:
      • 可以得到比较良好的需求定义,容易适应需求的变化。
      • 有利于开发与培训的同步。
      • 开发费用低、开发周期短且对用户更友好。
    • 缺点:
      • 客户与开发者对原型理解不同。
      • 准确的原型设计比较困难。
      • 不利于开发人员的创新。
    • 适用场景:
      • 已有产品/产品原型,只需客户化的项目。
      • 简单而熟悉的行业或领域。
      • 有快速原型开发工具。
      • 进行产品移植或升级。
  • 增量模型(模块驱动):
    • 定义:
      • 增量模型将软件产品看作一组增量构件,每次设计、实现、集成、测试和交付一块构件,直到所有构件全部实现为止。
      • 分析→设计→编码→测试,分析→设计→编码→测试,分析→设计→编码→测试。
    • 特点:
      • 任务或功能模块驱动,可以分阶段提交产品。
      • 有多个任务单,这些多个任务单的集合,构成项目的一个总任务书(总用户需求报告)。
    • 优点:
      • 能在较短时间内向用户提交可完成部分工作的产品。
      • 逐渐增加产品功能可以使用户有充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
      • 能在软件开发早期阶段使投资获得明显回报和易于维护。
    • 缺点:
      • 并行开发构件有可能遇到不能集成的风险,软件必须具备开放式的体系结构。
      • 增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而使软件过程的控制失去整体性。
    • 适用场景:
      • 在开发过程中,客户接受分阶段交付。
      • 开发人员对应用领域不熟悉,难以一步到位。
      • 工期过紧的中等或高风险项目。
      • 用户可参与到整个软件开发过程中。
      • 使用面向对象语言或第四代语言。
      • 软件公司自己有较好的类库、构件库。
  • 螺旋模型(风险驱动):
    • 定义:
      • 螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控,使用原型及其他方法来尽量降低风险。
    • 优点:
      • 对可选方案和约束条件的强调,利于软件重用,可以在项目的各个阶段进行变更。
      • 以小的分段来构建大型系统,使成本计算变得简单容易。
      • 客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
      • 随着项目推进,客户始终掌握项目的最新信息 , 从而能够和管理层有效地交互。 
    • 缺点:
      • 要求开发人员具有相当丰富的风险分析和排除风险的经验及专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失。
      • 过多的迭代次数会增加开发成本,延迟提交时间。
    • 适用场景:
      • 适用于内部开发大规模软件项目。

9、分析模型:

  • 数据字典:描述软件使用或产生的所有数据对象。
  • 数据流图:处理规格说明。
  • 状态转换图:控制规格说明。
  • 实体-关系图:数据对象描述。

10、根据以下描述构建邮件系统的E-R图;
某公司拟开发一多用户电子邮件客户端系统,部分功能的初步需求分析结果如下:
(1)邮件客户端系统支持多个用户,用户信息主要包括用户名和用户密码,且系统中的用户名不可重复。
(2)邮件账号信息包括邮件地址及其对应的密码,一个用户可以拥有多个邮件地址。
(3)一个用户可拥有一个地址簿,地址簿信息包括联系人编号、姓名、电话、单位、地址、邮件地址1、邮件地址2、邮件地址3等信息。地址簿中一个联系人只能属于一个用户,且联系人编号唯一标识一个联系人。
(4)一个邮件账号可以含有多封邮件,一封邮件可以含有多个附件,邮件主要包括邮件号、发件人地址、收件人地址、邮件状态、邮件主题、邮件内容、发送时间、接收时间。
其中,邮件号在整个系统内唯一标示一封邮件,邮件状态有已接受、待发送、已发送和已删除4种,分别表示邮件是属于收件箱、发件箱、已发送箱和废件箱。一封邮件可以发送给多名用户。附件信息主要包括附件号、附件文件名、附件大小。一个附件只属于一封邮件,附件号只在一封邮件内唯一。

面试常见问题——软件工程(一)_第1张图片

 

11、某培训中心要研制一个计算机管理系统。它的业务是:
将学员发来的信件收集分类后,按几种不同的情况处理。
(1)如果是报名的,则将报名数据送给负责报名事务的职员,他们将查阅课程文件,检查 该课程是否额满,然后在学生文件、课程文件上登记,并开出报告单交财务部门,财务人员开出发票给学生。
(2)如果是想注销原来已选修的课程,则由注销人员在课程文件、学生文件、和账目文件上做出相应的修改,并给学生注销单。
(3)如果是付款的,则由财务人员在账目文件上登记,也给学生一张收费收据。
要求:试根据以上描述画出数据流图。

面试常见问题——软件工程(一)_第2张图片

12、高考录取分数系统有以下功能:
(1)计算标准分:根据考生原始分计算,得到标准分,存入考生分数文件;
(2)计算录取分数线,根据标准分、招生计划文件中的招生人数,计算录取线,存入录取线文件。
试根据以上描述的功能画出该系统的数据流图。

面试常见问题——软件工程(一)_第3张图片

13、在保险箱系统中,保险箱有五种状态:锁定、解锁、报警、转解1和转解2。通常情况下,保险箱为锁定状态,转盘转动3次,只要有一次转动到不正确的地方,保险箱都会报警;保险箱第一次正确转动,显示转解1;第二次正确转动,显示转解2;如果3次都转动正确,则保险箱解锁。  试给出保险箱类的状态图。

在状态图中定义的状态主要有:初态、终态和中间状态,初态只能有1个,终态可以有0或多个。

 

面试常见问题——软件工程(一)_第4张图片

 

你可能感兴趣的:(软件工程)