第三章 软件构造过程与配置管理

  • 第三章 软件构造过程与配置管理
    • Software Development Lifecycle(SDLC)软件开发生命周期
      • From 0 to 1 从无到有
      • From 1 to n 从有到好
    • 传统软件开发模型
      • 两种基本的方式
      • 五种模型
      • 选择模型的依据
    • Agile Development(敏捷开发)
      • 敏捷宣言
      • 极限编程
    • SCM和VCS
      • 软件配置管理
      • 版本控制和基线的建立
      • CMDB :配置管理数据库
    • Git
      • 实际的三个区域
      • Git仓库的三个部分
      • 文件的三个状态
      • Object Graph
      • 和传统的VSC对比
      • git 命令
    • 软件构建的一般流程
      • (1) Programming
      • (2) Review and static code analysis(代码评审)
      • (3) Dynamic code analysis / profiling
      • (4) Debugging and Testing
      • (5) Refactoring

第三章 软件构造过程与配置管理

Software Development Lifecycle(SDLC)软件开发生命周期

From 0 to 1 从无到有

From 1 to n 从有到好

传统软件开发模型

两种基本的方式

  • 线性过程

    • 用户需求要明确,不易更改
  • 迭代过程

    • 各阶段给用户反馈确定需求

五种模型

  • 瀑布过程(Waterfall (Linear, non-iterative))

    • 在概念、启动、分析、设计、构建、测试、实施和维护阶段,进展被视为稳步向下流动(如瀑布),易于使用,但事后更改代价高昂。

    • 特点

      • 线性推进
      • 阶段划分清楚
      • 整体推进
      • 无迭代
      • 管理简单
      • 无法适应需求增加/变化
  • 增量过程( Incremental (non-iterative))

    • 切成小模块,每次开发一个小模块

    • 要求

      • 每个小增量都能单独运行
      • 新开发的不能影响之前开发的
    • 特点

      • 线性推进
      • 增量式(多个瀑布的穿行)
      • 无迭代
      • 比较容易适应需求的增加
  • V字过程(V-Model (for verification and validation))

    • 每个阶段进行验证测试

  • 原型过程(Prototyping (iterative) )

    • 先开发一个原型(一般是一个可运行的界面),供用户评价,在圆形的基础上不断地迭代发现用户变化的需求,如果原型不好也可抛弃

    • 优点

      • 开发者早期可以从用户获得有价值的反馈
      • 开发质量高,但时间代价高
      • 适应用户的变化
    • 缺点

      • 未经过整体分析设计,整体架构不好
  • 螺旋模型(Spiral (iterative))

    • 非常复杂的过程:

      • 多轮迭代基本遵循瀑布模式
      • 每轮迭代有明确的目标,遵循“原型”过程,进行严格的风险分析,方可进入下一轮迭代
    • 适用于大程序,风险不确定的程序,高质量的程序

选择模型的依据

  • 用户参与程度有多大?–适应变化的能力
  • 开发效率/管理复杂度
  • 开发出的软件的质量

Agile Development(敏捷开发)

  • 通过快速迭代和小规模的持续改进,以快速适应变化。
  • 适用于需求不稳定的程序,当需求不稳定时,敏捷模型大于原型模型
  • Agile = 增量 + 迭代,每次迭代处理一个小规模增量
  • 极限的用户参与,极限的小步骤迭代,极限的确认 / 验证

敏捷宣言

  • 不注重文档
  • 适应变化,而不是遵循合同
  • 客户参与开发过程中
  • 每天团队交互

极限编程

  • 列出需求不要文档,先写测试,编程目的是过测试。

SCM和VCS

Software Configuration Management (SCM) and Version Control System (VCS)

软件配置管理

  • 追踪和控制软件的变化
  • 软件的任何组成部分(源代码、数据、文档、硬件、各种环境)都可能随着软件生命周期中的时间而更新。
  • 软件配置项:软件中发生变化的基本单元(例如:文件)

