软件工程&软件构造

第一章 软件工程概述

一、软件四个本质特性:复杂性(软件创新的最大障碍) 、 一致性 、 可变性(演化性)、不可见性

二、软件产品 是 数据、程序、文档的集合


第二章 软件项目开发与管理

为什么要将软件开发过程分为多阶段

程序员个人设计、个人操作、小作坊式的开发过程,开发的软件可靠差,难以维护,无法满足快速发展的软件需求,因而产生软件危机。

软件开发过程的典型阶段

  1. 计划

  2. 需求分析
    分析整理提炼客户需求,建立完整的需求模型,编写软件需求说明

  3. 软件设计
    根据需求,确定软件体系结构,设计每个系统不见的实现算法、数据结构及接口

  4. 软件实现
    将软件设计转换成程序代码

  5. 软件验证
    检查和验证开发的系统是否符合客户期望

  6. 软件维护
    系统投入使用后对其改进,适应不断变化的需求

    • 适用场景:
      • 软件项目较小
      • 需求在项目开始前已被全面了解
      • 需求在开发过程中不太可能发生重大变化
      • 外部环境的不可控因素较少
    • 优点
      • 简单易懂易用快速
      • 项目管理比较容易
      • 可操作性强
    • 缺点
      • 难以快速响应用户需求变换
        开发早期,用户难以清楚地确定所有需求,需求的错误很难在开发后期纠正
      • 开发工作完全依赖说明文档开发者与用户缺乏沟通,不容易满足客户需求
      • 可能造成重大损失
  7. 增量过程模型
    增量模型
    1. 软件被作为一系列增量来开发,每一个增量都提交一个可操作的产品
    2. 第一个增量是核心产品,满足基本需求
    3. 客户使用上一个增量的提交物进行评价,制定下一个增量计划,说明需要增加的功能
    4. 本质:以迭代方式运用瀑布模型

    项目进度安排

    1. 分配工作量(分析设计、编码、测试)

    2. 定义 络图

    3. 分配时间

      • 计算关键路径(持续时间最长的路径
        软件工程&软件构造
      • 确定最终开始/结束时间
    4. 项目风险管理

    第三章 软件需求工程

    功能性需求

    层次性:将业务需求转化为系统需求

    非功能性需求

    满足功能需求要满足的其他约束

    产生不合格需求的原因

    需求获取与建模

    – 需求获取的手段

    – 需求建模

    1. 基于场景的方法

    2. 基于类的方法

    3. 基于模式的方法

    第四章 软件设计

    软件工程开发方法与软件设计

    • 软件工程开发方法

      本质区别
      面向过程的结构化系统=功能+数据
      面向对象的系统=对象+消息

      • 传统开发方法

        • 功能分解法

          以系统提供的功能为中心来组织系统

        • 结构化方法

          结构化方法以功能分解和数据流为核心 ,但系统功能和数据极有可能发生变化

          • 结构化分析(数据流法)

            基本策略是跟踪数据流
            研究数据在研究问题域中如何流动,在各个环节如何处理,得到的分析模型是数据流图。
            主要模型元素是数据流、加工、文件及断点、外加处理说明和数据字典。

          • 结构化设计

          • 结构化编程

        • 信息建模法

          实体-关系法发展来,接近面向对象方法,但实体只有属性但没有操作

      • 面向对象开发方法

        • 基本概念

          • 对象

          • 继承

          • 多态

          • 消息

            消息是实现对象间交互和协同的方法

    • 软件设计

    软件体系结构设计

    • 要素

      • 构件
      • 结构体
      • 约束
    • 风格

      • 数据流风格

      • 以数据为中心

      • 调用和返回

      • 面向对象体系结构风格

      • 层次体系结构

        • 客户机-服务器CS

          • 表示层:用户界面设计

          • 三层cs体系结构:业务逻辑层

            业务处理-程序设计

          • 数据层:数据库设计

        • 浏览器-服务器BS

        • CS+BS混合模式

    类、数据建模与设计

    • CRC卡片分拣法-面向对象方法

    • DFD-结构化方法

      • 数据流图DFD

        • 主要元素

          • 加工(数据处理)
          • 数据存储
          • 外部实体
          • 数据流
        • 类型

          • 环境关联DFD图(顶层DFD)

          • 系统内部DFD图

            • 0层DFD

              将顶层DFD图中的系统分解为若干个子系统,决定每个子系统间 的数据接口和活动关系,得到0层DFD图

            • 底层DFD

              针对0层DFD中的每一个子系统,对其继续分解得到细化的加工, 进而逐渐向下构造得到1层DFD、2层DFD、…、n层DFD,一直 到不能或不需再分解为止。 ? 最底层DFD中的加工称为“基本加工”

        • 基本原则

          • 数据不能在数据存储之间流动
          • 数据不能在数据存储与外部实体之间流动
          • 数据不能在外部实体之间流动
          • 数据流是单向的
          • 任何加工必须有输入和输出数据流
      • 数据字典DD

      • 结构化语言

      • 判定表或判定树

      • 实体联系图ER

      • 状态转换图STD

    行为建模设计

    • 状态图
    • 顺序图
    • 协作图
    • 活动图

    物理建模与设计


    第五章 软件编码、测试与质量保障

    软件测试

    • 目标:检验是否满足需求

    • 单元测试

      • 测试对象:软件设计的最小单元
      • 一般由编写该单元的开发人员执行:检测代码功能是否正确
    • 集成测试

      • 将所有模块按总体设计的要求组装成系统进行测试

      • 测试对象:模块间的接口

      • 目的:找出模块接口的问题

      • 方法

        • 一次性集成方式

          分别测试每个单元,再一次性将所有单 元组装在一起进行测试

        • 渐增式继承方式

          对某几个单元进行测试,然后将这些 单元逐步组装成较大的系统,在组装过程中边连接边测试

          • 深度优先/广度优先
    • 系统测试

    白盒测试(结构测试)

    透明:对程序所有内部逻辑路径进行测试

    • 执行程序内部逻辑

      • 逻辑覆盖法
    • 逻辑覆盖

      • 语句覆盖

        每条可执行语句至少被执行一次

      • 判定覆盖(分支覆盖)

        不仅每个语句必须至少执行一次,而且每个判定的每个分支都至 少执行一次

      • 条件覆盖

        不仅每个语句至少执行一次,而且使判定表达式中的每个条件都 取到各种可能的结果

      • 判定/条件覆盖

        • 判定:同时覆盖所有分支
        • 条件:包含所有判定条件
      • 条件组合覆盖

        每个判定表达式中条件的各种可能组合都至少出现一次

        • 每个判定有4个组合,共8个
        • 每个组合都要出现
    • 控制结构测试

      • 基本路径测试

        计算过程设计结果的逻辑复杂度
        并以该复杂度为指南 定义执行路径的基本集合

        • 程序流程图 →控制流图

          • 一个流程语句中有多个条件判断时,应在控制流中拆分成多个判定节点

          • 判定节点:产生分支的地方

          • 区域:由边和节点封闭起来的

            • 计算区域数时还有区域外的一部分
        • 环复杂度

          度量程序逻辑复杂度,用于计算程序的基本的独立路径数目

          • 区域数
          • 圈复杂度V(G) = 边数-结点数+2
          • 判定节点数+1
        • 线性独立路径

          至少包含一条在定义该路径之前不曾用过 的边

        • 设计测试用例

    • 循环测试

      测试循环构造的有效性

      • 简单循环

      • 串接循环

      • 嵌套循环

      • 不规则循环

        对于非结构循环,不能测试,应重新设计循环结构

    黑盒测试(功能测试)

    不考虑内部结构,只根据需求检查功能

    • 等价类测试

    • 边界值测试

      • 输入/输出为0-111.25,则测试用例应使输入/输出为0、111.25和-0.01、111.26以及0.01、111.24
    • 场景法测试

    性能测试

    • 性能指标

      • 并发用户数量
      • 响应时间
      • 吞吐量
      • TPS
      • 点击率
      • 资源利用率

    变异测试

    评估测试集充分性

    第六章 软件实施、维护

    敏捷开发

    • scrum框架

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

上一篇 2022年6月1日
下一篇 2022年6月1日

相关推荐