HIT-SC-Chapter Three

HIT-SC-Chapter Three

Software Construction Process and Configuration Management

第1次课:软件构造的结果形态、如何是“好” 本次课关心:软件开发(0->1->…->n)遵循什么过程

以及:每个阶段内部的“子过程”

1 Software Development Lifecycle (SDLC)

软件开发生命周期

  • From 0 to 1

    • image-20220607170605357

    • 软件生命周期中的多个版本

    • image-20220607170642674


2 Traditional Software Process Models

  • Two basic types:
    • 线性过程:
    • 迭代过程:
    • image-20220607170915292
  • Existing models:
    • image-20220607171001651
  • 选择过程模型的依据:
    • 用户参与程度有多大--适应变化的能力
    • 开发效率/管理复杂度
    • 开发出的软件质量

(1) Waterfall (sequential, non-iterative)(连续的,非迭代)

  • 通过概念、启动、分析、设计、建设、测试、实施和维护等阶段,项目的进展被视为稳步下行(像瀑布一样)
    • image-20220607171244456
  • 易于使用,但事后更改的成本非常高。
  • image-20220607171228406

(2) Incremental (non-iterative)(增量过程,非迭代)

  • image-20220607171337300
  • image-20220607171342917

(3) V-Model(用于验证和验证)

  • v -模型表示一个开发过程,它可以被认为是瀑布模型的扩展。
  • image-20220607171431670

(4) Prototyping (iterative)原型化

  • 在原型上不断迭代满足用户变化的需求
  • 迭代:开发出来之浩由用户试用…

(5) Spiral 螺旋型(iterative)

image-20220607171610810

image-20220607171617747

3 Agile Development(敏捷开发)

  • 它提倡适应性计划、进化开发、早期交付和持续改进,并鼓励对变化的快速和灵活的响应。

  • Aglie = 增量+迭代+每次迭代处理一个小规模增量

  • image-20220608151857228

  • eXtreme Programming (XP,极限编程)

  • image-20220608152017347

4 Software Configuration Management (SCM)

and Version Control System (VCS)

软件配置管理(SCM)和版本控制系统(VCS)

(1) Software Configuration Management. (SCM)

  • SCM是跟踪和控制软件变更的任务。
  • 包括版本控制基线的建立
  • image-20220608160448330

(2) Life Cycle of a Configuration Item (CI)

配置项生命周期(CI)

  • 软件的任何组成部分(源代码、数据、文档、硬件、各种环境)都可能随着软件生命周期的时间而更新。
  • 软件配置项(SCI):SCM的基本单元。例如:文件。
  • image-20220608160756406

(3) Configuration Items (SCI) and Baselines基线

  • 基线:在某个时间点上对产品属性的一致描述,作为定义变更的基础
    • 软件持续变化过程中的“稳定时刻”,例如:对外发布的版本
  • 1)代表多个源代码文件的一组版本。
    • 比如有三个文件,aaa.c、bbb.c和ccc.h。可以对这三个文件做一个基线,取aaa.c的版
      本1.1,取bbb.c的版本1.3,取ccc.h的版本1.0。(1.1,1.3,1.0)就是一个基线。
  • 2)代表文档的一个稳定状态。
  • 比如有一个项目设计文档,当设计基本完成,开发即将开始的时候,需要把这个文档
    固定下来,内容不能再频繁改变,否则开发人员就无所适从了,可能导致每个人所参
    照的文档并不是同一个文档。
  • 一个文档如果经过讨论被通过了,被固定了,就可以说这个文档被“基线化”了,然
    后所有人就可以在这个“基线”的基础上工作。
  • 文档不可能一成不变,所以当对文档的修改仍然会不断进行,但这种修改并不会随时
    随地的添加到被“基线化”了的文档中去。因为既然是“基线”,就不能随便动。
  • 到了一定时候,修改积累到一定程度,就需要把很多修改合并到原来的文档中去了,
    并生成一个新版本的文档作为团队中所有的人的参考标准,并把老的版本淘汰掉。这
    就叫做“基线提升”。

(4) CMDB和Check-in/Check-out审核

  • CMDB: 配置管理数据库
    • 存储软件的各配置项随时间发生变化的信息+基线

