在代码层描述质量属性的可测试性

代码层描述质量属性可测试性(由于上次的个人理解过于官方简短,导致。。重新编辑)

1.输入/输出

1.1记录回放:捕获跨接口的信息,作为测试专用软件的输入,记录的数据以后还以进行对比,(官方版)

(个人理解)我觉得这一部分主要就体现在日志方面,日志的作用也是为了测试方便,就好比现在的每个软件基本都会有存在好多个日志文件,这些日志文件捕获不同时间不同操作的数据,进行规范化输出,形成一个可以解析的历史数据,有了日志文件,我们就可以在一定程度上允许错误的产生,在错误产生后,通过日志文件的输出记录可以查看到底是哪里出了错误,出的是什么类型的错误,还可以通过日志文件进行回复数据(比如某些数据库,产生很详细的日志,每一条建库建表语句,插入语句,删除等等,到时候只需要执行这些日志文件就可以恢复数据库)

(个人实例)信息捕获并写入日志文件:

//捕获参数,并写入日志
        String path = "C:\Users\hp\Desktop\数据\test\canshu.log";
        File file =new File(path);
        FileWriter fw;
        try {
            fw = new FileWriter(file,true);
            BufferedWriter bw = new BufferedWriter(fw);
            String str1 = String.valueOf(discountFactor);
            String str2 = Arrays.toString(cashFlow);
            bw.write(str1+"	"+str2+"
");
            bw.flush();
            bw.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

日志文件:

1.2将接口与实现分离:将接口与实现分离允许实现的替代,可以支持各种测试目的。(官方版)

(个人实例)接口类

 使用接口能尽可能地减少代码的改动,在保证参数不变的情况下,尽可能少的改动代码,将代码模块化。

(个人理解)接口化在我写代码的时候还是比较常用的,因为现在代码量逐渐增多,仅在一个main函数里写下所有操作已经是不切实际的了,所以我们就需要将代码整体层次化,结构化,模式化,当代码有了层次,有了结构时,代码就会被分成各个函数单元,模块,这样既方便了测试,又方便了修改,可以大大降低后期维护费用。

public interface VirtualCont {
    //定义接口,将接口与实现分离
    public double getDiscountFactor();
    public double[] getCashFlow();
    public double countNPV(double discountFactor, double[] cashFlow);
    public void getCanshu();
}

实现类

接口调用:

VirtualCont virtualCont = new RealCont();
        
        double DiscountFactor = 0;
        double[] CashFlow = null;
        //接口调用
        DiscountFactor = virtualCont.getDiscountFactor();
        CashFlow = virtualCont.getCashFlow();
        double NPV = virtualCont.countNPV(DiscountFactor, CashFlow);

1.3特化访问路线/接口

特化的接口可以独立于程序正常运行,即设计独立的接口仅供测试使用(官方版)

(个人理解)特化接口同样可以在程序内部运行,但是带有特殊的参数,必须带有这个特殊的参数才能访问的接口/路线,再查看了同学的代码后,确实post和get函数是一个不错的例子,当时我不知为啥没有想到,可能是最近servlet用的比较少吧,但是我自己写的例子确实没有问题的,特定的参数,访问特定的函数/路线。

特化接口:

//访问特化接口
        VirtualCont vt = new RealCont();
        vt.getCanshu("special");



//特化接口实现
   public void getCanshu(String str) {
        // TODO Auto-generated method stub
        if(str.equals("special")) {
            String path = "C:\Users\hp\Desktop\数据\test\canshu.log";
            File file =new File(path);
            FileReader fr;
            try {
                fr = new FileReader(file);
                BufferedReader br = new BufferedReader(fr);
                System.out.println("读取到的数据为");
                while(br.ready()) {
                    System.out.println(br.readLine());
                }
                
                br.close();
                fr.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
    }

可以读到数据,并且独立于主程序运行

2.内部监视

随时查看软件的状态,性能负载,容量,安全性等一系列运行指标,在超出指标时给予警报或暂停运行,(官方版)

 (个人理解)当时在想这个问题的时候去度娘了好久都没有找到合适的出口,一直都是官方解释,所以无可奈何之下,自己写了这个,当时灵机一动,觉得检测值得输入是否为正确格式不失为一个好例子,就像我们在注册qq时,密码的要求是6-16为字母数字字符的组合,但是他没有说特殊字符,但是在你输入的时候,他会提醒不允许特殊字符(貌似,qq没有其他的也有),这个就是嵌在代码内部的一个监视输入的例子,所以我就小小写了一个简单的监视输入值的范围(不包括特殊字符,不易理解)。

(个人实例)

例如,输入错误及时提醒

System.out.print("输入贴现率(0<r<1):");
        double DiscountFactor = scan.nextDouble();
        while(DiscountFactor>=1||DiscountFactor<=0) {
            if(DiscountFactor>=1) {
                System.out.print("输入贴现率过大,请重新输入:");
                DiscountFactor = scan.nextDouble();
            }else {
                System.out.print("输入贴现率过小,请重新输入:");
                DiscountFactor = scan.nextDouble();
            }
            
        }

 规避了一定的错误。

更改到此结束,以上除了标注官方版的其他都是本人亲思亲敲(包括代码)!!!!!!

原文地址:https://www.cnblogs.com/msdog/p/12388647.html