软件工程&软件构造

第一章 软件工程概述

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

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


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

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

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

软件开发过程的典型阶段

  1. 计划

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

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

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

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

  6. 软件维护
    系统投入使用后对其改进,适应不断变化的需求
    在这里插入图片描述

软件过程模型

  1. 瀑布模型(线性进行)
    在这里插入图片描述
    工作线性进行,上一阶段的输出是下一阶段的输入。以文档为中心(连接各阶段的关键)

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

快速应用程序开发RAD
1. 基于已有资源的构建方法快速开发
2. 本质:瀑布模型的高速变体,并行运行瀑布模型

  1. 演化过程模型
    1. 快速原型开发模型

       相比于增量模型(向核心功能里加东西),原型开发的原型可能被抛弃
      
    2. 螺旋模型

项目开发管理

软件项目估算 (复杂不确定性)

估算内容

	 	- 规模
		- 工作量
		- 进度
		- 成本

估算方法

  1. 专家判断

  2. 参数估计
    通过对大量的项目历史数据进行统计分析,使用项目特性参数建立经验估算模型

  3. 代码行技术LOC

     	- 估计代码行L=(a+4m+b)/6
     	- 总成本C=μL
     	- 总工作量pm=L/v
    

在这里插入图片描述
4. 功能点技术方法
5. 故事点方法

项目进度安排
  1. 分配工作量(分析设计、编码、测试)

  2. 定义网络图

  3. 分配时间

    • 标出最早开始/结束时间
      在这里插入图片描述
    • 标出最晚开始结束/时间
      在这里插入图片描述
    • 计算关键路径(持续时间最长的路径
      在这里插入图片描述
    • 确定最终开始/结束时间
  4. 项目风险管理

第三章 软件需求工程

功能性需求

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

- 业务需求

  eg : 课程信息维护、选课管理全部改为计算机应用
  ;目标是人们想买飞机票时首先想到的公司

- 用户需求

  eg: 学生希望学期开始前能查询所有开设课程的信息

- 系统需求

  新的软件会使得汽车的启动速度加倍

非功能性需求

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

	- 速度
	- 存储空间
	- 可用性
	- 可靠性
	- 容错性

产生不合格需求的原因

- 无足够的用户参与
- 用户需求不断增加
- 需求模棱两可
- 不必要的特性
- 规格说明过于精简
- 忽略了用户分类

需求获取与建模

- 需求获取的手段

- 面对面访谈
- 问卷调查
- 专题讨论会
- 头脑风暴

- 需求建模

  1. 基于场景的方法

     - 用户故事
    
     	- 作为xx,我希望……
    
     - 用例图
    
     	- 确定系统边界
     	- 识别并描述参与者
     	- 识别用例
     	- 识别参与者与用例之间的通讯关联
     	- 用例的详细描述
     	- 细化用例模型
    
     		- 泛化
     		- 包含《include》
     		- 扩展
    
     - 活动图
    
  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框架
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值