计算机考研复试常问问题 软件工程UML篇

1、什么是软件工程?

  • 软件工程是指导计算机软件开发和维护的一门工程学科,即利用工程的概念、原理、技术和方法来开发和维护软件。
  • 主要的方法:结构化方法、面向对象方法和形式化方法。

2、软件的生命周期

  • 又称软件生存周期,即软件的产生到报废的整个过程。
  • 包括:
    • 问题定义:弄清楚用户需要计算机解决什么样的问题。
    • 可行性分析:从多个方面考量该软件的可行性。
    • 需求分析:弄清楚用户对软件系统的全部需求。
    • 开发阶段:设计、实现和测试。
    • 维护:纠错性维护、适应性维护、完善性维护和预防性维护。

3、软件过程

  • 为了获得高质量软件所需要完成的一系列任务的框架,规定了完成各项任务的工作步骤。

4、软件需求分析的任务

  • 定义和描述目标系统需要做什么。
  • 具体任务:
    • 获取需求,识别问题
      • 从功能、性能、界面和运行环境等多个方面识别目标系统要解决哪些问题。
    • 分析需求,建立目标系统的逻辑模型
      • 对问题进行分析抽象,并建立目标系统的逻辑模型。
    • 将需求文档化
      • 系统定义文档、系统需求文档和软件需求文档。
    • 需求验证
      • 对需求分析的成果进行评估和验证。

5、软件开发过程模型

  • 瀑布模型
    • 将软件生存周期的各项任务规定为固定顺序连接的若干阶段,就像瀑布一样,最终得到软件产品。适用于需求全面稳定的项目。
  • 快速原型模型
    • 也是顺序开发的,本质是快。适用于领域熟悉的项目。
  • 增量模型
    • 是递增式开发的。适用于产品升级或新版本的开发。
  • 螺旋式过程模型
    • 可以看作是在每个阶段前都增加了风险分析过程的快速原型模型。适用于内部开发的大型软件项目。
  • 喷泉模型
    • 一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。

6、简述结构化分析与设计

  • 结构化分析与设计是一种面向数据流的需求分析和设计方法,它适用于分析和设计大型数据处理系统。
  • 结构化分析方法:自顶向下逐层分解问题,即把大问题逐步分解为若干容易解决的小问题。
  • 结构化设计方法:以结构化分析阶段产生的成果为基础,进一步把问题自顶向下、逐步求精和模块化。

7、软件测试

  • 目的:发现程序的错误。
  • 方法:静态测试和动态测试。
    • 静态测试:测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。
    • 动态测试:通过运行程序发现错误,分为黑盒测试法、白盒测试法、灰盒测试法。
      • 黑盒测试
        • 把测试对象看作一个黑盒子,不考虑程序内部的处理过程,只在软件的接口处进行测试,依据需求规格说明书,检查程序是否满足功能要求。
      • 白盒测试
        • 把测试对象看作一个打开的盒子,不仅检查程序是否满足功能要求,还检查程序内部控制结构和数据结构是否有错。
      • 灰盒测试
        • 一种介于白盒测试与黑盒测试之间的测试,它不仅关注输出对于输入的正确性,同时也关注程序内部表现,但这种关注不像白盒测试那样详细,只是通过一些现象、事件以及标志来判断程序内部的运行状态。

8、白盒测试有哪些覆盖?

  • 语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、点覆盖、边覆盖、路径覆盖。

9、软件系统的三个测试阶段

  • 开发测试:在开发过程中对系统进行测试。
  • 发布测试:在系统发布之前,对系统进行完整的测试。
  • 用户测试:用户在自己的环境中测试系统。

10、选择一种程序设计语言的主要依据

  • 为了减少程序测试与维护的成本,选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构
  • 为了便于调试和提高软件可靠度,选用的语言能在编译过程中尽可能多地发现错误
  • 为了降低软件开发和维护成本,选用的语言应该应该有良好的独立编译机制
  • 其他因素:
    • 系统用户的需求、可以使用的编译程序、可以得到的软件工具、系统规模、程序员的知识、软件移植性要求和软件的应用领域等。

11、软件的维护

  • 目标:通过必要的维护工作使得系统能持久地满足用户的需求,为用户创造更多的效益。
  • 分类
    • 纠错性维护:纠正软件中潜在的错误。
    • 适应性维护:使软件适应外部环境的变化。
    • 完善性维护:为满足用户新的需求,而对软件进行增进。
    • 预防性维护:为方便以后的维护而进行的维护。

