软件构造笔记 01
软件构造的多维视图
Build-time views
构造阶段包括: idea, requirement, design, code, installable/executable package
Code-level view: 各基本代码块(函数、类、方法、接口等)的逻辑组织及其之间的依赖关系
Component-level view: 代码的物理组织形式(文件、目录、包、库|及其之间的依赖关系
Moment view: 特定时刻的源代码和组件形态
Period view: 软件形态随时间的变化
Run-time views
运行阶段: 程序被载入目标机器,开始执行
Code-level view: 逻辑实体在内存中的呈现形式
Component-level view: 物理实体在物理硬件环境中的呈现形式
代码快照图(Snapshot Diagram)
用途: 描述程序运行时,某时刻内存里变量层面的状态
画法小结: (摘自:https://blog.csdn.net/wxc1172300310/article/details/92849187)
对于基本类型的值,使用单线箭头指向实际值,不需要表明数据类型:
对于对象的值:
如果是可变对象,使用单线椭圆,椭圆内写明对象的类型及对象内的值:
如果是不可变对象,使用双线椭圆,椭圆内写明对象的类型及对象内的值:
如果是对象的不可变引用(final标记),使用双线箭头:(eg:id)
如果是对象的可变引用,使用单线箭头:(eg:age)
软件构造的阶段划分、各阶段的构造活动
Ø => Code: 编写程序代码,静态分析检查等
Code => Component: 设计,编译,静态链接,打包,安装等
Build-time => Run-time: 安装,部署,调试,测试等
Moment => Period: 版本控制,加载,动态链接,执行等
软件内部/外部的质量指标
内部质量指标
源代码相关:代码行数、圈复杂度等:
圈复杂度用来衡量一个模块判定结构的复杂程度,数量上表现为线性无关的路径条数,即合理的预防错误所需测试的最少路径条数。圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系。
结构相关:耦合性,内聚性等:
耦合性(英语:Coupling,dependency,或称耦合力或耦合度)是一种软件度量,是指一程序中,模块及模块之间信息或参数依赖的程度。
内聚性是一个和耦合性相对的概念,一般而言低耦合性代表高内聚性,反之亦然。低耦合性是结构良好程序的特性,低耦合性程序的可读性及可维护性会比较好。
外部质量指标
正确性: 程序需按照预先定义的 “规约” 执行,是最重要的质量指标
健壮性: 程序针对异常情况的处理,“规约” 未覆盖的情况
可扩展性: 程序规模越大,越难以扩展,为增强可扩展性,有两种重要的设计理念:简约主义设计和分离主义设计
可复用性: 一次开发,对此使用,终点在于发现共性
兼容性: 不同的软件系统之间相互可以容易的集成
同构性: 兼容性的关键在于保持同构性,同构性的关键在于标准化,包括标准化文件格式,标准化数据结构,标准化用户接口,更通用的解决方案是标准化访问协议
高效性: 减少程序的时间复杂度和空间复杂度,但 “do not worry how fast it is unless it is also right" 对性能的关注要与其他质量指标进行折中,过度的优化会导致软件不再适应变化和复用
可移植性: 软件可方便的在不同的技术环境(硬件、操作系统)之间移植
易用性: 对不同的用户而言,要容易学、安装、操作和监控
功能性: 每增加一小点功能,都确保其他质量属性不受到损失
及时性: 软件开发周期要满足时间需求
各质量指标的关系
外部质量因素影响用户,内部质量因素影响软件本身和它的开发者,外部质量取决于内部质量。
不同的质量指标相互制约,往往需要折中处理,从而达到五个关建目标:便于理解、易于开发、易于改变、安全无漏洞、运行高效。
软件配置管理SCM与版本控制系统VCS
软件配置管理SCM
任务: 追踪和控制软件的变化
核心: 版本控制和基线的确立
重要术语:
- 软件配置项SCI: 软件中发生变化的基本单元(例如:文件)
- 基线: 软件持续变化过程中的 “稳定时刻” (例如:对外发布的版本)
- 配置管理数据库CMDB: 存储软件的各配置项随时间发生变化的信息和基线
版本控制系统VCS
版本: 软件的任意特定时刻的形态指定的唯一的编号,作为 “身份标识”
重要功能:
- 回滚到上一个版本
- 比较两个版本的差异
- 获取备份
- 合并不同版本分支
- 在多个开发者之间共享和协作
- 记录每个开发者的动作,便于 “审计”
重要术语:
- 仓库(Repository): 本地或远程存储的项目的各个版本,即SCM中的CMDB
- 工作拷贝(Working Copy): 在开发者本地机器上的一份项目拷贝
- 文件(File): 一个独立的配置项
- 变化(Change、diff): 两个版本之间的差异,即code churn
- HEAD: 程序员正在工作的版本
分类:
- 本地版本控制系统: 仓库存储于开发者本地机器,无法共享和协作
- 集中式版本控制系统: 仓库存储于独立的服务器,支持多开发者之间的协作
- 分布式版本控制系统: 仓库存储于独立的服务器和每个开发者的本地机器