计算机考研初试/复试——软件工程

一、软件

软件定义

计算机程序、文档、运行程序所必须的方法、数据、规则。方法和规则在文档中说明,在程序中实现。(文档+程序+数据)

软件分类

基于软件功能的划分

  • 系统软件:与计算机硬件紧密配合使计算机各个部件与相关软件和数据协调、高校工作的软件。(如:操作系统、编译程序)
  • 支撑软件:协助用户开发软件的工具性软件(北大青鸟)
  • 应用软件:商业数据处理软件、工程与科学计算软件(CAD)、智能产品嵌入式软件(家用电器、智能手机)、人工智能软件(专家系统、模式识别软件)、个人计算机软件。

基于软件规模的划分

根据参加人员数、开发周期、产品规模(代码行LOC)决定:微型、小型、中型、大型、极大型。

软件发展

程序设计阶段、程序系统阶段、软件工程阶段(集中主机、客户机服务器两层模式、客户机服务器三层模式、浏览器服务器模式)、新技术(专家系统、云计算)

软件危机

在计算机软件开发和维护过程中遇到的一系列严重问题。

  • 开发成本和进度估计不准
  • 用户对已交付的软件不满意
  • 软件产品质量靠不住
  • 软件可维护性差
  • 软件没有适当的文档资料

软件工程

把系统化、规范化、可度量的途径应用于软件开发、运行和维护过程中;研究其实现途径(内容:软件工程技术、软件工程管理)

软件生存周期

软件从产生、发展到成熟、直至衰亡为止。
阶段:

  1. 可行性研究与计划
  2. 需求分析
  3. 总体设计
  4. 详细设计
  5. 实现(编码和单元测试)
  6. 集成测试
  7. 确认测试
  8. 使用和维护

软件过程模型

  • 瀑布模型
    特点:阶段具有顺序性和依赖性、推迟实现的观点、质量保证的观点
    缺点:过于理想化,出错无法改正(增加反馈环)、缺乏灵活性,无法解决需求不明确的问题
    优点:提高软件质量、降低软件成本、缓解软件危机
  • 快速原型模型
    特点:快速建立反映用户主要需求(需求不确定)的原型系统,反复由用户评价修正需求,开发出最终产品
    缺点:质量低下,内部结构不好
    优点:确定需求上优于瀑布模型、提供学习手段、有的原型可以成为最终产品的一部分
  • 增量模型
    特点:开发软件时将软件产品作一系列增量构建设计、编码、集成和测试
    缺点:结构开放比较困难
    优点:较短时间向用户提交可用的产品、用户有时间学习适应产品、软件结构必须开放,方便向现有产品加入新构建
  • 螺旋模型
    特点:制定计划、风险分析、实施工程、客户评估(每次都进行这四步)
    缺点:需要风险评估经验、契约开发通常需要事先指定过程模型和发布产品
    优点:大型软件开发项目有较好的风险控制
  • 喷泉模型
    特点:面向对象生存周期模型,体现迭代(求精,系统某部分被重复工作,相关功能每次迭代中逐渐加入演进系统)和无缝(分析、设计、编码各阶段不存在明显边界)特性。
    缺点:可能随时加各种信息、需求和资料,需严格管理文档
    优点:无缝、可同步开发、提高开发效率、节省时间、适应面向对象软件

二、结构化软件开发方法

结构化分析

分解化简问题、物理和逻辑表示分开、进行数据与逻辑抽象

步骤

发现需求、求精、建模、软件需求规格说明、复审

结构化分析模型

模型核心:数据字典
数据模型:E-R图表达
功能模型:数据流图(DFD)表达
行为模型:状态转换图

状态转换图

行为模型:

数据字典

对系统使用的所有数据元素定义的集合,半形式化表示

定义描述:

数据流:

*数据存储: *

三、结构化设计

数据设计、体系结构设计、接口设计、过程设计

结构化设计的概念和原理

