Revision Chapter2

本章主要讲软件的生命周期和配置管理。
包括了开发过程和配置管理两部分。

1 SDLC——software development life cycle生命周期

  • 主要过程包括:
    1. Planning
    2. Analysis
    3. Design
    4. Implementation
    5. Testing a Integration
    6. Maintenance
  • 应当呈现出一种波浪形。
    在这里插入图片描述

2 软件开发过程

2.1 传统开发过程

  • 强调文档。

  • 包括线性过程和迭代过程

    • 线性过程
      在这里插入图片描述

    • 迭代过程
      在这里插入图片描述

2.1.1 waterfall

从头到尾都是线性过程

  • 前提:需求精细明确。
    否则当更改需求时需要将前置条件全部重做一遍。

2.1.2 incremental

  • 将一个大的工程分为若干个模块,一个模块对应一个waterfall。(串行)。
  • 线性的
  • 前提:模型架构开放,且接口需要精细化设计。
    因为必须要求后形成的增量可以很容易地加到前面的增量中。

2.1.3 V-model

  • 每个阶段形成的产品都应通过测试,且应当可以被测试。
  • 本质上就是waterfall+测试

2.1.4 prototype

  • 迭代
  • 在需求不稳定时使用,为了让用户尽快明确需求。
  • 把界面给用户获得反馈,不断修改直到用户满意为止。然后在根据界面进行开发。

2.1.5 spiral

  • 迭代

  • 本质上是prototype的改进,引入风险分析
    prototype过程

  • 条件:长周期开发软件适用,并对专业的风险分析专业人员有要求。

2.2 敏捷开发过程

  • 尽快完成开发

  • 不重视文档(和传统开发的区别)

  • 快速迭代

    • 快速迭代&小规模持续改进,以快速适应变化
    • 软件远比文档重要
    • 用户作为开发协作的一部分,以跟进需求
    • 强调需求的变换,要求能够灵活地响应变换
  • 增量+迭代

    • 每次处理一个小规模增量
  • 3个Extreme:

    • 用户参与
    • 小步骤迭代
    • 确认/验证
  • Model:极限编程(XP:extreme programming)

    • 强调迭代的waterfall

      • 每个阶段可迭代
      • 阶段内无需产生特定文档
      • 强调实时的review——2 people结对编程
      • 测试驱动的开发:要求写代码前先根据需求写test用例
    • 这要求编程人员有充足的编程经验

3 配置管理SCM——software configuration management

包括代码+数据+文档。
!不只有代码!

3.1 版本控制

3.1.1 版本号

在这里插入图片描述

3.1.2 原始方法

复制文件并更改文件名以体现版本之间的区别。

  • 无法直观反映现今版本较之前版本的变化。

3.1.3 版本控制工具功能

  • individuals

    • 回到上一个版本
    • 比较两个version的差异
    • 备份软件版本历史
    • 获取备份
    • 合并
  • teamwork

    • 多个开发者合作
    • 记录每个开发者的动作,便于“审计”
  • 创建分支对某些功能进行扩充——便于多个开发者的合作
    在这里插入图片描述

3.1.4 一些名词

  • repository 仓库:储存各个版本
  • working copy:工作拷贝,在开发者本地机器上
  • file:文件,一个独立的配置项
  • version/revision:版本
  • change/diff:变化,版本之间的差异
  • head:当前程序员工作的版本

3.1.5 VCS版本控制工具

3.1.5.1 分类
  • 本地VCS:版本库和更新都在本地端,他人不可见。
    无法协作。

  • 集中VCS:所有version集中在一个版本库服务器
    在这里插入图片描述

  • 分布VCS:仓库存于server&每个本地computer
    在这里插入图片描述

    • git就是分布式的
    • 避免了server停止服务带来的巨大不便
3.1.5.2 Git

在这里插入图片描述

  • 其中黑色实线左侧为本地端,右侧为server端。

  • staging在机器上并没有实际存在的文件夹,而其余三个目录有真正的文件夹。

  • 每个version都是一个对象,每次commit都会形成一个新的对象

    • Object graph:version之间的关系演化(是一个有向无环图)

      • A→B:在B的基础上修改后形成A
        在这里插入图片描述
  • 合并也会生成一个commit对象

    • 用到 当前需要合并的两个commit对象 以及 这两个commit的祖先 ,因为当前这些祖先中包含了当前合并对象中未更改的文件部分内容
  • commit
    在这里插入图片描述

    • 和之前commit中没有改变的文件,不需要重复存储

      • !不是直接复制老版本的全部内容
    • Git理论上可以创建无穷多个分支,且 创建所需的时间和已经有的分支数量没有关系

4 软件构造的过程、系统和工具

4.1 广义的软件构造

Created with Raphaël 2.2.0 开始 design programming/refactoring debugging testing build release 结束
  • programming languages编程语言

    • IDE集成开发环境:如eclipse
  • modeling languages建模语言

    • 比如UML

      在这里插入图片描述

    • 解决了代码不易理解的问题,便于中间建模评估软件架构

  • configuration languages配置语言

    • 比如XML、JSON
    • 控制程序执行时的各项行为
  • Review

    • 静态代码分析工具

      • 不需要执行程序
      • 比如spotbugs、checkstyle
    • 动态代码分析工具

      • 执行程序并观察现象、收集数据、分析不足
      • 如test、时间和空间效率性能
  • debugging&testing

    程序开发的任何阶段的成果都必须可test。
    不通过test→debug,定位发现错误根源

  • refactoring重构

    不改变功能的前提下优化软件代码结构

4.2 狭义的软件构造

Build过程:
即编译、打包成可执行程序的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值