软构笔记 chapter 3 软件构造过程与配置管理

软件开发的基本过程

传统的软件开发模型

敏捷开发

软件配置管理(Software Configuration Management)

git作为配置管理工具

广义的软件构造过程

  1. 软件开发生命循环(Software Development Lifecycle SDLC)

是一个从无到有的过程:
SDLC软件的生命周期如下:
计划(planning)- >分析(analysis)-> 设计(Design)-> 完成功能(implementation)-> 测试与集成 (testing&integration)-> 维护(maintainance)
并不断周而复始循环,从无到有,从有到好

  1. 传统软件过程模型
    (根据用户参与程度//适应变化的能力、开发效率/管理复杂度、开发出的软件质量来选择核实的模型)

主要分为两类:线性过程和迭代过程

现存的过程模型有:

  1. 瀑布模型 waterfall(是线性非迭代的)
    管理简单、无法适应需求的增加与变化

  2. 增量模型 increment(是非迭代的)
    线性推进,是增量式的(也就是多个瀑布的穿行),比较容易适应需求的增加

  3. V字模型 V-model (验证并核实)
    可视为瀑布模型的延伸,只是变成了V字形而已

  4. 原型模型 prototyping (迭代)
    在分析与设计之间增加一个原型模块提供给用户,并在原型上持续不断的迭代发现用户变化的需求,开发者不断与用户进行交互,通过用户对开发出来的产品试用的问题反馈修改原有实现,并持续迭代这个过程,直到用户满意为止。
    特点:时间代价高但开发质量高。
    原型模型

  5. 螺旋模型 spiral(迭代)
    是瀑布模型与原型模型的结合,非常复杂。在每轮迭代拥有明确的目标,每轮通过瀑布模式进行设计,但遵循“原型”过程,进行严格的风险分析后才能进行下一轮迭代。
    螺旋模型3. 敏捷开发(Agile Development)
    即通过快速迭代和小规模的持续改进,以快速适应变化。
    在这里插入图片描述敏捷开发3Extreme:
    在这里插入图片描述即:

  6. 极限的用户参与

  7. 极限的小步骤迭代

  8. 极限的确认/验证
    Agile Development的极限迭代eXtreme Programming(XP)极限编程
    在这里插入图片描述pair programming

  9. 软件配置管理和版本控制系统

A. 软件配置管理:
作用:追踪和控制软件的变化。
几个概念:
软件配置项:Software Configuration Item(SCI)是软件中发生变化的基本单元(例如文件)
基线:软件持续变化过程的“稳定时刻”(对外发布版本的文件使用情况//见下图)
发布版本与基线配置管理数据库CMDB(configuration management database)
存储软件的各配置项虽时间发生变化的信息+基线

B. 版本控制
版本的概念就不细述了,根据修改的比重可以分为major、minor、patch
version我们经常用的古老的版本控制方法:复制黏贴产生副本并在副本的基础上修改。(往往浪费大量空间)

版本控制的好处:
个人方面:

  1. 便于回滚到上一个版本
  2. 便于比较两个版本之间的差异
  3. 便于备份软件版本历史
  4. 便于获取备份
  5. 可以合并先前的版本

团队方面:

  1. 便于在多个开发者之间共享和协作
  2. 版本控制记录每个开发者的动作,便于“审计”

几个术语:

  • 仓库(repository):即软件配置管理(SCM)中的配置管理数据库(CMDB)
  • 工作拷贝(working copy):即在开发者机器上的一份可编辑的本地拷贝。
  • 版本(version):在某个特定时间点的所有文件的共同状态
  • 变化(diff/change/code churn):两个版本之间的差异
  • Head:程序员正在其上工作的版本

三种版本控制系统(Version Control System)

  • 本地(local)版本控制系统:仓库存储于开发这本地机器无法共享和协作
    本地式
  • 集中式(centralized)版本控制系统:仓库存储于独立的服务器支持多开发者之间的协作
    集中式
  • 分布式(Distributed)版本控制系统:仓库存储于独立的服务器+每个开发者的本地机器
    分布式5. git作为软件控制管理工具

A. Git的仓库
一般说来,git的仓库通常有三个部分:.git目录(本地的配置管理数据库)、工作目录(即本地文件系统)、暂存区:隔离工作目录和git
软件在工作区修改,在暂存区暂时存放,提交至git远程git仓库中。

B. 常用的git指令有:

  • git add/mv/rm
  • git commit
  • git reset
  • git push
  • git clone/pull
  • git diff
  • git merge

具体使用见下:
git常用指令C. git的对象图
在各种操作以后,git会形成一个关于版本的有向图,如果想要获得版本变化的对象图,在git bash中使用下述指令获取:

-git clone URL local_repository

Object Gragh长这样:
Object Gragh有向边从儿子(更新版本)指向父版本,Head为当前版本,一个commit的版本可以有一个父亲也可以有两个(使用merge时),一个父亲可拥有无穷多个分支。
当文件commit的时候,只会存储软件中与原版本相比修改的文件,对于未发生变化的文件不重复存储
一个小练习:
tips:
创建新分支:git branch branchName
切换到新分支:git checkout branchName //checkout实上是将head指向BranchName
以上两个指令可以合并成:git checkout -b branchName
6. 软件构造的过程步骤
过程步骤没什么好讲的其实,看图就行
建造语言有:编程语言(C,C++,Java,Python),建模语言(UML),配置语言(XML),构建语言(XML)
在这里插入图片描述附:编译器和解释器的区别:

1、解释器

解释器是一种计算机程序,它将每个高级程序语句转换成机器代码。

2、编译器

把高级语言编写的程序转换成机器码,将人可读的代码转换成计算机可读的代码(0和1)。

两者都是将高级语言转换成机器码,解释器在程序运行时将代码转换成机器码,编译器在程序运行之前将代码转换成机器码

二者对比注:
Java既是编译的又是解释的,Java代码本身被编译成目标代码。在运行时,JVM将目标代码解释为目标计算机的机器代码。【1】

Review and static code analysis

– 结对编程
– 走查
– 正式评审会议
– 自动化评审

一般错误:

  • 错误使用 == 和equals()
  • 使用整数参与浮点运算
  • list可变时使用了固定数组
  • 规约撰写错误
  • 发生表示泄露
  • 使Immutable类型数据发生改变
  • 未声明的变量
  • 对象的实现出现问题
动态代码检测

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

debug和测试

通过测试发现程序是否有错误,通过debug定位错误发现错误根源。“debugging is a last resort.”

重构:在不改变功能的前提下优化代码

【1】https://www.cnblogs.com/lemon-le/p/13840014.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值