2023哈工大软件构造笔记(2)

Chapter 3: Software Construction Process and Configuration Management(软件构造过程与配置管理)

3.1 Software Development Lifecycle (SDLC)

软件开发生命周期(SDLC):从0到1 从无到有

软件的版本更新(Multiple versions): From 1 to n 从有到好

3.2 Traditional Software Process Models(传统软件进程模型)
两种基础模型—线性过程(Linear)、迭代过程(Iterative)

现有模型:

瀑布过程( Waterfall ):线性过程,无迭代。

增量过程(Incremental):无迭代。

V字模型(V-Model):检验(verification)与确认(validation)。

原型过程(Prototyping):迭代过程。

螺旋模型(Spiral):迭代过程。

选择合适的过程模型的依据:

用户参与程度有多大?–适应变化的能力;

开发效率/管理复杂度;

开发出的软件的质量;

瀑布过程(Waterfall):线性推进、阶段划分清楚、整体推进、无迭代、管理简单、无法适应需求(增加/变化)。

Requirements->Design->Implementation->Verification->Maintenance

增量过程(Incremental):线性推进、增量式(多个瀑布的串行)、无迭代、比较容易适应需求的增加。

 

V字模型(V-Model):V字模型可能会被认为是瀑布过程的一个拓展。相对于直接的线性流程,V字模型在代码阶段后要仿照V字的图案转折,经历一个代码整合和测试,然后检验与确认的过程。每个阶段都要测试。下图为V字模型的具体流程。

原型过程(Prototyping):是一个迭代的过程,也就是开发出来之后由用户试用/评审,发现问题反馈给开发者,开发者修改原有的实现,继续交给用户评审,循环往复这个过程,直到用户满意为止。 迭代的时间代价高,但开发质量也高。

螺旋模型(Spiral):螺旋模式是非常复杂的过程,多轮迭代基本遵循瀑布模式,每轮迭代有明确的目标 ,遵循“原型”过程, 进行严格的风险分析, 方可进入下一轮迭代。

 

3.3 Agile Development(敏捷开发)
敏捷开发:通过快速迭代和小规模的持续改进,以快速适应变化。是一种短周期开发策略。

Agile = 增量 + 迭代:每次迭代处理一个小规模增量。

把大的任务划分成一个个小规模任务从而较少人数也可以进行开发,软件也可以随时修正删改。

极限编程(eXtreme Programming XP):极限编程由KentBeck于1996年提出,是敏捷软件开发中最富有成效的几种方法之一。

3.4 Software Configuration Management (SCM) and Version Control System (VCS)
软件配置管理(SCM):追踪和控制软件的变化。

软件配置项(Software Configuration Item SCI):软件中发生变化的基本单元(例如:文件)。

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

配置管理数据库(CMDB):一个存储各配置项随时间变化的信息和基线信息的数据库。

版本控制系统(VCS):分为三种。

本地版本控制系统(Local VCS): 仓库存储于开发者本地机器,无法共享和协作;

集中式版本控制系统(Centralized VCS):仓库存储于独立的服务器, 支持多开发者之间的协作。可联网

分布式版本控制系统(Distributed VCS):仓库存储于独立的服务器 + 每个开发者的本地机器。可联网 Git

版本:指软件的任一特定时刻(Moment)的形态指 派一个唯一的编号,作为“身份标识”。

对于个人开发,版本控制提供方法以实现以下操作:回滚到上一个版本、 比较两个版本的差异、备份软件版本历史、获取备份、合并。

对于团队开发,版本控制提供方法以实现在多个开发者之间共享和协作、记录每个开发者的动作,便于“审计”。

3.5 Git as an example of SCM tool

Git详细内容请见:;以下是课程PPT中包含的Git相关内容。

创建:git init

暂存:git add

提交:git commit -m “commit message”

链接:git remote add origin

推送:git push- u origin master

创建分支:git checkout -b

切换分支:git checkout

合并分支:git merge

删除分支:git branch -d

git分为四个区域:workspace、staging、Local repository、Remote repository

一个Git仓库有三个部分:本地的CMDB(.git directory)、工作目录(Working directory)也就是本地文件系统、暂存区(Staging area)用于隔离工作目录和Git仓库。

每个文件都属于下图三个状态之一,通过文件状态就可以知道文件所处目录了

Object Graph:版本之间的演化关系图,一条边 A->B表征了“在版本B的基础上作出变化,形成了版本A”。Object Graph必然是有向无环图(DAG)。

每次commit都会新生成一个节点,HEAD头指针会指向这个节点。通常每个commit指向一个父亲,如果有多个commit指向同一个父亲则证明存在多分支,一个commit 指向两个父亲表示合并(每个commit最多有两个父节点)。

git中的单个节点存储着文件信息指针tree(存储着所有文件信息)、作者信息author、提交者信息commiter。如果文件变化了,那么文件指针会指向新的文件,如果与之前commit的文件没有变化则不变化,即不做重复存储。

传统VCS存储版本之间的变化(代码行),这样虽然所需存储空间小,但难以创建分支,而git存储发生变化的文件(而非代码行), 不变化的文件不重复存储,这样方便取出指定版本的文件,但是所需存储空间多。

git对分支的合并详细操作如下:

如果是把一个做了更改的分支合并到一个未作更改的分支,例如下图中合并hotfix分支,那么就将未作更改的分支的指针移到做过更改分支的指针的位置。

如果想把两个都有过更改的分支合并,例如下图中合并iss53分支,那么就找到共同点祖先节点,以祖先节点为起点,在两个分支的最后创建一个新的节点,该节点的两个父节点分别是两个分支的最后一个节点,然后令当前分支指针指向这个新的节点。

注意删除分支删除的只有分支的指针,并没有删除该分支上的commit。

删除hotfix分支->切换到iss53分支->commit->切换到master分支->合并merge分支

3.6 General process of software construction

1. Programming
从用途上划分:编程语言、建模语言(如UML)、配置语言(如XML)、构建语言

工具:集成开发环境,包括源代码编辑器等代码编写工具、文件管理库管理、软件逻辑实体可视化、编译器解释器、自动化build工具、版本控制系统以及外部的第三方工具。

2. Review and static code analysis
可以利用工具进行静态代码分析,例如CheckStyle,SpotBugs,PMD

3. Dynamic code analysis / profiling
对于代码的动态分析就是指要执行程序并观察现象、收集数据、分析不足,也就是对代码的运行时状态和性能进行度量,发现代码中的潜在问题。

4. Debugging and Testing
测试与调试:测试是发现程序是否有错误;调试是定位错误并发现错误根源。

5. Refactoring(重构)
重构是指在不改变功能的前提下优化代码。Eclipse支持重构功能,也可以在eclipse market下载相关工具。

7. Narrow-sense process of software construction (Build)*
软件构造的狭义过程:

Validate(验证)-> Compile(编译)-> Link(链接)-> Test(测试)-> Package(打包)-> Install(安装) -> Deploy(部署)

对于build(构建)粗略理解:就是借助工具将软件构造各阶段的活动“自动化” (编译、打包、静态分析、测试、生成文档、部署、…) ,尽可能脱离“手工作业”,提高构造效率。

构建系统:组件和进程。

构建变量和构建语言

常用的构建工具:Make、Ant、Maven、Gradle、Eclipse IDE。使用时,Build工具要配合相应的build script。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值