软件构造复习笔记(1)

本文探讨了软件构造的多个层面,包括构建阶段和运行阶段的视角,以及代码级和组件级的分析。重点介绍了软件的内外部质量指标,如正确性、健壮性、可延展性和可复用性。此外,还涵盖了传统的开发模型和敏捷开发方法,并详细阐述了软件配置管理和版本控制系统的概念,特别是Git的工作原理。最后,讨论了版本控制的关键操作,如分支管理和合并。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

软件构造的多维度视图:

Moment(定格)

Period(阶段)

Code-level

Component-level

Code-level

Component-level

Build-time(构建阶段)

Source code,

AST抽象语法树

Interface-class-Attribute Method

Package,File,Static linking,library,test case,build script

Code churn代码变化

Configuration,

Item,

Version

Run-time (运行阶段)

Code snapshot,

Memory dump

Package , library,

Dynamic linking,

Database,

Configuration,

Middleware, Network, Hardware

Execution Stack trace, Concurrent

multi-threads

Event, log,

Multi-processes, Distributed processes

Procedure Call Graph过程调用图,

Message Graph消息图

内部/外部的质量指标:

程序外部质量指标:对于用户端产生影响的程序质量指标

  1. 正确性
  2. 健壮性
  3. 可延展性
  4. 可复用性
  5. 兼容性
  6. 效率
  7. 可移植性
  8. 易用性
  9. 及时性
  10. 功能性

程序内部质量指标:对于软件本身及其开发者产生影响的程序质量指标

  1. 程序行数
  2. 圈复杂度
  3. 耦合度/内聚度(一般希望耦合度低而内聚度高)
  4. 程序可读性
  5. 可理解性
  6. 清晰度
  7. 程序大小

在质量指标中,正确性(能正确运行)、健壮性(能够合法处理符合规约输入)、可延展性(能进行规约的拓展)与可复用性(一次设计可重复使用)较为重要。

传统开发模型:线性过程、迭代过程

瀑布过程:线性推进、非迭代

增量过程:线性推进、增量式、非迭代(可以看作是多个瀑布串行)

螺旋过程:分多轮迭代、每轮迭代有有明确目的,遵循原型过程

敏捷开发:通过快速迭代与小规模持续改进快速适应变化

软件配置管理SCM与版本控制系统VCS:

软件配置管理(SCM):追踪控制软件变化,包括版本控制与软件配置项

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

版本:储存软件任意特定时刻形态,有自己的独有编号

  1. 仓库:对于项目版本的一份存储
  2. 工作拷贝:开发者电脑上的一份项目拷贝
  3. 文件:一份项目的独立文件
  4. 版本:在某一时间点所有文件的共同状态
  5. HEAD:程序员正在其上工作的版本

版本控制(VCS):分为本地、集中式、分布式版本控制系统

  1. 本地式:仓库储存于开发者本地机器
  2. 集中式:仓库存储于独立服务器
  3. 分布式:仓库存储于独立服务器+每个开发者本地机器

Git的结构、工作原理、基本指令:

Git:分布式版本控制系统

  1. .git目录:本地的CMDB
  2. 工作目录:本地文件系统
  3. 暂存区:.git目录中的一个文件隔离工作目录、git仓库

对象图:有向无环图,描述了版本演化关系,A->B指A版本演化为了B

结点:一个commit存储一个树形结点,tree中包含数个blob(git用以存储不同版本)每个版本只存储一个blob,多个commit可指向一个blob

传统VCS:储存不同版本(无论变化多少都是两个全部存储)

Git:只存储发生变化的文件(并不是只存变化行)

Git创建分支:

checkout:转移到分支x

checkout -b:创建并转移到分支x

merge:归并分支,若在同一路径上则可直接归并,否则创建一同时指向两者的版本。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值