模块化:按适当原则把软件划分成一个个较小的、相关而独立的模块
模块:又称“构件”,一般指用一个名字调用的相邻程序元素序列。
模块成本关系图

  • 过程内聚
    模块内处理元素相关,特定次序执行。如流程图中循环部分、判定部分、计算部分分成三个模块。

  • 偶然内聚
    模块内各部分没有联系。

  • 启发式规则

    • 改进软件结构提高模块独立性

      信息流

      变换流

      设计过程

      N-S图

      判定表/判定树

      过程设计语言
      伪码:用正文形式表示数据和处理过程设计工具

      程序复杂度

      McCabe方法:1、根据过程设计结果画出相应流图2、计算流图环形复杂度

      面向数据结构设计方法

      Jackson方法

      四、结构化系统实现

      编码

      • 机器语言
        优点:计算机直接识别
        缺点:效率低,重用性差
      • 汇编语言
        优点:比机器语言易读写、易调试和修改,执行速度快、占内存少,针对硬件编制
        缺点:不能编写复杂程序,依赖于机型、不通用、不可移植
      • 高级语言
        优点:编码效率高、通用性强,兼容性好,便于移植
        缺点:运行效率低,对硬件操作不如汇编

      语言选择标准
      系统用户要求、可以使用的编译程序、可以得到的软件工具、工程规模、程序员知识、软件可移植性、软件应用领域

      编码风格
      程序内部的文档、数据说明、语句构造、输入输出、效率

      测试

      测试的目的
      测试是为了发现程序中的错误而执行程序的过程、好的测试方案是极有可能发现迄今尚未发现的尽可能多的错误的测试、成功的测试是发现了迄今尚未发现的错误的测试

      黑盒测试:如果知道产品应具有的功能,可通过测试来检验每个功能是否正常使用

      • 等价类划分
        把程序的输入域分成若干数据类(数据特性类似),从每类中选取有代表性的数据作为测试用例。
      • 边界值分析法

      白盒测试:知道产品内部工作过程可通过测试来检验内部动作是否按照规格说明书规定正常执行。

      1. 逻辑覆盖
        语句覆盖:选择测试数据,使被测程序中每个语句至少执行一次
        判定覆盖:每个语句执行一次,每个判定的真假分支至少执行一次
        条件覆盖:每个语句执行一次,判定表达式每个条件取各种可能结果
        判定/条件覆盖:每个条件都取各种可能,每个判定表达式也都取各种可能
        条件组合覆盖:每个判定表达式中条件的各种组合都至少执行一次
      2. 控制结构测试
        基本路径测试:根据过程设计结果(PDL)画出流图、计算流图环形复杂度(流图的区域数)、确定线性独立路径基本集合、设计测试用例执行基本集合中的路径
        循环测试:简单循环(0次循环、一次循环、二次循环、m次循环、最大次数循环)、嵌套循环、连锁循环、非结构化循环

      测试步骤

    • 集成测试
      非渐增式、渐增式、自底向上集成、混合策略、回归测试
    • 系统测试
      恢复测试、安全性测试、强度测试、性能测试、时间需求
    • 确认测试(验收测试)
      a测试(功能,界面)、b测试(支持性)
    • 调试

      强行排错、回溯法排错、原因排错法

      软件可靠性

      可靠性:程序在给定时间间隔及环境条件下,按规格说明书的规定,成功运行的概率
      可用性:给定时间点,按规格说明书规定,成功运行的概率

      五、面向对象方法学

      对象+类+继承+传递消息实现通信

      概念

      对象:具有相同的一组操作集合,对状态和操作的封装
      :对具有相同状态和相同操作的一组相似对象的定义。类是一个抽象数据类型
      实例:由某个特定类所描述的一个具体对象

      计算机考研初试/复试——软件工程
      消息:要求某对象执行某个操作的规格说明
      方法:对象执行的操作,即类中定义的服务
      属性:类中所定义的数据
      继承:子类自动共享基类中定义的属性和方法的机制
      多态性:在类等级不同层次可共享一个方法名,不同层次每个类按各自需要实现这个方法
      重载:函数重载(在同一作用域内,参数特征不同的函数可使用相同的名字)、运算符重载(同一个运算符可以施加于不同类型操作数上面)

      与传统方法比较

    1. 传统方法中数据与过程是分离的,面向对象方法中对象把数据和处理数据的方法封装成一个单元。
    2. 传统方法中系统是过程的集合,面向对象方法中系统是交互对象的集合。
    3. 传统方法中过程与数据实体交互,面向对象方法中对象与人或其他对象交互。
    4. 传统方法中过程接受输入并产生输出,面向对象方法中对象发送与响应消息。

    UML

    静态建模机制
    用例图:获取执行者、获取用例、执行者间关联、用例关联(泛化、扩展、包含)
    类图:描述类与类间的静态关系(关联、泛化(继承)、依赖、实现)
    包图

    动态建模机制

    消息:对象间交互信息
    顺序图:描述对象间交互
    协作图:描述对象间交互关系和链接关系
    活动图

    UML物理框架机制

    构件图:展示一组构件的类型、内部结构和他们之间的关系
    配置图

    面向对象分析

    • 步骤:获取需求、整理需求、建立模型(功能模型、对象模型、动态模型)
    • 功能模型:用用例图表达,补充用例说明
    • 对象模型:描述类及相互关系,表达目标系统静态结构
    • 动态模型:用顺序图、状态图

    面向对象设计

    • 设计准则

    抽象、信息隐藏、弱耦合、强内聚、可重性

    • 启发规则

    设计结果清晰易懂、一般特殊结构深度适当、设计简单类、使用简单协议、使用简单服务

    • 设计问题域子系统
    • 设计人机交互子系统
    • 设计任务管理子系统
    • 设计数据管理子系统

    面向对象实现

    6.1程序设计
    6.2测试
    6.2.1单元测试
    单元:封装类和对象
    6.2.2集成测试
    6.2.3确认测试

    六、软件项目管理

    1. 软件规模度量
    2. 工作量估算
    3. 进度计划
    4. 组织方式
    5. 风险控制
    6. 质量控制
    7. 配置管理

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年2月16日
    下一篇 2022年2月16日

    相关推荐