版本控制和基线的建立

  • 版本控制

    • 为软件的任一特定时刻( Moment )的形态指派一个唯一的编号,作为"身份标识"

    • 为什么需要版本控制

      • 回滚到上一个版本
      • 比较两个版本差异
      • 备份软件版本历史
      • 获取软件备份
      • 合并版本
      • 多个开发者之间共享和协作
      • 记录每个开发者的动作,便于“审计”
    • 版本控制的术语

      • Repository 仓库:即于SCM中的CMDB
      • Working copy 工作拷贝:在开发者本地机器上的一份项目拷贝
      • File 文件:一个独立的配置项
      • Version or revision 版本:在某个特定时间点的所有文件的共同状态
      • Change or diff 变化:即code churn,两个版本之间的差异
      • Head 程序员正在其上工作的版本
    • 版本控制方法

      • Local VCS(本地版本控制系统)

        • 仓库存储于开发者本地机器
        • 无法共享和协作
      • Centralized VCS (集中式版本控制系统)

        • 仓库存储于独立的服务器
        • 支持多开发者之间的协作
      • Distributed VCS(分布式版本控制系统)

        • 仓库存储于独 立的服务器 + 每个开发者的本地机器
        • 难同步
  • 基线的建立

    • 基线:软件持续变化过程中的“稳定时刻”(例如:对外发布的版本)

CMDB :配置管理数据库

  • 存储软件的各配置项随时间发生变化的信息+基线

Git

实际的三个区域

  • workspace
  • Local repository
  • Remote repository

注意:staging只是将文件打上标签

Git仓库的三个部分

  • .git directory 本地的CMDB
  • 工作目录:本地文件系统
  • 暂存区:隔离工作目录和Git仓库

文件的三个状态

  • 已修改
  • 已暂存
  • 已提交

Object Graph

  • 版本之间的演化关系图

  • 一条边 A->B 表征了"在版本 B 的基础上作出变化,形成了版本 A "

  • 有向无环图

  • 历史图中的每个节点都是项目的一个提交,是该时间点所有文件的完整快照。

    • 除了初始节点,每个commit指向一个父亲
    • 多个commit指向同一个父亲:分支
    • 一个commit指向两个父亲:合并
  • 只存储变化的文件,不变的文件存的是文件指针

和传统的VSC对比

  • 传统VCS

    • 存储版本之间的变化(行)
  • Git

    • 存储发生变化的文件,不变化的文件不重复存储

git 命令

  • git checkout -b xx 创建并切换分支

  • git checkout -d xx 删除分支

  • git checkout xx 切换分支

  • git merge xx 合并到当前分支,注意原分支还在

  • git commit

  • git fetch origin 一定要先获取最新版本

  • git push origin xx

  • 示例

软件构建的一般流程

(1) Programming

  • Construction languages

    • 从用途上划分

      • 编程语言(C,C++)

      • 建模语言(例如UML)

      • 配置语言(XML,JSON)

        • 配置程序
      • 构建语言(XML)

    • 从形态上划分

      • 基于语言学的构造语言
      • 基于数学的形式化构造语言
      • 基于图形的可视化构造语言
  • Programming tools

    • 集成开发环境

      • Source code editor with intelligent code completion, code refactoring tool 源代码编辑器、智能代码补全工具、代码重构工具
      • File management tool 文件管理
      • Library management tool 库管理
      • Class browser, object browser, class hierarchy diagram 软件逻辑实体可视化
      • Graphical User Interface (GUI) builder 图形化用户界面构造器
      • Compiler, interpreter 编译器、解释器
      • Build automation tools 自动化build工具
      • Version control system 版本控制系统
      • Extensible by more external third-party tools 外部的第三方工具

(2) Review and static code analysis(代码评审)

  • 旨在发现在初始开发阶段被忽视的错误,提高整体质量

  • 形式

    • Formal code review 正式的代码评审会议

    • Lightweight code review 轻量级的代码评审

      • 两个人一起编程Pair programming
    • Static code analysis 利用工具进行的静态代码分析

      • 该过程提供了对代码结构的理解,有助于确保代码符合行业标准。
      • 自动化工具可以帮助程序员和开发人员进行静态分析。
  • 目的

    • 改进代码
    • 提升程序员,相互学习

(3) Dynamic code analysis / profiling

  • 动态分析:要执行程序并观察现象、收集数据、分析不足
  • 对代码的运行时状态和性能进行度量,发现代码中的潜在问题

(4) Debugging and Testing

  • 测试:发现程序是否有错误
  • 调试:定位错误、发现错误根源

(5) Refactoring

  • 重构:在不改变功能的前提下优化代码(不改变外部行为的前提下改善内部结构)
  • 重新排列代码,进行一系列小的、保留语义的转换,让代码更易于维护和修改

