三维度八视图:
三个维度:构建时间和运行时间,某一时刻和某一时期,代码层面和组件层面
- 构建时某时刻代码层面:functions, classes, methods, interfaces and the dependencies among them
- 构建时某时刻组件层面:File, directory, package, library, static link, test item
- 构建时某时期代码层面:Code churn
- 构建时某时期组件层面:Software Configuration Item、Version
- 运行时某时刻代码层面:Snapshot diagram、Memory dump
- 运行时某时刻组件层面:包、库、动态链接、数据库、网络、硬件。
- 运行时某时期代码层面:Execution tracing,用日志的方式记录程序执行的调用次数。堆栈轨迹、并发线程
- 运行时某时期组件层面:事件日志、多进程、分布式程序。
视图转换:
∅→Code
Programming / Coding (ADT/OOP)
Code→Component
Design (ADT/OOP; Reusability; Maintainability)
Build−time→Run−time
Debug, unit/integration testing (Robustness and Correctness)
Moment→Period
Version control
内外部质量指标:
内部:可被用户感知的因素,如软件速度、易用性;影响用户
源码方面:Lines of Code (LOC), Cyclomatic Complexity
结构方面:耦合、内聚
其他:可读性、可理解性、清晰度、大小
外部:作为软件产品的质量,如代码可读性;影响软件本身和它的开发者
Correctness正确性、Robustness健壮性、xtendibility可扩展性、Reusability可复用性、Compatibility兼容性、Efficiency效率、Portability可移植性、Ease of use易用性、Functionality功能性、Timeliness及时性、Verifiability可验证性、Integrity完整性、Repairability可修复性、Economy经济性
软件配置管理SCM与版本控制系统VCS:
Software Configuration Mgmt(SCM):
软件配置管理:追踪和控制软件的变化,包括版本控制和软件配置项
软件配置项(SCI):软件中发生变化的基本单元(例如:文件)
baseline基线:软件持续变化过程中的“稳定时刻”(例如:对外发布的版本)
Version control systems(VCS):
古老的版本控制方法:通过复制文件并修改文件名
本地版本控制系统:
仓库存储于开发者本地机器,无法共享和协作。
集中式版本控制系统:
仓库存储于独立的服务器, 支持多开发者之间的协作。
分布式版本控制系统:(git)
仓库存储于独立的服务器 + 每个开发者的本地机器。
Git的结构、工作原理、基本指令:
一个 Git 仓库分为三个部分:
.git 目录:本地的 CMDB
工作目录:本地文件系统
暂存区:.git 目录中的一个文件,隔离工作目录和 Git 仓库
Object Graph:版本之间的演化关系图,一条边A->B表征了“在版本B的基础上作出变 化,形成了版本A”
每个commit指向一个父亲
多个commit指向同一个父亲:分支
一个commit指向两个父亲:合并
一个 “分支”只是一个指向 commit 的别名
HEAD 指向当前工作的 commit
结点:
一个 commit 存储一个树形结点。tree 中包含了数个 blob;每个 blob 是一个压缩了的仓库文件,不保存文件名信息。
对于每个文件的每个版本(或是不同文件名但相同内容的文件),Git 只会存储一个 blob,而允许多个 commit tree 指向同一个 blob。
一个 commit 中与之前相比未发生变化的文件,无需重复存储。文件未发生变化,则后续多个版本始终指向同一个文件。文件发生变化了,存储两份不同的文件,两个版本指向不同的文件。
传统 VCS 和 Git 对比:
传统VCS存储版本之间的变化(行)
Git存储发生变化的文件(而非代码行),不变化的文件不重复存储
一些git指令:
git checkout –b 分支名 ——创建分支
git checkout master ——回到分支master
git merge 分支名 ——如果两个分支在一条线上,将master与之合并,head指向master;否则,创建一个新节点,让这个节点同时指向两个结点,然后master到这个新节点,head指向master
git branch –d 分支名 ——删除分支