软件构造的多维视图
构造阶段
- 特定时刻、代码层面的视角:
源代码是如何通过基础的模块组织起来的,如函数、类、方法、接口等,以及它们的依赖。 - 一段时间、代码层面的视角
代码变化 - 特定时刻、构件层面的视角
源代码在物理上被组织为文件(files),文件进一步被组织为文件夹(directories),文件夹被压缩为包(packages);另外,可复用的模块以库(libraries) 的形式存在,通过动态链接或静态链接与代码组合成为一个整体。 - 一段时间、构件层面的视角
即各软件实体随时间如何变化。包括配置项(SCI),版本等。
总结:代码层面主要考虑diamagnetic的逻辑组织,构件层面主要考虑代码的物理组织;特定时刻主要考虑特定时刻的软件形态,一段时间主要考虑软件形态随时间的变化。
运行阶段
- 特定时刻、代码层面的视角
代码快照图(snapshot diagram)、内存信息转储(Memory dump)。 - 一段时间、代码层面的视角
执行跟踪(execution tracing),如用日志的方式记录程序执行的调用次序;UML图。 - 特定时刻、构件层面的视角
包、库、动态链接等。 - 一段时间、构件层面的视角
事件日志等。
总结:代码层面主要考虑逻辑实体在内存中如何呈现,构件层面主要考虑物理实体在物理硬件环境中如何呈现;特定时刻主要考虑逻辑或物理实体在内存或硬件环境中特定时刻的形态;一段时间主要考虑逻辑或物理实体在内存或硬件环境中的形态随时间的变化。
内/外部质量指标
外部质量指标
- 正确性——最重要的指标
- 健壮性——针对异常情况的处理
- 可扩展性——对软件规约修改是否容易
- 可复用性——一次开发,多次使用
- 兼容性——不同软件系统间是否容易的集成
- 性能
- 可移植性——在不同环境之间的移植
- 易用性
- 功能性
- 及时性
- 可验证性
- 完整性
- 可修复性
- 经济性
内部质量指标
- 与代码有关的因素
- 与架构有关的因素
- 可读性
- 可理解性
- 清晰度
- 大小
上面提到的所有指标并不是一定都要满足,实际上它们部分之间会有冲突,这时需要我们对其进行一个折中处理。在折中、取舍的过程中,要考虑到不同指标的重要性,例如,正确性和健壮性是最重要的两个质量因素,可扩展性和可复用性同样也很重要;而性能、多功能等部分指标贼相对而言不那么重要。在折中时需要对其进行综合考量。
Git
Git的结构
Git仓库分为三个部分,如下图:工作目录,暂存区和本地仓库。
- 工作目录:本地文件系统
- 暂存区:隔离工作目录和Git仓库
- 本地仓库
每个部分都对应文件的一种状态——已修改、已暂存、已提交。
在Git Object Graph的节点中,一个父节点可以有多个子节点,而一个子结点只能有0、1、2个父节点。
基本的Git命令
git checkout -b xxx(分支名)
//用于创建一个新的分支,该分支开始指向与master相同
git commit
//将暂存区内容提交到本地仓库
git add xxx
//将工作目录的内容添加到暂存区
git push
//将本地仓库的内容提交到远程仓库
git checkout xxx
//切换到xxx分支
git merge xxx
//将xxx分支合并到当前分支