【软件构造】—— 复习篇 多维视图和质量目标看软件构造

这一章是软构的开篇章节,从个人理解层面进行PPT的知识梳理,如有不足欢迎大家补充指正。主要从宏观和理论层面讲述了软件构造的视图、质量指标以及标准流程。同时介绍了两种软件管理的系统,并讲解了如今最常使用的版本控制软件,也是一个SCM:Git的使用

多维度视图

这一部分主要就是弄懂一个图就可以,记住图中的内容

按阶段划分

Build-time View

idea -> 需求 -> design -> code -> 可安装/执行包

Run-time View

程序被载入目标机器开始执行

按动态性划分

Moment View

主要指特定时刻的软件形态

Period View

指软件形态随时间的变化

按构造对象的层次划分 

Code-level View (Logically)

源代码是如何通过基本的程序块如函数、类、方法、接口和他们的依赖项经过逻辑上组织起来的

Component View (Physically)

源代码是如何通过基本的程序块如文件、目录、包、库和他们的依赖项经过物理上组织起来的

总结

这部分对于上述表格中经过三个划分标准划分出的最小单元包含的对象和他们的含义进行了总结和分析

Build-time/Moment/Code-level

  • 源代码
  • AST(抽象语法树)-》语法层面
  • 接口-类-属性-方法(类图)-》语义层面

Build-time/Moment/Component-level

  • 文件
  • 静态链接
  • 测试用例
  • 构建脚本(Build Script)

Build-time/Period/Code-level

代码改变(Code Churn):源代码的改变

Build-time/Period/Component-level

各项软件实体随时间变化

  • 配置项(Configuration Item)
  • 版本

Run-time/Moment/Code-level

代码层面:逻辑实体在内存中如何呈现

Moment:逻辑实体在内存/硬件环境中特定时刻的形态

  • Snapshot 图(描述程序运行时某时刻内存里变量层面的状态)
  • 内存信息转储 (用于系统崩溃时,将内存中的数据转储保存在转储文件中,供给有关人员进行排错分析用途)

Run-time/Moment/Component-level

构建层面:物理实体在物理硬件环境中的呈现

Moment:逻辑实体在内存/硬件环境中特定时刻的形态

  • 动态链接
  • 配置
  • 数据库
  • 中间件
  • 硬件

Run-time/Period/Code-level

代码层面:逻辑实体在内存中如何呈现

Period:逻辑实体在内存/硬件环境中的形态随时间的变化

  • UML时序图:各程序单元的交互情况

  •  执行跟踪:用日志的方式记录程序执行的调用次序

Run-time/Period/Component-level

构建层面:物理实体在屋里硬件环境中的呈现

Period:物理实体在内存/硬件环境中的形态随时间的变化

事件日志:系统层面

软件构造的阶段划分、各阶段的构造活动

 

内部/外部质量指标

质量指标用来衡量软件构造的好坏。内部是针对开发者而言的,所以往往与代码本身相关;外部是针对使用的client而言的,往往更关注使用时的效果。理解了这种差异,我们可以更好的判断某个质量指标是内部还是外部

内部质量指标

行数

复杂性

可读性

易懂性

clearness

体积

外部质量指标

正确性:按照预先定义的规约执行

最重要的质量指标!!!!

正确性不可以折中!

健壮性:针对异常情况的处理

可扩展性:规约的修改是否容易

可复用性:一次开发、多次使用

兼容性:不同软件系统间可以容易的集成

性能

可移植性

易用性

Functionality

及时性

可验证性

完整性

可修复性

经济性

前两部分的导图如下

 

软件配置管理SCM

追踪和控制软件的变化

核心:版本控制和基线的确立

  • 软件配置项(SCI):软件中发生变化的基本单元(如文件)

  • 基线:软件持续变化过程中“稳定时刻”

  • 配置管理数据库(CMDB):存储软件的各配置项随时间发生变化的信息+基线

版本控制系统VCS

本地版本控制系统

仓库存储于开发者本地机器,无法共享和协作

集中式版本控制系统

仓库存储于独立的服务器,支持多开发者之间的协作

分布式版本控制系统

仓库存储于独立的服务器+每个开发者的本地机器

Git:SCM + 分布式版本控制系统

三个核心部分

  • .git:本地的CMDB

  • 工作目录:本地文件系统

  • 暂存区:隔离工作目录和Git仓库

每个文件都有三个状态

  • 已修改

  • 已暂存

  • 已提交

 

每个commit指向一个父亲。

若多个commit指向同一个父亲:分支;一个commit指向两个父亲:合并

HEAD指向当前commit,若文件不发生变化则后续多个版本始终指向同一个文件

基本命令

跟踪新文件

检查当前文件状态

查看尚未暂存的文件更新了哪些部分

提交更新到某个分支

从暂存区和工作区中删除

移动或重命名

从现有仓库克隆:复制服务器上项目的所有历史信息到本地

创建分支

切换分支

合并分支

删除分支

组合命令

在工作目录中初始化新仓库

远程管理主机

将更新取回本地

取回远程主机某个分支更新并与本地分支合并

将本地分支的更新推送到远程主机

老规矩,上个这部分的思维导图

 

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年5月11日
下一篇 2022年5月11日

相关推荐