软件构造复习:第一二章

软件构造的多维视图

软件构造复习:第一二章

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

按阶段划分:构造时和运行时

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:逻辑/物理实体在内存/硬件环境中的形态随时间如何变化?
软件构造复习:第一二章

内部/外部的质量指标

外部质量因素影响用户。
内部质量因素影响软件本身和它的开发者

外部质量取决于内部质量

外部质量因素

  1. Correctness:最重要的质量指标
    1)测试和调试:发现不正确、消除不正确
    2)防御式编程:在写程序的时候就确保正确性
    3)形式化方法:通过形式化验证发现问题→通过数学证明
  2. Robustness:针对异常情况的处理(健壮性是对正确性的补充)
    1)“normal”和“abnormal”是主观而非客观
    2)所谓的“异常”,取决于spec的范畴
  3. Extendibility/可扩展性:对软件的规约进行修改,是否足够容易
  4. Reusability:一次开发,多次使用。发现共性,避免重复实现
  5. Compatibility/兼容性:不同的软件系统之间相互可容易的集成
  6. Efficiency:效率是软件系统对硬件资源尽可能少的需求的能力。过度的优化导致软件不再适应变化和复用
  7. Portability/可移植性:软件可方便在不同的技术环境之间移植
  8. Easy of use
  9. Functionality
  10. Timeliness/时效性:规定时间内做出产品
  11. Verifiability/可验证性
  12. Integrity/完整性:软件系统保护其各种组件(程序和数据)免受未经授权的访问和修改的能力
  13. Repairability/可修复性
  14. 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

GitHub

软件构造复习:第一二章