第一章、软件的建设观点与质量目标
多维软件视图
软件构造这门课,我们首先接触的就是多维软件视图:
从时间分为:瞬时(Moment)、周期(Period)
从编码分为:构建(开发)(Build-time)、运行(Run-time)
从代码分为:代码(Code-level)、模块(Component)
这里每个层次关注的点是不一样的
Build-time:
- Code-level:代码逻辑组织
- Component-level:代码物理组织
- Moment:某一时刻的软件形态
- Period:软件形态随时间变化
Run-time:
- Code-level:逻辑实体再内存中的呈现
- Component-level:物理实体在物理硬件环境中的呈现
- Moment:逻辑/物理实体在内存/硬件环境中特定时刻的形态
- Period:逻辑/物理实体在内存/硬件环境中的形态随时间变化
软件形态的质量因素
软件质量(外部取决于内部):
- 外部:正确性、健壮(鲁棒)性、易扩展性、复用性、兼容性、效率、可移植性、易用性、功能性、时效性
- 内部因素:LOC、RUCS(可读、可理解、清晰、大小)
软件构造的5个主要目标:
- 代码容易理解
- 易用,开发便宜
- 低复杂度,易扩展
- 健壮性、正确性
- 效率
软件测试与测试优先编程
残留缺陷率:每1000行中bug的数目(1~10,0.1 ~ 1,0.01 ~0.1)
测试的主要目的:测试出错误
测试的层面:单元测试、集成测试、系统测试
改完之后再测试:回归测试
测试
{
静
态
测
试
:
看
代
码
动
态
测
试
:
边
运
行
边
看
\left\{ \begin{array}{c} 静态测试 :看代码\\ 动态测试:边运行边看\end{array}\right.
{静态测试:看代码动态测试:边运行边看
{
T
e
s
t
(
测
试
)
:
发
现
有
没
有
错
误
D
e
b
u
g
(
调
试
)
:
找
到
错
误
在
哪
\left\{ \begin{array}{c} Test(测试):发现有没有错误 \\ Debug(调试):找到错误在哪\end{array}\right.
{Test(测试):发现有没有错误Debug(调试):找到错误在哪
{
白
盒
测
试
:
按
代
码
一
步
一
步
调
试
黑
盒
测
试
:
结
果
正
确
即
可
\left\{ \begin{array}{c} 白盒测试:按代码一步一步调试 \\ 黑盒测试:结果正确即可\end{array}\right.
{白盒测试:按代码一步一步调试黑盒测试:结果正确即可
测试用例:输入+执行条件+期望结果(assertEquals)
测试有限编程:先写spec再写测试再写代码
{
白
盒
测
试
:
尽
量
所
有
的
路
径
都
走
一
次
黑
盒
测
试
:
划
分
等
价
类
(
对
称
自
反
传
递
)
,
重
点
测
边
界
\left\{ \begin{array}{c} 白盒测试:尽量所有的路径都走一次\\ 黑盒测试:划分等价类(对称自反传递),重点测边界\end{array}\right.
{白盒测试:尽量所有的路径都走一次黑盒测试:划分等价类(对称自反传递),重点测边界
覆盖:路径覆盖>分支覆盖>语句覆盖
软件构建的过程与工具
软件生命周期与配置管理
生命周期:SDLC:重点:软件设计→编码→测试
2种基本模型
{
线
性
过
程
迭
代
过
程
\left\{ \begin{array}{c} 线性过程\\ 迭代过程\end{array}\right.
{线性过程迭代过程
模型:瀑布模型、增量模型、原型模型、V字模型、螺旋模型
敏捷开发:敏捷=增量+迭代
软件配置管理(SCM)
SCM:追踪和控制软件的变化
软件配置项(SCI):软件中发生变化的基本单元(多为文件)
基线(baseline):稳定的版本
配置管理数据库(CMOB):变化的信息
版本控制管理(VCS)
{ 本 地 版 本 控 制 系 统 : 仓 库 在 本 地 集 中 式 版 本 控 制 系 统 : 仓 库 在 一 个 服 务 器 分 布 式 版 本 控 制 系 统 : 服 务 器 和 本 地 都 有 仓 库 \left\{ \begin{array}{c} 本地版本控制系统:仓库在本地 \\ 集中式版本控制系统: 仓库在一个服务器\\ 分布式版本控制系统:服务器和本地都有仓库\end{array}\right. ⎩⎨⎧本地版本控制系统:仓库在本地集中式版本控制系统:仓库在一个服务器分布式版本控制系统:服务器和本地都有仓库
Github
Github:
{
存
变
化
的
文
件
子
节
点
指
向
父
亲
结
点
,
可
以
有
0
/
1
/
2
个
父
亲
节
点
\left\{ \begin{array}{c} 存变化的文件\\ 子节点指向父亲结点,可以有0/1/2个父亲节点\end{array}\right.
{存变化的文件子节点指向父亲结点,可以有0/1/2个父亲节点