软件构造的多维度视图:
Moment(定格) |
Period(阶段) | |||
Code-level |
Component-level |
Code-level |
Component-level | |
Build-time(构建阶段) |
Source code, AST抽象语法树 Interface-class-Attribute Method |
Package,File,Static linking,library,test case,build script |
Code churn代码变化 |
Configuration, Item, Version |
Run-time (运行阶段) |
Code snapshot, Memory dump |
Package , library, Dynamic linking, Database, Configuration, Middleware, Network, Hardware |
Execution Stack trace, Concurrent multi-threads |
Event, log, Multi-processes, Distributed processes |
Procedure Call Graph过程调用图, Message Graph消息图 |
内部/外部的质量指标:
程序外部质量指标:对于用户端产生影响的程序质量指标
- 正确性
- 健壮性
- 可延展性
- 可复用性
- 兼容性
- 效率
- 可移植性
- 易用性
- 及时性
- 功能性
程序内部质量指标:对于软件本身及其开发者产生影响的程序质量指标
- 程序行数
- 圈复杂度
- 耦合度/内聚度(一般希望耦合度低而内聚度高)
- 程序可读性
- 可理解性
- 清晰度
- 程序大小
在质量指标中,正确性(能正确运行)、健壮性(能够合法处理符合规约输入)、可延展性(能进行规约的拓展)与可复用性(一次设计可重复使用)较为重要。
传统开发模型:线性过程、迭代过程
瀑布过程:线性推进、非迭代
增量过程:线性推进、增量式、非迭代(可以看作是多个瀑布串行)
螺旋过程:分多轮迭代、每轮迭代有有明确目的,遵循原型过程
敏捷开发:通过快速迭代与小规模持续改进快速适应变化
软件配置管理SCM与版本控制系统VCS:
软件配置管理(SCM):追踪控制软件变化,包括版本控制与软件配置项
软件配置项(SCI)软件中发生变化的基本单位(如文件)
版本:储存软件任意特定时刻形态,有自己的独有编号
- 仓库:对于项目版本的一份存储
- 工作拷贝:开发者电脑上的一份项目拷贝
- 文件:一份项目的独立文件
- 版本:在某一时间点所有文件的共同状态
- HEAD:程序员正在其上工作的版本
版本控制(VCS):分为本地、集中式、分布式版本控制系统
- 本地式:仓库储存于开发者本地机器
- 集中式:仓库存储于独立服务器
- 分布式:仓库存储于独立服务器+每个开发者本地机器
Git的结构、工作原理、基本指令:
Git:分布式版本控制系统
- .git目录:本地的CMDB
- 工作目录:本地文件系统
- 暂存区:.git目录中的一个文件隔离工作目录、git仓库
对象图:有向无环图,描述了版本演化关系,A->B指A版本演化为了B
结点:一个commit存储一个树形结点,tree中包含数个blob(git用以存储不同版本)每个版本只存储一个blob,多个commit可指向一个blob
传统VCS:储存不同版本(无论变化多少都是两个全部存储)
Git:只存储发生变化的文件(并不是只存变化行)
Git创建分支:
checkout:转移到分支x
checkout -b:创建并转移到分支x
merge:归并分支,若在同一路径上则可直接归并,否则创建一同时指向两者的版本。