软件构造笔记 01

本文详细介绍了软件构造的多维视图,包括构建阶段和运行阶段的视图,以及代码快照图的绘制方法。同时探讨了软件构造的不同阶段,如编码、组件构建和运行时活动。此外,还阐述了内部和外部质量指标,如圈复杂度、耦合性和内聚性,并分析了它们之间的关系。最后,提到了软件配置管理SCM与版本控制系统VCS的重要性和功能。
摘要由CSDN通过智能技术生成

软件构造的多维视图

软件构造的多维视图

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: 程序员正在工作的版本

分类:

  • 本地版本控制系统: 仓库存储于开发者本地机器,无法共享和协作
  • 集中式版本控制系统: 仓库存储于独立的服务器,支持多开发者之间的协作
  • 分布式版本控制系统: 仓库存储于独立的服务器和每个开发者的本地机器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值