软件工程概述

概述

1. 软件
  1. 软件的概念:软件是与计算机操作系统操作有关的程序、规程、规则、及任何与之有关的文档及数据的完整集合(软件=程序+数据+文档)
  2. 软件的特点
    • 逻辑产品
    • 不存在磨损问题,存在退化问题
    • 依赖于计算机操作系统
    • 复杂性
  3. 软件的分类
    • 按软件的功能分类
      • 系统软件:操作系统、数据库管理系统、设备驱动程序、通信处理程序等。
      • 支撑软件:文本编辑器、文件格式化程序、程序库系统等。
      • 应用软件:类似于qq这种软件
    • 按软件规模进行划分:微型、小型、中型、大型、甚大型、极大型
  4. 软件的发展
    • 程序设计阶段
    • 软件设计阶段
    • 软件工程阶段
2. 软件危机
  1. 软件危机的含义

    指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。

  2. 软件危机的主要表现

    • 花费超预期
    • 不能按时完成
    • 不得不重新设计
  3. 软件危机的主要特征

    • 软件开发周期大大超过规定日期
    • 软件开发成本严重超标
    • 软件质量难于保证
  4. 软件危机产生的原因

    • 用户需求不明确
    • 缺乏正确的理论指导
    • 软件开发规模越来越大
    • 软件复杂度越来越高
  5. 如何解决软件危机?

    • 软件工程就能解决
3. 软件工程及其三要素
  1. 软件工程的概念

    软件工程:指用工程、科学和数学的原则与方法研制、维护计算机软件有关技术及管理方法

  2. 软件工程三要素

    • 方法:分为传统方法和面向对象方法
    • 工具:软件工具为软件工程的方法提供了自动或半自动的软件支持环境
    • 过程:定义了以下
      • 方法使用的顺序
      • 要求交付的文档资料
      • 为保证质量和适应变化所需的管理
      • 软件开发各个阶段完成的产品的度量
  3. 软件工程项目的基本目标

    • 付出较低的开发成本
    • 达到要求的软件功能
    • 取得较好的软件性能
    • 开发的软件易于移植
    • 需要较低的维护费用
    • 能按时完成开发工作,及时交付使用
  4. 软件工程的原则

    • 选取适宜的开发模型
    • 采用合适的设计方法
    • 提供高质量的工程支撑
    • 重视软件开发过程的管理
4. 软件生存周期
  1. 软件生存周期概念
    软件产品从形成概念开始,经过开发、运行(使用)和维护直到退役的全过程,称为软件生存周期,包括软件定义、开发、使用和维护三部分。

  2. 软件生存周期的阶段

    • 可行性研究和项目开发计划:系统要解决什么问题、是否可行

    • 需求分析

      • 需求获取 --需求定义,系统功能的一个正确的陈述
      • 需求规约 --系统需求规格说明
        • 主要成分:系统模型(系统功能的一个精确、系统的描述)
      • 需求验证
    • 设计:在需求的基础上,给出系统的软件解决方案

      • 概要设计
        • 系统的软件体系结构
        • C/S结构
        • 以数据库为中心的结构
        • 管道结构
        • 面向对象的结构
      • 详细设计
        • 针对总体设计结果,给出每个模块的详细描述,把功能描述变为精确的。结构化的过程描述
    • 实现阶段:选择可用的构件,或以一种选定的语言,对每一构件进行编码

    • 确定阶段:贯穿软件开发的整个过程,主要任务是软件测试

    • 支持阶段:完善性维护,纠错性维护

    5. 软件过程模型(软件开发模型、软件生存周期模型)

    软件过程模型概念:

    描述软件过程中各种活动如何执行的模型

    • 瀑布模型

      • 经典的软件开发模型,最早的软件开发模型

      • 概念

        • 将软件生命周期中的各项活动规定为依线性顺序连接的若干阶段

        • 阶段包括:需求分析、设计、编码、测试、运行与维护。看起来像瀑布一样

        • 特点

          • 各项活动严格按照线性方式进行
          • 以文档作为驱动
          • 当前活动的工作结果需要进行验证
          • 适合于软件需求很明确的软件项目
        • 存在的问题

          • 软件开发各个阶段划分固定,阶段间会产生大量文档,增加工作量
          • 线性开发增加了开发的风险
          • 无法解决需求不明确或者变动的问题
    • 增量模型

      • 非整体开发模型,分为渐增模型和快速原型模型

      • 概念

        • 将需求分解,划分为一系列增量,并为增量排序,急需的增量先开发。

        • 每个增量都历经需求、设计、编码、测试、移交几个阶段

        • 优点

          • 按照增量持续不断的发布软件新版本,可以及时得到用户反馈,调整后续软件开发的策略
          • 因为需求确定,可先设计软件体系结构,并在开发过程中保持
        • 缺点

          • 增量模型规模不能大
          • 分解增量要求对需求十分了解,并有顶层的设计经验
          • 基本服务的增量定义和实现比较困难
        • 适用于

          • 软件需求不明确,设计方案有一定风险的项目
    • 螺旋模型

      • 将瀑布模型和增量模型结合起来,并加入了风险分析

      • 概念

        • 螺旋模型是迭代模型,从里向外,螺旋线每个回路表示的软件工程都有四个阶段组成。

        • 四个阶段:定义目标、风险分析、开发和验证、规划。

      • 优点:边学习、边建模、边开发、边使用、边改进。

      • 缺点:多次迭代导致软件体系结构变化,为软件理解和维护带来困难

      • 适应于

        • 大型的软件开发 如,电子商务,电子政务等业务软件的开发
    • 喷泉模型

      • 以用户需求为动力,以对象为驱动的模型
      • 优点:可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程
      • 缺点:开发过程中需要大量的开发人员,因此不利于项目的管理;严格的文档管理,使得审核的难度加大
    • 智能模型

      • 基于知识的软件开发模型

      • 概念

        • 称为“基于知识的软件开发模型”,把瀑布模型和专家系统结合在一起,利用专家系统来帮助软件开发人员工作

posted @ 2020-04-28 21:16  cjd  阅读(523)  评论(1编辑  收藏  举报