软件构造学习笔记1

   1.多维度试图和质量目标

  1.1软件构造多维视图

  

  • 按阶段划分:构造时/运行时视图
  • 按动态性划分:时刻/阶段视图
  • 按构造对象划分:代码/构件视图           

1.构建时:Moment code level:源代码,类,代码的逻辑组织  Moment   component level:包,文件,静态链接,库 测试项,配置项,版本。 Period code level 代码变化    Period code levell配置项,版本随时间的变化。

2.运行时:Moment code level:代码快照,内存转储  Moment component level : 包、库、动态链接、数据库、网络、硬件            Period code level:并发线程,堆栈轨迹                            Period component level事件日志、多进程、分布式程序

 

  1.2视图转换

 

 

  软件的质量因素:

 

外部质量因素:可被用户感知的因素,如软件速度、易用性;影响用户 内部质量因素:作为软件产品的质量,如代码可读性;影响软件本身和它的开发者 外部质量取决于内部质量。

1.外部质量因素

1.正确性:程序需按规约执行,是最重要的质量指标

2.健壮性:针对异常情况的处理能力,解决规约之外的输入的处理问题

3.可扩展性

4.可复用性

5.兼容性

6.性能

7.可移植性

8.易用性

9.功能性

10.时效性

2.内部质量因素

代码方面:行数逻辑复杂度

结构方面,耦合 内聚程度

代码可读性

 

  2.软件测试与测试优先的编程
 2.1软件测试
测试是提高软件质量的重要手段,确认软件是否达到可用级别(用户需求),它关注系统的某一侧面的质量特性。 测试跟其他活动的目标相反,它的目的是发现错误 再好的测试也无法证明系统里不存在错误 一个好的测试具有这些特征:能发现错误、不冗余、最佳组合、不能太过复杂也不能太过简单。
  2.2测试分类
单元测试:针对软件的最小单元模型开展测试(一般来说是在单个方法/类的级别),隔离各个模块,容易定位错误和调试

集成测试:将多个程序员/团队编写的类/包/组件/子系统联合起来测试

系统测试:对整个系统进行测试,将硬件、软件、配置信息等看作一个整体

验收测试:产品发布之前所进行的软件测试活动,是技术测试的最后一个阶段,目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务

回归测试:一旦程序被修改,重新执行之前的所有测试以确认修改没有引入新的错误或导致其他代码产生错误

 

静态测试:在编写代码的阶段由程序员或是代码编辑器、编译器等工具进行检查(如语法检查、代码评审) 也就是在写代码时编译器的报错,此时并不需要运行程序

动态测试:通过测试用例实际执行了编写的代码 动态测试可能在程序完全编写完成前就用于测试代码的特定节   也就是静态测试无法测出的错误,需要运行才能得知的错误

 

白盒测试:对程序内部代码结构的测试,此时知道程序内部的内部信息

黑盒测试:对程序行为的测试,此时并不知道程序的内部信息,实现细节。

黑盒测试:测试优先的编程

黑盒测试关键在于检查程序是否符合规约,完全从函数规约导出测试用例,不考虑函数内部实现。

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

等价类划分 基于等价类划分的测试:将被测函数的输入域划分为等价类,从等价类中导出测试用例

每个等价类代表着对输入约束加以满足/违反的有效/无效数据的集合。 等价类的假设:对于相似的输入,将会展示相似的行为

故可从每个等价类中仅选一个代表作为测试用例,从而降低测试用例数量。

对于黑盒测试的两种覆盖方式:

笛卡尔积:全覆盖 将多个划分维度上的多个取值组合起来,每个组合都要有一个用例。不过并非所有组合情况都可能。 测试完备,但用例数量多,测试代价高。

覆盖每个取值:最少 1 次即可 每个维度的每个取值至少被 1 个测试用例覆盖一次即可。 测试用例少,代价低,但测试覆盖度未必高。

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

  Tips:用Junit进行自动化测试

1.导入:在pom.xml文件中加入junit4依赖项。

<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency

2.导入相应的包

import org.junit.Test;

一个小的测试用例样例:

public static class Sum{
    public int sum(int x,int y,int z){
        return x+y+z;
    }

}

对应的测试用例SumTest如下:

import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class SumTest{
    @Test
    public void testSum(){
        Sum so =new Sum();
        assertEquals(6,so.sum(1,2,3);
    }

书写规范:

类名:命名由 被测试类+Test 组成,例如 CalculateTest

方法名:命名由 test+被测方法名组成,且方法名首字母大写,或者直接使用方法名,例如 testAdd或 add

测试类定义为public,例如 public class CalculateTest

方法定义为public,且无返回值,参数列表为空,例如 public void testAdd()
Junit 4 断言(assert)

 

Junit 4 注解

 

 

 

 

 

 

 

 

 

  

 

 

  

posted @ 2022-06-12 23:49  rtwq  阅读(91)  评论(0)    收藏  举报