(5) Versioning 版本控制

  • 版本控制:将唯一版本名称或唯一版本号分配给软件的唯一状态的过程。
  • 版本:为软件的任一特定时刻(Moment)的形态指派唯一编号,作为“身份标识”
    • 在给定的版本号类别(主要、次要)中,这些编号通常按递增顺序分配,并与软件中的新开发相对应。
    • 在细粒度级别上,修订控制通常用于跟踪电子信息的增量不同版本,无论这些信息是否是计算机软件。
  • image-20220608161621670
  • 您已经使用过的版本控制系统
    • 古老的版本控制方法:通过复制文件并修改文件名
  • 为什么需要版本控制—针对个人:
    • Reverting to a past version
    • Comparing two different versions
    • Pushing full version history to another location :备份版本软件历史
    • Pulling history back from that location:获取备份
    • Pulling history back from that location:合并
  • 为什么需要版本控制——用于团队合作:
    • Communications and share/merge works among multiple developers
    • Logging individualized works of different developers for auditing

(6) History of an SCI

  • 多个版本之间,形成线性或分支结构
  • image-20220608162230749

(7) 版本控制的术语

  • 仓库
    • SCM中的CMDB
  • 工作拷贝
    • 在开发者本地机器上的一份项目拷贝
  • 文件
    • 一个独立的配置项
  • 版本
    • 在某个特定时间点的所有文件的共同状态
  • 变化
    • code churn,两个版本之间的差异
  • HEAD
    • 程序员正在其上工作的版本
    • 指向当前分支

(8) Version Control System (VCS)

  • local VSC

    • 仓库存储于开发者本地机器,无法共享和协作
    • image-20220608163144123
  • 集中式VCS

    • 仓库存储于独立的服务器,支持多开发者之间的协作
    • image-20220608163250994
    • image-20220608163301080
  • 分布式VCS

    • 仓库存储于独立的服务器+每个开发者的本地机器
    • image-20220608163420445
    • image-20220608163431976

5 Git as an example of SCM tool

  • 管理软件发展过程中的变更
  • image-20220608163544330

(1) Git repository

  • Git仓库有三个部分:
    • .git 目录(存储所有版本控制数据的存储库): 本地的CMDB
    • 工作目录(本地文件系统)
    • 暂存区(内存中):隔离工作目录和Git仓库
    • image-20220608164038004
  • 每个文件属于以下三种状态之一:
    • 已修改
    • 已暂存
    • 已提交

(2) Git中的对象图:

  • All of the operations we do with Git :

    • clone
    • add
    • commit
    • push
    • log?
    • merge
    • 是存储项目中文件的所有版本以及描述这些更改的所有日志条目的图形数据结构上的操作。
  • 存储在存储库的.git目录中。

  • 从另一台机器/服务器复制git项目意味着复制整个对象图。

    • git clone URL local_repository
  • looks like:

    • 是一个Git项目的历史,是一个有向无环图(DAG)。
    • image-20220608164901020
    • image-20220608164912186
    • 版本之间的演化关系图,一条边A->B,代表了:在版本B的基础上做出变化,到了版本A

(3)Commit:对象图中的节点

  • 每个节点都是一个提交节点/该时间点所有文件的完整快照
  • 除了初始提交,每个commit都有一个指向父commit的指针(parent)。
  • 有些提交具有相同的父版本:它们是不同于通用的前一个版本的版本。
    • 多次commit指向同一个父亲分支
  • 有些提交有两个父级:它们是将不同历史联系在一起的版本。
    • 一个commit指向两个父亲
    • 即merge之后的操作
  • 分支(branch)只是指向commit的名称。
    • HEAD指向当前commit的branch
    • 我们需要记住我们在研究哪个分支。因此HEAD指向当前分支,而当前分支又指向当前提交。
  • Git用树节点(有一个文件表)来标识一次commit
    • 对于任何合理大小的项目,大多数文件在任何给定的修订中都不会更改。存储文件的冗余副本是一种浪费,所以Git不会这样做。
    • 相反,Git对象图将单个文件的每个版本存储一次,并允许多个commit节点共享一个副本。
    • Each commit also has log data — who, when, short log message, etc.
    • image-20220608170336747
    • image-20220608170634572
  • Managing changes in Git

image-20220608170546799

  • 添加到对象图中
    • 本地库: git commit
      • image-20220608170846935
      • image-20220608170854465
    • 远程仓库:git push&git pull

