zoukankan      html  css  js  c++  java
  • 在代码层描述质量属性的可测试性

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

    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();
                }
                
            }

     规避了一定的错误。

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

  • 相关阅读:
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    第一届云原生应用大赛火热报名中! helm install “一键安装”应用触手可及!
    云原生时代,2个方案轻松加速百万级镜像
    Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler
  • 原文地址:https://www.cnblogs.com/msdog/p/12388647.html
Copyright © 2011-2022 走看看