12、提高软件质量的主要措施

  • 复审:在软件生命周期每个阶段结束之前,都采用一定的标准对该阶段产生的软件配置成分进行检测。
  • 复查:检查已有的材料,以判定在软件生命周期某个阶段的工作能否开始或继续。
  • 管理复审:向管理人员提供有关项目的总体情况,以便他们从管理角度对开发工作进行审查。
  • 测试:包括测试计划、测试过程和测试结果三个阶段。

13、面向对象如何实现模块独立性?

  • 面向对象使用对象、类和消息来实现模块独立性。

14、耦合和内聚

  • 耦合:又称块间联系。指软件系统各模块之间相互联系的紧密程度。模块之间联系越紧密,其耦合性就越强,模块的独立性就越差。相反其耦合性就越弱(低耦合)
  • 内聚:又称块内联系。指一个模块内的元素相互联系的紧密程度。若一个模块内的各元素之间联系紧密,则内聚性就高(高内聚)

15、面向对象和面向过程开发的区别

  • 面向过程:以过程为核心,强调事件的流程和顺序。
    • 思想:需要实现一个功能的时候,看重的是开发的过程和步骤,每一个步骤都需要自己亲力亲为。
    • 例如:吃饭。需要买菜、洗菜、切菜、煮饭、炒菜...
  • 面向对象:以对象为中心,强调事件的角色和主体。
    • 思想:需要实现一个功能的时候,看重的并不是过程和步骤,而是关心的是对象,对象能做什么。
    • 例如:吃饭。找饭店,饭店提供饭菜,我们不需要关心煮饭做菜的过程。

16、对象、类和消息

  • 对象:现实生活中的实体。
    • 一类具有相同属性和行为的对象的抽象,类描述了这类对象的特征和行为。
    • 类由属性和方法组成。
      • 属性:类中的数据成员,即对象共有的特征。
      • 方法:类中操作属性的过程,即对象共有的行为。
  • 消息:对象之间进行通信的手段。

17、面向对象分析设计的模型

  • 对象模型:类以及对象之间关系的映射,描述了系统的静态结构。
  • 动态模型
    • 规定了对象模型中对象的合法变化序列,即对象的动态行为。
    • 包括:状态图和事件跟踪图。
      • 状态图:用来描述每一类对象的动态行为。
      • 事件跟踪图
        • 也称为脚本,是完成系统中某个功能的一个事件序列。
        • 脚本通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件。
  • 功能模型
    • 指明了系统应该做什么,更直观地反应了用户对目标系统的需求。
    • 通常由一组数据流程图表示。

18、UML里面有哪些图?

  • 用例图:描述系统功能。
  • 类图:描述所定义的类。
  • 对象图:类图中的各个类在某一时间点上的实例。
  • 活动图:描述一个操作的执行过程中需要完成的工作。
  • 状态图:描述一个特定对象的所有可能的状态及其引起状态改变的事件。
  • 序列图(顺序图):模拟对象之间的交互。
  • 协作图:描述对象协作关系。
  • 构件图:描述各种软件构件之间的依赖关系。
  • 部署图:描述了一个系统运行时的硬件结点。

19、数据字典

  • 系统中所使用的数据元素定义的集合。
  • 例如:名字、别名、内容描述和补充信息等。

20、面向数据流设计过程中变换分析的步骤

  • 复查基本系统模型。
  • 复查并精化数据流图。
  • 确定数据流图具有变换特性还是事务特性。
  • 确定输入流和输出流的边界,从而孤立出变换中心。
  • 完成第一级分解
  • 完成第二级分解

21、软件危机

  • 指软件在开发和维护的过程中出现一系列严重的问题。
  • 表现
    • 软件的开发成本和进度常常估计不准确。
    • 用户对已经开发出来的软件不满意。
    • 软件没有合适的文档资料。
    • 软件成本在公司的总成本中所占的比例逐年上升。
    • 软件产品的质量常常不可靠。
  • 原因
    • 用户对软件需求的描述不精确。
    • 软件开发人员对用户需求的理解有偏差。
    • 缺乏处理大型软件项目的经验。
    • 缺乏有力的指导和有效的开发工具的支持。

你可能感兴趣的:(计算机基础知识,考研)