计算机考研复试之软件工程

博主本人整理资料不易,如果文章对大家有用的话,恳请大家能够动动小手帮忙点个赞,如果能点个关注的话那就更好了…

软件开发过程模型

  • 瀑布模型:将软件生存周期的各项活动规定为固定顺序而连接的若干阶段工作,形如瀑布流水,最终得到软件产品。适用于需求全面稳定的项目。
  • 快速原型模型:快速原型模型开发是顺序进行的,本质是快速的。适用于领域熟悉的项目。
  • 增量模型:增量模型的开发过程是递增式的过程。适用于产品升级或新版本的开发。
  • 螺旋式过程模型:使用原型及其他方法降低风险,可以把它看做是每个阶段前都增加了风险分析过程的快速原型模型。适用于内部开发的大型软件项目。
  • 喷泉模型:是面向对象的软件开发过程,特性是迭代,平滑过渡
  • 敏捷过程:适用于商业竞争环境下对小型项目提出的有限资源有限开发时间约束。极限编程是最著名的敏捷过程。

黑盒测试和白盒测试

  • 黑盒测试:
    把程序看成一个黑盒子,完全不考虑程序的内部结构,是在程序接口进行的测试,只检查程序功能是否正常使用,程序是否能适当接受输入数据并产生正确的输出信息,运行过程中能否保持外部信息的完整性。
  • 白盒测试:
    白盒测试把程序看成装在一个透明的盒子里,测试者完全知道程序的结构和算法,按照程序内部结构的逻辑测试程序,检查程序中的主要执行道路是否能按预定要求正常工作。

数据流图

  • 数据流图(DFD):
    是描述系统中数据流程的一种图形工具,它标志了一个系统的逻辑输入和逻辑输出,以及把逻辑输入转换逻辑输出所需的加工处理。

UMI是软件工程常用的设计工具(还有数据流图)

UML图包括九种:案例图、类图、对象图、构件图、部署图、活动图、协作图、状态图、序列图。在这些图中使用案例图、类图、序列图是最有用的。

  • 1、需求阶段
    采用用例图描述需求
  • 2、分析阶段
    采用类图描述静态结构
    采用顺序图、合作图、活动图、状态图描述动态行为
  • 3、设计阶段
    采用类图、包,对类的接口进行设计
  • 4、实现阶段
    将类用某面向对象语言实现
  • 5、继承与交付阶段
    构件图、包、部署图
  • 6、测试阶段
    单元测试—类图和类的说明书

软件生命周期由哪些阶段组成?

软件生命周期由软件定义、软件开发、软件维护三个时期组成。

  • 软件定义时期的任务:问题定义、可行性研究、需求分析
  • 软件开发时期的任务:(设计、实现、测试)总体设计、详细设计、编码和单元测试、综合测试
  • 软件维护时期的任务:软件维护

什么是软件工程?目前有哪几种主要的软件工程方法?

  • 概括地说软件工程是指导计算机软件开发和维护的一门工程学科,采用工程的概念、原理、技术和方法来开发与维护软件,并把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
  • 主要方法有:传统方法(也称经典软件工程方法)、生命周期方法、结构化泛型方法面向对象方法。

软件过程

软件生命周期所设计的一系列相关过程,是指一套关于项目的阶段、状态、方法、技术和开发、维护软件的人员以及Artifacts(计划、文档、模型、编码、测试、手册等)组成。包括基本过程类、支持过程类、组织过程类。

  • (1)基本过程类包括获取过程、供应过程、开发过程、运作过程、维护过程和管理过程。
  • (2)支持过程类包括文档过程、配置管理过程、质量保证过程、验证过程、确认过程、联合评审过程、审计过程以及问题解决过程。
  • (3)组织过程类包括基础设施过程、改进过程、培训过程。

软件需求分析的任务是什么?有哪些主要步骤?