第三章 软件构造过程与配置管理相关推荐

  1. 【软件体系结构】考点总结 第三章 软件体系结构风格 XJU

    软件体系结构 第三章 软件体系结构风格 前言   本文为XJU本科期间博主根据 <软件体系结构原理.方法与实践>第二版所作的期末考点总结,因为是课堂重点总结,所以有些重要知识点没有涵盖还请 ...

  2. HIT 软件构造 过程、系统、工具

    软件构造的一般流程 编码,重构,调试,测试,性能分析,代码评审,构建,发布 coding 从用途上划分:编程语言.建模语言.配置语言.构建语言 从形态上划分:基于语言学的构建语言.基于数学的形式化构造 ...

  3. 《软件质量保证与测试》学习笔记【第三章 软件测试过程所需技能】

    目录 第三章 软件测试过程所需技能(软件测试计划书) 前言 3.1软件测试计划 1.软件测试计划书的定义 2.软件测试计划的作用 3.如何制定软件测试计划 4.IEEE测试计划模板 第三章 软件测试过 ...

  4. 1-1 软件构造过程中的多维视图

    本节目标: 本节大纲: 随着时间的推移,人们对软件的认识的变化: 软件不能脱离外部环境: 软件构造的多个维度: 时间:瞬时(某一天某个时间点).周期(变化情况) 编码:构建开发(代码的结构.多少类.类 ...

  5. 《软件工程》第三章——软件设计综述

    1. 软件设计的任务与目标 任务和目标:以软件需求规格设计说明书为依据,根据其提出的系统目标,进行数据设 计(数据结构),系统结构设计(软件系统的体系结构),过程设计(吧结构转换为软件的过程性描述), ...

  6. 【软件构造】第一章 软件构造基础(1)

    一.软件构建多维视图 1. 什么是软件 (1)构成 ·程序Program:UI, Algorithms, Utilities, APIs, test cases, etc ·数据Data:files, ...

  7. 【软件构造】课件精译(三)软件生命周期与配置管理

    一.本章概述 1.软件开发的生命周期 2.传统软件开发模型(瀑布模型.增量模型.V模型.原型法.螺旋模型) 3.敏捷开发和极限编程 4.协同软件开发 5.软件配置管理 6.Git 7.总结 二.本章目 ...

  8. 构建之法第三章软件工程师的成长

    1.现在的我以及我的同学们都还不能够被称之为软件工程师,在各个方面我们都有很多的不足,与那些计算机大佬相比我们也就是大菜鸟,所以我会朝着自己的目标努力. ①我会选择C,但是我希望无论他的技术有多么娴熟 ...

  9. 第三章 软件需求分析

    软件需求分析是软件开发期的第一个阶段,基本任务是准确地回答"系统必须做什么?"这个问题.软件需求分 析是整个系统开发的基础.在此阶段结束前,系统分析员应该写出软件需求规格说明书( ...

最新文章

  1. 如何设置VSS源代码管理工具使用KDiff3
  2. Cordova各个插件使用介绍系列(七)—$cordovaStatusbar手机状态栏显示
  3. 【TarsosDSP】TarsosDSP 简介 ( TarsosDSP 功能 | 相关链接 | 源码和相关资源收集 | TarsosDSP 示例应用 | TarsosDSP 源码路径解析 )
  4. CPU 以字节为单位编址,而 C 语言指针以指向的数据类型长度作自增和自减。
  5. 拓扑排序排课系统_视频结构化人脸布控系统
  6. 前端面试题集锦(二)之CSS部分
  7. vim显示行号_使用 vim 不得不看的 2 个 tips
  8. 填表法解“银行家算法”问题
  9. Ubuntu镜像源下载
  10. 微软终于屈服和妥协:宣布加入 OpenJDK,贡献构建Java生态
  11. 多线程与多进程(4)
  12. 精通JavaScript系列目录
  13. CAD三维图自动生成三视图
  14. 巧配交换机防止同网段ARP***典型实例
  15. 车内看车头正不正技巧_科二曲线行驶技巧图解,蜀黍手把手教你过关!
  16. options请求(复杂请求)
  17. 分享b2b2c带商家入驻中英繁多语言海外电商带商品库一键铺货商城源码
  18. java多线程实现动态效果_java多线程实现礼花绽放的效果,
  19. 论文写作: 实验效果不好怎么办?
  20. 股票中的做T的是什么意思?

热门文章

  1. 西门子PPI协议开发
  2. 一个人用计算机怎么打,澄海3c怎么一个人玩就是那种电脑也不动的,只想练习一下...
  3. steam转换成String工具
  4. 金秋十月,巨杉再获金融行业认可
  5. php加密应用程序,PHP加密与实际应用
  6. 计算机提示找不到系统文件,电脑搜索不到文件_电脑提示系统找不到指定文件怎么办...
  7. Python3字符串编码详解
  8. 销售宝:微信小程序为什么没有火?
  9. 快来玩玩博主的原创虐心游戏
  10. jar文件加密方法之xjar使用教程