软件构造复习——一、二、三章复习总结

写在前面
关于我缓慢的期末复习进度,但是认认真真看了一遍PPT后确实解决了一些疑惑,也学会了一些当时没有学会的东西,下面的这些算是我一、二、三章的复习知识点总结,请多指教。

第一章 软件构造的多维度视图和质量目标

显然这章关注的重点就是两点:多维视图质量目标

非常非常重要的一个表格:

(图源PPT,侵删)
多维视图
一些解释:

  1. 软件系统的三个维度:(对应表格上的横纵头头)
    by phases:build and run time views
    by dynamics:moment and period views
    by levels:code and component views
    空集 -> code -> componet
    Build time -> Run time
    Moment -> period
  2. Build time:源代码和各组成部分在某一特定时刻的样子,程序在某一特定时刻表现如何(in a specific time)

在这个维度,重视的是代码的逻辑组织 Build-time moment code-level物理组织 Build-time moment component level

  1. Run time:源码和各组成部分是如何随着时间进化和改变的,以及随时间表现如何(along with time)

在这个维度,
代码层面 Run-time moment code level:逻辑实体在内存中如何呈现
构建层面 Run-time moment code level:物理实体在物理软件环境中如何呈现
period 就看这些随时间变化如何

  1. 静态链接发生在Build阶段,库被拷贝进入代码形成整体,执行时需提供库文件,库可理解为被需要的函数。
    动态链接发生在Run阶段,库文件不会在build阶段被加入可执行软件,仅仅做出标记程序运行时根据标记装载库至内存与主程序相连,发布软件时记得将程序所依赖的所有动态库都复制给用户。
  2. 其他不做详述

关于质量目标

包含两类:
外部质量目标(External quality factors):用户体验的目标
内部质量目标(Intern quality factors):程序员代码行
只有外部因素是重要的
软件的外部质量取决于软件的内部质量

简单提几个重要的外部质量因素
(1)正确性:最重要的质量指标,软件行为要严格符合规约中的定义
(2)健壮性:针对异常情况的处理,出现规约之外的情形要做出恰当反应
注:未被规约覆盖的情况即为异常情况
五个关键质量目标
(1)Easy to understand
(2)Ready to change
(3)Cheap for develop
(4)Safe for bugs
(5)Efficient to run

第二章 测试和测试优先的编程

这章重点:测试(黑盒、白盒,等价类的划分、测试效果测试难度等等等)

非常非常重要一句话

软件测试时提高软件质量的重要手段。

是重要!是重要!重要手段!重要手段!
不是 唯一 决定性
因为只能保证正确性,还有其他的性质。

好的测试是尽可能发现错误,发现以前没有的错误

Test vs Debugging
Test:发现是否存在错误
Debugging:调试识别错误根源,消除错误

黑盒测试与白盒测试

  1. 黑盒测试
    是测试团队完成的,检查代码的功能,不关心内部的实现细节
    可以发现的问题:缺失的功能、接口错误、数据类型错误、行为错误、初始化/终止错误。
    希望通过多个测试,用尽可能少的测试用例,发现尽可能大的错误。
  2. 白盒测试
    针对程序内部的执行路径来测试,测条件分支什么的,发现哪些路径未被覆盖、哪些语句未被执行,根据程序执行路径设计测试用例。
    一些要求
    (1)保证模块内所有独立路径至少执行一次
    (2)边界和操作范围内执行所有循环
    (3)做所有逻辑决定
    (4)使用所有内部数据结构,保证有效性

等价类的划分

输入空间划分成若干等价类,每个等价类行为一样选一个测试,只是人为角度,具体是否成立,实际不一定成立,没有明确标准划分,只从规约中造测试用例?(本来很肯定的但写博客写着有点疑惑,错就以后改)
:考虑一下输入的特殊情况,输入的上限等,边界什么的。

测试用例选择
(1)笛卡尔积:全覆盖,但代价高
(2)覆盖每个取值:每个维度的每个取值至少被一个测试用例覆盖一次即可,测试用例少,代价低。但测试覆盖度未必高。

测试效果和测试难度

测试效果:路径测试 > 分支测试 > 语句测试
测试难度:路径测试 > 分支测试 > 语句测试

第三章 软件构造过程与配置管理

本章重点应该是:软件开发过程的理解和 git

软件开发过程

(1)瀑布过程(Waterfall)线性,非迭代,顺序性开发,最后才看到软件全貌,如果不符合要求就再推倒重来,阶段划分的清楚但是不适应需求改变,最简单但不实用,会有大量的文档。
(2)增量模型(Incremental)线性,非迭代,把软件切块,多个瀑布串行,比较容易适应需求的增加,可视为瀑布模型拓展。
局限:增量划分应有经验,新增加模块不能改变已有模块。
(3) V-model (好像不太重要)
(4)原型模型 (Prototyping)迭代用户对需求不明确的时候用,在原型上持续不断迭代发现用户变化的需求,时间代价高,但开发质量高。
(5)螺旋过程(Spiritual)迭代,复杂,多轮迭代遵循瀑布模式,每轮迭代都有明确目标,遵循“原型”过程,进行严格风险分析才可以进入下一轮迭代,延长周期开发。

等等等……

敏捷开发:通过快速迭代小规模持续改进以快速适应变化。
敏捷与传统区别:这里不赘述了

关于软件配置管理(SCM)和版本控制系统(VCS)

VCS:

(1) Local VCS :开发者本地机器,无法共享
(2) Centralized VCS:集中式存在服务器里,支持多开发者协作
(3) Distributed VCS:分布式 仓库存储于独立服务器+每个开发者本地机器。

还有就是一些Git的知识,,,,这里也不赘述了,但是贴两个帮助我理解的链接:
branch — Git 文档:这个可以帮助理解PPT里那个object图分支/合并的变化
git clone、git pull和git fetch的用法及区别:这个其实就是帮我理解了下面这张图在干嘛,也算是学习一下git的一些指令?(图源PPT,侵删)
在这里插入图片描述
呃,关于object图其实也有挺多可说的,有机会补上。
比如:有向无环图,A->B是指在版本B的基础上做出变化形成了版本A,B是父版本,HEAD永远指向当前commit,每个版本的子版本可以有任意多,某个版本对应的父版本只能有0、1、2 这3种情况,0是初始root结点,1是commit形成的版本,2是merge产生的版本,2个版本合并成一个新版本时会出现。等等,好像也差不多都说完了。

传统VCS 与 Git

传统VCS存储版本间变化(行),想创建新分支时要获取整体的文件,从初始版本一点点叠加变化,获得当前版本上的文件情况,创建分支时间长

Git 存储发生变化的文件(而非代码行)不变化的文件不重复存储,产生指针指向,可以创建任意多分支,但难以直接看两个版本之间的差别,需逐步做差值

代码构建是指将我们在开发环境下写代码转换成生产环境写的代码。

结束!!!!
有些仓促,如有错误请多指教。
呜呜呜得快点复习了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值