需求分析的基本任务是深入描述软件的功能和性能、确定软件设计的约束和软件同其它系统元素的接口细节、定义软件的其它有效性需求,总之,需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么”的问题。
主要步骤:

  • 1、问题识别
    (1)功能需求:明确所开发的软件必须具备什么样的功能
    (2)性能需求:明确待开发的软件的技术性能指标
    (3)环境需求:明确软件运行时所需要的软、硬件的要求
    (4)用户界面需求:明确人机交互方式、输入输出数据格式
  • 2、分析与综合,导出软件的逻辑模型
    分析人员对获取的需求,进行一致性的分析检查,在分析、综合中逐步细化软件功能,划分成各个子功能。用图文结合的形式,建立起新系统的逻辑模型。
  • 3、编写文档
    (1)编写“需求规格说明书”,把双方共同的理解与分析结果用规范的方式描述出来,作为今后各项工作的基础。
    (2)编写初步用户使用手册,着重反映被开发软件的用户功能界面和用户使用的具体要求,用户手册能强制分析人员从用户使用的观点考虑软件。
    (3)编写确认测试计划,作为今后确认和验收的依据。
    (4)修改完善软件开发计划。在需求分析阶段对待开发的系统有了更进一步的了解,所以能更准确地估计开发成本、进度及资源要求,因此对原计划要进行适当修正。

简述结构化分析、设计的要点

  • 结构化分析方法适合于数据处理类型软件的需求分析。其要点是“自顶向下”地开发系统,由整体到各组成部分,由表及里,由抽象到具体,逐步求精。
  • (1)模块化(2)自顶向下(3)上层模块分解为下层模块
  • 有三种不同的结构形式:即顺序结构、选择结构、循环结构

软件测试的目标是什么?有哪几种主要测试方法?