(4) Git supports Branch and Merge 分支/合并

  • branch:

    • 分支是处于修订控制下的对象的复制,以便可以沿两个分支并行进行修改。
    • image-20220608171117788
  • Creating and merging (创建和合并)branches in Git

    • 创建分支

      • git checkout branch_name
      • 创建后立即转到当前分支工作
    • 转换分支

      • git checkout -b branch_name
      • 转到其他分支
    • 合并分支

      • git merge branch_name
      • 将branch_name所指分支与当前分支合并,并以现在所在分支名作为新分支的名
        • 若两个分支在同一支上,合并后同时指向最近的那个commit节点
        • 若在不同支上,合并后,被合并的分支的指向一个新的commit节点
    • 删除分支

      • git branch -d branch_name
      • 删除所对应的分支
    • image-20220608172518921

      image-20220608172626145

(5) Git supports collaboration

  • 本地存储库和远程存储库
  • image-20220608172734381
  • image-20220608174134970
  • image-20220608174144450
  • git fetch
    • 检查是否有冲突

。。。。。。

6 General process of software construction

  • image-20220608184039772

(1) Programming

  • Construction languages
    • purpose of the languages:
      • 编程语言
      • 建模语言
      • 配置语言
      • 构建语言
    • forms of the languages:
      • 基于语言学的构造语言
      • 基于数学的形式化构造语言
      • 基于图形的可视化构造语言

1 Programming language

image-20220608184515006

  • Programming tools

    • 集成开发环境(IDE):为程序员提供软件开发的综合设施。

      • image-20220608184557300

      • Eclipse

        • Eclipse IDE: Java的开源IDE,但不限于C/ c++、PHP、Python等,开始于IBM的专有产品(Smalltalk/Java的可视化时代)
        • image-20220608184643600

2 Modeling languages 建模语言

  • 建模语言是任何可以用一组一致规则定义的结构来表达信息、知识或系统的人工语言,其目标是对系统的设计进行可视化、推理、验证和交流

  • UML

    image-20220608184754010

    image-20220608184813953image-20220608184826453

3 Configuration languages 配置语言

  • Key-Value texts (.ini, .properties, .rc, etc) XML, YAML, JSON

。。。。。。

(2) Review and static code analysis

审核和静态代码分析

  • 代码评审是对源代码的系统检查(同行评审)。
  • 评审以各种形式进行,例如
    • 结对编程
    • ……

1 Static code analysis 利用工具进行的静态代码分析

  • 静态代码分析是在没有实际执行程序的情况下对计算机软件进行的分析(对正在执行的程序进行的分析称为动态分析)。
  • 该过程提供了对代码结构的理解,并可以帮助确保代码遵循行业标准。
  • 自动化工具可以帮助程序员和开发人员进行静态分析。
  • e.g., CheckStyle, SpotBugs, PMD

2 Purpose

  • 改进代码。寻找错误,预测可能的错误,检查代码的清晰性,并检查与项目风格标准的一致性
  • 提高了程序员。代码审查是程序员相互学习和传授新语言特性、项目设计或编码标准的变化以及新技术的一种重要方式。特别是在开源项目中,很多对话都发生在代码审查的上下文中。

3 Example

image-20220608185527566

image-20220608185539634

(3) Dynamic code analysis / profiling 动态代码分析/分析

  • 动态程序分析是对通过执行程序来执行的软件进行分析。
  • 目标程序必须使用足够的测试输入来执行,以产生有趣的行为。
  • 使用软件测试方法,比如代码覆盖率,可以帮助确保观察到程序可能行为集的足够部分。

。。。。。。

(4) Debugging and Testing

  • Testing 发现程序是否有错误
  • Debugging 定位错误、发现错误根源
    • 它与测试(最初是检测错误的过程)相比,调试是测试成功的结果。
    • 与测试一样,调试并不是提高软件质量的一种方法,但它是一种诊断缺陷的方法。
    • 调试是最后的手段。

。。。。。。

(5) Refactoring

  • 重构:在不改变功能的前提下优化代码
  • 重构是在不改变代码的外部行为的同时改进其内部结构的情况下更改软件系统的过程。
  • 包括:
    • 重组(重组)代码. .
  • 重构不是简单的旧的重构
    • image-20220608190238408
    • image-20220608190247186

7* Narrow-sense process of software construction (Build)

Summary

image-20220608190623404

image-20220608190631319

posted @   三金同志  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示