ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-03-01 11:03:31  阅读:149  来源: 互联网

标签:CashFlow double 代码 System DiscountFactor 测试 println 属性 out


代码功能如下:求贴现值,这是最近老师给的代码方面的作业,指定贴现率(简单来说就是将未来货币按利率折现到现在,比如利率为0.1,则一年后的100元相当于现在的100/(1+0.1)=90.91),输入每年的投入与收入,则可以计算出贴现值(90.91就是贴现值),现在给出每年的收入与支出,计算净现值。

净现值 = 第T年的值/((1+r)的t次方) ,r为贴现率。

测试可测试性,首先将代码分层处理,每一步都整合成一个方法函数,在主函数调用这些方法,以其中一个作为测试对象,这里拿最终的计算净现值的方法函数作为测试对象,将其封装,countNPV(DiscountFactor, CashFlow),这里面DiscountFactor为贴现率,CashFlow为每年的收入/支出,是一个数组对象,这两个作为参数传入,现在来测试传入的参数与函数获取的参数是否一致,是否报错。

  1 package com.ms.softwareProcessAndManagement.count;
  2 
  3 import java.util.Scanner;
  4 
  5 //计算净现值NPV
  6 public class Cont {
  7     public static void main(String[] args) {
  8         Cont cont = new Cont();
  9         cont.count();
 10     }
 11 
 12     private void count() {
 13         // 第一步,获取贴现率
 14         double DiscountFactor = getDiscountFactor();
 15         // 第二部,获取每年的支出/收入
 16         double[] CashFlow = getCashFlow();
 17         // 第三步,计算净现值
 18         
 19         //以输出来代替捕获信息
 20         System.out.println("***************测试模块start*************");
 21         System.out.println("************捕获接口信息***********");
 22         System.out.println("接口一共两个参数,值分别为:");
 23         System.out.println("DiscountFactor:"+DiscountFactor);
 24         System.out.println("CashFlow:"+CashFlow);
 25         System.out.println("**************进入接口**************");
 26         double NPV = countNPV(DiscountFactor, CashFlow);
 27 
 28         System.out.println("NPV:" + NPV);
 29     }
 30 
 31     private double countNPV(double discountFactor, double[] cashFlow) {
 32         /*
 33          * 计算每年的净现值 公式为:净现值 = 第T年的值/((1+r)的t次方) 
 34          * 计算贴现因子公式为:1.0/(1+discouFactor)
 35          */
 36         System.out.println("*************进入实现层*************");
 37         System.out.println("一共接收到两个参数,值分别为:");
 38         System.out.println("DiscountFactor:"+discountFactor);
 39         System.out.println("CashFlow:"+cashFlow);
 40         System.out.println("***************测试模块end*************");
 41         double NPV = 0;
 42         double discouFactor = 1.0;
 43         double cashFlowReal = 0;
 44         for (int t = 0; t < 6; t++) {
 45             if (t == 0) {
 46                 // 第0年贴现率为0
 47                 System.out.println("year  " + "   收入/支出   " + "   贴现因子   " + "   净现值");
 48                 System.out
 49                         .println(t + "         " + cashFlow[t] + "            " + 0 + "                " + cashFlow[t]);
 50                 NPV += cashFlow[t];
 51             } else {
 52                 // 计算贴现因子
 53                 discouFactor = discouFactor / (1 + discountFactor);
 54                 cashFlowReal = cashFlow[t] * discouFactor;
 55                 // 保留四位小数
 56                 discouFactor = (double) Math.round(discouFactor * 10000) / 10000;
 57                 cashFlowReal = (double) Math.round(cashFlowReal * 1) / 1;
 58                 System.out.println(t + "         " + cashFlow[t] + "            " + discouFactor + "                "
 59                         + cashFlowReal);
 60                 NPV += cashFlowReal;
 61             }
 62         }
 63         return (double) Math.round(NPV * 10) / 10;
 64     }
 65 
 66     @SuppressWarnings("resource")
 67     private double[] getCashFlow() {
 68         // 输入每年的支出/收入
 69 
 70         double[] CashFlow = new double[6];
 71         /*
 72          * 非输入测试。 
 73          * 提前将数据存储,直接读取
 74          * 项目一
 75          */
 76 //        CashFlow[0] = -100000;
 77 //        CashFlow[1] = 10000;
 78 //        CashFlow[2] = 10000;
 79 //        CashFlow[3] = 10000;
 80 //        CashFlow[4] = 20000;
 81 //        CashFlow[5] = 100000;
 82 
 83         // 项目二
 84 //        CashFlow[0] = -1000000;
 85 //        CashFlow[1] = 200000;
 86 //        CashFlow[2] = 200000;
 87 //        CashFlow[3] = 200000;
 88 //        CashFlow[4] = 200000;
 89 //        CashFlow[5] = 300000;
 90 
 91         // 项目三
 92 //        CashFlow[0] = -100000;
 93 //        CashFlow[1] = 30000;
 94 //        CashFlow[2] = 30000;
 95 //        CashFlow[3] = 30000;
 96 //        CashFlow[4] = 30000;
 97 //        CashFlow[5] = 30000;
 98 
 99         // 项目四
100         CashFlow[0] = -120000;
101         CashFlow[1] = 30000;
102         CashFlow[2] = 30000;
103         CashFlow[3] = 30000;
104         CashFlow[4] = 30000;
105         CashFlow[5] = 75000;
106 
107         // 输入测试
108 //        Scanner scan = new Scanner(System.in);
109 //        for (int i = 0; i < 6; i++) {
110 //            System.out.print("输入第" + i + "年的收入/支出:");
111 //            CashFlow[i] = scan.nextDouble();
112 //            if (CashFlow[i] > 0) {
113 //                // 收入 System.out.println("今年收入为:" + CashFlow[i]);
114 //            } else {
115 //                // 支出 System.out.println("今年支出为:" + (0 - CashFlow[i]));
116 //            }
117 //        }
118 
119         return CashFlow;
120     }
121 
122     @SuppressWarnings("resource")
123     private double getDiscountFactor() {
124         // 输入贴现率
125         Scanner scan = new Scanner(System.in);
126         System.out.print("输入贴现率:");
127         double DiscountFactor = scan.nextDouble();
128         System.out.println("贴现率为:" + DiscountFactor);
129         return DiscountFactor;
130     }
131 }
View Code

测试结果:

 

 可以看到,测试结果没问题,

 

 

 

 得到的结果也没问题。

可测试性还包括内置监视器,这个是可行的,但是是需要设备的,就如病院里的那些监视病人的仪器一样,只是检测对象发生了变化。

标签:CashFlow,double,代码,System,DiscountFactor,测试,println,属性,out
来源: https://www.cnblogs.com/msdog/p/12388647.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有