软件测试的目标:

  • (1)测试是为了发现程序的错误而执行程序的过程。
  • (2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。
  • (3)成功的测试是发现了至今为止尚未发现的错误的测试。
    软件测试的方法有:动态测试、静态测试和正确性证明。
  • a. 黑盒测试:黑盒测试是将被测试软件看成一个黑盒子,只考虑系统的输入和输出,完全不考虑程序内部的逻辑结构和处理过程。黑盒测试的依据是开发各阶段的需求规格说明。
  • b. 白盒测试:白盒测试是将黑盒子打开,研究源代码和程序内部的逻辑结构

软件系统的三个测试阶段

  • 开发测试
    在开发过程中对系统进行测试以发现bug和缺陷
  • 发布测试
    在系统发布给用户之前,单独的测试团队测试系统的完整版本
  • 用户测试
    其中系统的用户或潜在用户在自己的环境中测试系统

白盒测试主要有哪些覆盖?

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

选择一种程序设计语言主要有哪些依据?

  • 为了使程序容易测试和维护以减少声明周期的总成本,选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构。
  • 为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误
  • 为了降低软件开发和维护的成本,选用的语言应该有良好的独立编译机制

上述这些要求是选择语言的理想标准,但是在实际选用语言时不能仅仅考虑理论上的标准,还必须同时考虑实用方面的各种限制。

  • (1)系统用户的要求
  • (2)可以使用的编译程序
  • (3)可以得到的软件工具
  • (4)系统规模
  • (5)程序员的知识
  • (6)软件可移植性要求
  • (7)软件的应用领域

软件维护的目标是什么,有哪几种维护类型?

  • 目标:纠正在使用过程中暴露出来的错误而进行的改进型维护,适应外部环境的变化而进行的适应性维护,改进原有的软件而进行的完善性维护,以及改进将来的可维护性和可靠性而进行的预防性维护。软件维护的分类:纠错性维护、适应性维护、完善性维护。
  • 类型
    (1)纠错性维护:由于前期的测试不可能揭露软件系统中所有潜在的错误,用户在使用软件时仍将会遇到错误,诊断和改正这些错误的过程称为纠错性维护。
    (2)适应性维护:由于新的硬件设备不断推出,操作系统和编译系统也不断地升级,为了使软件能适应新的环境而引起的程序修改和扩充活动称为适应性维护。
    (3)完善性维护:在软件的正常使用过程中,用户还会不断地提出新的需求。为了满足用户新的需求而增加软件功能的活动称为完善性维护。

简述提高软件质量的主要措施

  • 复审
    是在软件生命周期每个阶段结束之前,都采用一定的标准对该段产生的软件配置成分进行严格的正式或非正式的检测。

  • 复查
    是检查已有的材料,以断定在软件生命周期某个阶段的工作是否能开始或继续。

  • 管理复审
    是向开发组织或使用部门的管理人员提供有关项目的总体状况、成本和进度等方面的情况,以便他们从管理角度对开发工作进行审查。

  • 测试
    包括测试计划、测试过程和测试结果3个阶段。

面向对象如何实现模块独立性,其耦合和内聚的含义是什么?

因为对象是由数据及可以对这些数据施加的操作所组成的统一体,而且对象是以数据为中心的,操作围绕对其数据所需做的处理来设置,没有无关的操作。因此,对象内部各种元素彼此结合得很紧密。内聚性相当强,由于完成对象所需要的元素(数据和方法)基本上都封装在对象内部,它与外界的联系自然就比较少。因此,对象之间的耦合通常比较松。总之,面向对象使用对象、类、继承和消息的方法,既使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信来实现模块的独立性。

面向对象和面向过程软件工程有哪些区别?

  • 区别一:
    面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;
    面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事务在整个解决问题的步骤中的行为

  • 区别二:
    面向过程是把一件事一项工程分解成为一个个小的功能,用一个个函数来实现;
    面向对象是把事情看成是一个个小的对象组成的,或者说一个个小部分组成的,这些对象之间的相互关系,构成了整个项目。在面向对象的思想中,万物皆对象。而“类”,就是对象的抽象或者说是概括。

简述对象、类、消息、方法的基本概念

  • 对象
    对象是人们进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。


  • 类是具有相同或相似性质的对象的抽象。对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。

  • 消息
    对象之间进行通信的结构叫做消息。在对象的操作中,将一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接收消息的对象名、发送给对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。

  • 方法
    类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体

简述面向对象分析设计的三个模型

三个模型:对象模型、动态模型、功能模型

  • 对象模型
    对象模型描述系统的静态结构,包括类和对象,它们的属性和操作,以及它们之间的关系。构造对象模型的目的在于找出与应用程序密切相关的概念。对象模型用包含对象及对象的关系图表示。

  • 动态模型
    动态模型着重于系统的控制逻辑,考察在任何时候对象及其关系的改变,描述这些涉及时序和改变的状态。动态模型包括状态图和事件跟踪图。状态图是一个状态和事件的网络,侧重于描述每一类对象的动态行为。事件跟踪图则侧重于说明系统执行过程中的一个特点“场景”,也叫作脚本,是完成系统某个功能的一个事件序列。脚本通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件。

  • 功能模型
    功能模型着重于系统内部数据的传送和处理。功能模型表明,通过计算,从输出数据能得到什么样的输出数据,但不考虑参加计算的数据按什么时序执行。功能模型由多个数据流图组成,它们指明从外部输出,通过操作和内部存储,直到外部输出的整个数据流情况。功能模型还包括了对象模型内部数据间的限制。功能模型中的数据流图往往形成一个层次结构,一个数据流图的过程可以由下一层的数据流图作进一步的说明。

数据字典

数据字典是描述数据的信息的集合,是对系统中使用的所有数据元素的定义的集合。
绝大多数数据字典都包含下列信息:

  • 名字:数据、控制项、数据存储或外部实体的主要名称
  • 别名:第一项中对象的其他名字
  • 使用地点与方式:使用数据或控制项的处理的列表,以及使用这些对象的方式(例如作为处理的输入,从处理输入。作为数据存储,作为外部实体)
  • 内容描述:描述数据或控制内容的符号
  • 补充信息:关于数据类型、预置值、限制等的其他信息

由数据元素或数据的方式只有下述三种基本类型:

  • 顺序:即以确定次序连接两个或多个分量
  • 选择:即从两个或多个可能的元素中选取一个
  • 重复:即把指定的分量重复两次或多次

面向数据流的设计方法中变换分析的步骤

  • 第一步:复查基本系统模型
  • 第二步:复查并精化数据流图
  • 第三步:确定数据流图具有变换特性还是事务特性
  • 第四步:确定输入流和输出流的边界,从而孤立出变换中心
  • 第五步:完成“第一级分解”
  • 第六步:完成“第二级分解”
  • 第七步:使用设计度量和启发规则对第一次分割得到的软件结构进一步精化
原创文章 60 获赞 56 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_40605573/article/details/105396425