软件构造课程总结(二)——软件测试与构造过程管理

软件测试

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

可以通过bug排查和质量特性评价以提高质量。

确认是否达到可用级别(用户需求)

关注系统的某一侧面的质量特性

即使是最好的测试,也无法达到100%的无错误。

可用defects/kloc即残留缺陷率描述质量,按1-10,0.1-1,0.01-0.1从一般到最佳分为不同等级。

测试的目标为证错,但无法证明无错误。

有如下分类:单元测试;集成测试;系统测试;验收测试等。

  • 静态测试/动态测试:前者通常为隐式,在执行之前进行测试,后者在执行时检测(测试用例)
  • 测试/调试:前者是执行软件以发现错误,后者是在发现错误后执行,目的是消除错误
  • 黑盒测试/白盒测试:前者不关注内部细节,只关注输入输出间的关系;后者基于内部结构,是对内部代码结构的测试。

测试用例:

  • 目的是测试优先的编程,节省调试时间。

    包含输入,执行条件,期望结果。

    好的测试用例能够有效发现错误、不冗杂。

单元测试:

  • 针对软件的最小单元模型开展测试,隔离各个模块,容易定位错误和调试

    包括接口、数据的一致性、所有语句均被执行。

基于JUnit的自动单元测试:

  • 是一个用于Java编程语言的单元测试框架,用于编写和运行自动化单元测试。它是软件开发中最广泛使用的单元测试框架之一,具有简单易用、灵活性强等特点。

黑盒测试:

  • 黑盒测试是一种软件测试的方法,它可以检查应用程序的功能,而不需要窥视其内部结构或工作原理。

  • 黑盒测试试图发现以下类型中的错误:

    不正确或缺失的函数

    接口错误

    数据结构或外部数据库访问中的错误

    行为或性能错误

    初始化和终止错误

    用于黑盒测试的测试用例是围绕规范和要求构建的,即应用程序应该做什么。

    用尽可能少的测试用例,尽快运行,并尽可能大的发现程序的错误。


    测试用例选择:

  1. 等价类划分:基于等价类划分的测试:将被测函数的输入域划分为等价类,从等价类中导出测试用例;针对每个输入数据需要满足的约束条件,划分等价类
  2. 边界值分析:大量的错误发生在输入域的“边界”而非中央。边界值分析(BVA)已经发展成为一种测试技术,导致了对边界值的测试用例的选择。是对等价类划分方法的补充。可选的策略有笛卡尔积,通过遍历达到全覆盖但代价高;每个取值一次即可,覆盖度未必高。

白盒测试:

  • 需要根据程序内容设计,较早执行。

  • 测试覆盖度:

  • 测试应考虑到程序内部逻辑的测试用例的代码覆盖范围。描述已有测试用例多大程度上覆盖了被测程序。

代码覆盖度越低,测试越不充分

代码覆盖度越高,需要更多测试用例,测试代价高

判断测试套件的一种方法是询问它对程序的操作程度。这个概念被称为覆盖范围。

函数覆盖,语句覆盖,分支覆盖,条件覆盖,路径覆盖

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

 自动测试与回归测试:

自动测试:测试用例的自动执行:自动调用被测函数、自动判定测试结果、自动计算覆盖度。 回归测试:一旦程序被修改,重新执行之前的所有测试

记录测试策略:

在代码评审过程中,其他人可以理解你的测试,并评判你的测试是否足够充分

软件构造过程与配置管理

软件开发生命周期

传统软件过程模型

基础类型:线性过程,迭代过程

现有模型:瀑布过程,增量过程,V字模型,原型过程,螺旋模型

选择依据:用户参与程度(适应变化能力)、开发效率(管理复杂度)、开发出软件质量

敏捷开发

敏捷开发:通过快速迭代和小规模的持续改进,以快速适应变化。

Agile=增量+迭代:每次迭代处理一个小规模增量。

  • 极限的用户参与
  • 极限的小步骤迭代
  • 极限的确认/验证

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

软件配置管理:追踪和控制软件的变化

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

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

基线:软件持续变化过程中的"稳定时刻"(例如:对外发布的版本)

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

版本控制:

版本:为软件的任一特定时刻(Moment)的形态指派一个唯一的编号,作为“身份标识”。

分类:

  • 本地版本控制系统:仓库存储于开发者本地机器无法共享和协作
  • 集中式版本控制系统:仓库存储于独立的服务器,支持多开发者之间的协作
  • 分布式版本控制系统:仓库存储于独立的服务器 + 每个开发者的本地机器

Git: 典型SCM工具

存储库三个部分:本地CMDB;工作目录(本地文件系统);暂存区(隔离工作目录和git仓库)

项目文件三个状态:已修改;已暂存;已提交

Git的操作如clone add commit push log等都是在一个图数据上进行的,从另一台机器上复制项目即复制整个对象图,即一个git项目历史记录(有向无环图)

Git存储发生变化的文件而不是代码行,不发生变化则不重复存储:

分支/合并:

分支是在修订控制下的对象的复制,以便可以沿着两个分支并行地进行修改。

合并操作合并了两个分支机构。

常用操作:

git checkout –b 分支  //创建分支
git commit           //提交分支
git checkout master  //切换到master分支
git merge master     //把master分支合并到当前分支
git branch –d 分支   //删除分支
git clone            //克隆远程库
git fetch            //拉取分支
git push             //推送当前分支

Github:

一个基于web的Git服务器和互联网托管服务。它提供了Git的所有分布式版本控制和SCM功能,并添加了它自己的功能。它为每个项目提供了访问控制和一些协作特性,如bug跟踪、特性请求、任务管理和wikis。

  • 基本流程:提交、分支和合并
  • 协作流程:分叉和拉请求

软件构造一般流程

编程:

  • 用途上划分:编程语言,建模语言,配置语言,构建语言
  • 形态上划分:基于语言学的构造语言,基于数学的形式化构造语言,基于图形的可视化
  • 编程语言工具:集成IDE
  • 建模语言:

建模语言是任何人工语言,可以用来表达由一组一致的规则定义的结构中的信息、知识或系统的语言,目的是可视化、推理、验证和交流系统的设计。典型建模语言:UML。

  • 配置语言:

配置语言用于形成配置文件,程序配置参数和初始设置。应用程序应提供工具来创建、修改和验证其配置文件的语法;某些计算机程序仅在启动时读取其配置文件。其他人则会定期检查配置文件是否有更改。

审核和静态代码分析:

  • 代码评审:

代码评审是对源代码的系统检查(同行评审)。

旨在发现在初始开发阶段被忽视的错误,提高整体质量。

评审以各种形式进行,如结对编程、非正式演练和正式检查。

  • 正式代码评审会议:结构化检查代码和文档缺陷
  • 轻量级代码评审:通常比正式的代码检查需要更少的开销。
  • 利用工具进行静态代码分析:是对在没有实际执行程序的情况下执行的计算机软件的分析。

动态代码分析:

执行程序并观察现象、收集数据、分析不足

调试和测试:

测试:发现错误

调试:定位错误、发现错误根源

重构:

不改变功能前提下优化代码。

重构是改变软件系统的过程,即它不改变代码的外部行为,但又改进其内部结构。重构会带来短期的时间/工作成本,以获得长期的利益,并对您的系统的整体质量进行长期的投资。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值