目录
软件构造的多维视图
软件构造的阶段划分、各阶段的构造活动
按阶段划分:构造时和运行时
Build-time Views
Code-level view:代码的逻辑组织(functions,classes,methods,interface)考虑类似多少个类,类中有什么结构等问题
Component-level view:代码的物理组织(files,directories,packages,libraries)
Moment view:特定时刻的软件形态
Period view:软件形态随时间的变化
Run-time Views
Runtime:程序被载入目标辑器,开始执行
Code-level view:逻辑实体在内存中如何呈现。即在某个时间点有多少个对象,对象里有什么?
Component-level view:物理实体在物理硬件环境中如何呈现
Moment view:逻辑/物理实体在内存/硬件环境中特定时刻的形态如何?
Period view:逻辑/物理实体在内存/硬件环境中的形态随时间如何变化?
内部/外部的质量指标
外部质量因素影响用户。
内部质量因素影响软件本身和它的开发者
外部质量取决于内部质量
外部质量因素
- Correctness:最重要的质量指标
1)测试和调试:发现不正确、消除不正确
2)防御式编程:在写程序的时候就确保正确性
3)形式化方法:通过形式化验证发现问题→通过数学证明 - Robustness:针对异常情况的处理(健壮性是对正确性的补充)
1)“normal”和“abnormal”是主观而非客观
2)所谓的“异常”,取决于spec的范畴 - Extendibility/可扩展性:对软件的规约进行修改,是否足够容易
- Reusability:一次开发,多次使用。发现共性,避免重复实现
- Compatibility/兼容性:不同的软件系统之间相互可容易的集成
- Efficiency:效率是软件系统对硬件资源尽可能少的需求的能力。过度的优化导致软件不再适应变化和复用
- Portability/可移植性:软件可方便在不同的技术环境之间移植
- Easy of use
- Functionality
- Timeliness/时效性:规定时间内做出产品
- Verifiability/可验证性
- Integrity/完整性:软件系统保护其各种组件(程序和数据)免受未经授权的访问和修改的能力
- Repairability/可修复性
- Economy
内部质量因素
- LOC:代码行数
- Complexity
- coupling:耦合度
- cohesion:内聚度
- Readability/可读性
- Understandability
- Clearness
- size
软件配置管理SCM与版本控制系统VCS
SCM
软件配置管理:追踪和控制软件的变化
核心:版本控制和基线的确立
软件配置项SCI:软件中发生变化的基本单元(例如:文件)
基线:软件持续变化过程中的“稳定时刻”(例如:对外发布的版本)
CMDB:配置管理数据库(存储软件的各配置项随时间发生变化的信息+基线)
VSC
版本控制系统
版本:为软件的任一特定时刻(Moment)的形态指派一个唯一的编号,作为“身份标识”
Local VCS
本地版本控制系统:仓库存储于开发者本地机器,无法共享和协作
Centralized VCS
集中式版本控制系统:仓库存储于独立的服务器,支持多开发者之间的协作
Distributed VCS
分布式版本控制系统:仓库存储于独立的服务器+每个开发者的本地机器(eg. Git)
Git的结构、工作原理、基本指令
结构:
- 本地的CMDB
- 工作目录:本地文件系统
- 暂存区:隔离工作目录和git仓库
Git的所有操作都是在一个图数据结构(对象图)上进行。
对象图/Object Graph:版本之间的演化关系图,一条边A→B表征了“在版本B的基础上作出变化,形成了版本A”
基本指令:
- 添加文件:git add xxx.xxx
- 提交文件:git commit -m “2020.7.11”
- push到远程仓库:git push -u origin master
- 从远程仓库pull:git pull origin master
- 新建分支:git checkout -b branch_name
- 切换分支:git checkout branch_name or git checkout master
- 选择一个分支与当前分支合并:git merge branch_name1