zoukankan      html  css  js  c++  java
  • 2018-2019-2 20175214 实验三《敏捷开发与XP实践》实验报告

    一、实验内容

    • 1、编码标准:在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。提交截图,加上自己学号水印。
    • 2、搭档代码检验:在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;
    • 3、重构:完成重构内容的练习,下载搭档的代码,至少进行三项重构
    • 4、以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。

    二、实验步骤

    • 1.编码标准

      • 在扩展包处搜索alibaba并下载,安装完成后重启:

      • 在要进行规范的文件右键选择 “编码规约扫描”开始扫描:

    • 规范前给出的不规范内容提示如下:

    • 规范后的代码如下:

    • Java中的一般的命名规则有:

      • 要体现各自的含义
      • 包、类、变量用名词
      • 方法名用动宾
      • 包名全部小写,如:io,awt
      • 类名第一个字母要大写,如:HelloWorldApp
      • 变量名第一个字母要小写,如:userNamege
      • 方法名第一个字母要小写:setName
    • Code菜单中的一些功能

      • Override Methods(ctrl+O):重载基本类的方法

      • Surround With(Ctrl+Alt+T):使用if-else、for、while等语句包装代码段

      • omment with Line Comment(Ctrl+/):将本行变成注释

      • Comment with Block Comment(Ctrl+Shift+/):将选中的代码块变成注释

      • Move Statement Down ( 方法、代码下移 ) 快捷键:Ctrl + Shift + 向下箭头

      • Move Statement Up ( 方法、代码上移 )快捷键: Ctrl + Shift + 向上箭头


    • 2.测试搭档代码

      • 获得伙伴仓库权限

        • 登陆伙伴的码云仓库,在管理中选择仓库成员管理,—>添加仓库成员—>邀请用户,然后直接手机扫码或者复制链接

      • 搭档代码如下:

    package Experiment;
    
    public class ComplexWZH {
        double realPart;
        double imagePart;
        public ComplexWZH() {}
        public ComplexWZH(double r, double i) {
            realPart = r;
            imagePart = i;
        }
        public double getRealPart() {
            return realPart;
        }
        public double getImagePart() {
            return imagePart;
        }
        @Override
        public boolean equals(Object obj) {
            if(this == obj) {
                return true;
            }
            if(obj == null) {
                return false;
            }
            if(getClass() != obj.getClass()) {
                return false;
            }
            if(!(obj instanceof ComplexWZH)) {
                return false;
            } else {
                ComplexWZH complexWZH = (ComplexWZH) obj;
                if (complexWZH.imagePart == ((ComplexWZH) obj).imagePart) {
                    return true;
                }
                if (complexWZH.realPart == ((ComplexWZH) obj).realPart) {
                    return true;
                }
            }
            return false;
        }
        @Override
        public  String toString() {
            String str = "";
            if (realPart == 0&& imagePart == 0) {
                str = "0.0";
            } else if (realPart == 0&& imagePart != 0) {
                str = imagePart + "" + "i";
            } else if (realPart != 0&& imagePart == 0) {
                str = realPart + "";
            } else if (realPart !=0&& imagePart > 0) {
                str = realPart + "" + "+" + imagePart + "i";
            } else if (realPart !=0&& imagePart < 0) {
                str = realPart + "" + imagePart + "i";
            }
            return str;
        }
        public ComplexWZH complexAdd(ComplexWZH a) {
            return new ComplexWZH(realPart + a.getRealPart(), imagePart + a.getImagePart());
        }
        public ComplexWZH complexSub(ComplexWZH a) {
            return new ComplexWZH(realPart - a.getRealPart(), imagePart - a.getImagePart());
        }
        public ComplexWZH complexMulti(ComplexWZH a) {
            return new ComplexWZH(realPart *a.getRealPart() - imagePart *a.getImagePart(), realPart *a.getImagePart() + imagePart *a.getRealPart());
        }
        public ComplexWZH complexDiv(ComplexWZH a) {
            if(a.getRealPart() == 0&&a.getImagePart() == 0) {
                System.out.println("除数不能为0");
                return new ComplexWZH();
            }
            else {
                return new ComplexWZH((realPart *a.getRealPart() - imagePart *a.getImagePart())/(a.getRealPart()*a.getRealPart()-a.getImagePart()*a.getImagePart()),(realPart *a.getImagePart() + imagePart *a.getRealPart())/(a.getRealPart()*a.getRealPart()-a.getImagePart()*a.getImagePart()));
            }
        }
    }
    
    
    • 对其中的所有方法均进行了测试

    • 测试代码:

    package Experiment;
    
    import junit.framework.TestCase;
    import org.junit.Test;
    public class ComplexWZHTest extends TestCase {
     ComplexWZH a = new ComplexWZH(2.0,5.0);
     ComplexWZH b = new ComplexWZH(1.0,-4.0);
     ComplexWZH c = new ComplexWZH(-3.0,2.0);
     ComplexWZH d = new ComplexWZH(-4.0,-3.0);
     ComplexWZH e = new ComplexWZH(0.0,0.0);
     @Test
     public void testgetRealPart() throws Exception {
         assertEquals(2.0,a.getRealPart());
         assertEquals(1.0,b.getRealPart());
         assertEquals(-3.0,c.getRealPart());
         assertEquals(-4.0,d.getRealPart());
         assertEquals(0.0,e.getRealPart());
     }
     @Test
     public void testgetImagePart() throws Exception {
         assertEquals(5.0,a.getImagePart());
         assertEquals(-4.0,b.getImagePart());
         assertEquals(2.0,c.getImagePart());
         assertEquals(-3.0,d.getImagePart());
         assertEquals(0.0,e.getImagePart());
     }
     @Test
     public void testequals() throws Exception {
         assertEquals(true,a.toString().equals(a.toString()));
         assertEquals(false,b.toString().equals(c.toString()));
         assertEquals(false,d.toString().equals(e.toString()));
     }
     @Test
     public void testtoString() throws Exception {
         assertEquals("2.0+5.0i",a.toString());
         assertEquals("1.0-4.0i",b.toString());
         assertEquals("-3.0+2.0i",c.toString());
         assertEquals("-4.0-3.0i",d.toString());
         assertEquals("0.0",e.toString());
     }
     @Test
     public void testComplexAdd() throws Exception {
         assertEquals("3.0+1.0i",a.ComplexAdd(b).toString());
         assertEquals("-7.0-1.0i",c.ComplexAdd(d).toString());
         assertEquals("-4.0-3.0i",d.ComplexAdd(e).toString());
     }
     @Test
     public void testComplexSub() throws Exception {
         assertEquals("1.0+9.0i",a.ComplexSub(b).toString());
         assertEquals("1.0+5.0i",c.ComplexSub(d).toString());
         assertEquals("-3.0+2.0i",c.ComplexSub(e).toString());
     }
     public void testComplexMulti() throws Exception {
         assertEquals("22.0-3.0i",a.ComplexMulti(b).toString());
         assertEquals("18.0+1.0i",c.ComplexMulti(d).toString());
         assertEquals("0.0",b.ComplexMulti(e).toString());
     }
     public void testComplexDiv() throws Exception {
         assertEquals("-1.4666666666666666+0.2i",a.ComplexDiv(b).toString());
         assertEquals("2.5714285714285716+0.14285714285714285i",c.ComplexDiv(d).toString());
         assertEquals("0.0",a.ComplexDiv(e).toString());
     }
    }
    
    • 测试结果:

    • 将测试好的代码push至伙伴的码云并git log

    • 3.重构
      • 对代码进行如下重构

        • 重写方法加上@Override进行注解

        • 在代码前添加创建者的相关信息

        • 方法名、参数名、成员变量、局部变量都统一使用LowerCamelCase,必须遵从驼峰形式,重构前提示

      • 重构后代码:

    /**
     * ComplexWZH
     * @author 林郅聪
     * @date 2019/5/1
     */
    package Experiment;
    
    @SuppressWarnings({"ALL", "AlibabaLowerCamelCaseVariableNaming"})
    public class ComplexWZH {
        @SuppressWarnings("AlibabaLowerCamelCaseVariableNaming")
        double realPart;
        double imagePart;
        public ComplexWZH() {}
        public ComplexWZH(double r, double i) {
            realPart = r;
            imagePart = i;
        }
        public double getRealPart() {
            return realPart;
        }
        public double getImagePart() {
            return imagePart;
        }
        @Override
        public boolean equals(Object obj) {
            if(this == obj) {
                return true;
            }
            if(obj == null) {
                return false;
            }
            if(getClass() != obj.getClass()) {
                return false;
            }
            if(!(obj instanceof ComplexWZH)) {
                return false;
            } else {
                ComplexWZH complexWZH = (ComplexWZH) obj;
                if (complexWZH.imagePart == ((ComplexWZH) obj).imagePart) {
                    return true;
                }
                if (complexWZH.realPart == ((ComplexWZH) obj).realPart) {
                    return true;
                }
            }
            return false;
        }
        @Override
        public  String toString() {
            String str = "";
            if (realPart == 0&& imagePart == 0) {
                str = "0.0";
            } else if (realPart == 0&& imagePart != 0) {
                str = imagePart + "" + "i";
            } else if (realPart != 0&& imagePart == 0) {
                str = realPart + "";
            } else if (realPart !=0&& imagePart > 0) {
                str = realPart + "" + "+" + imagePart + "i";
            } else if (realPart !=0&& imagePart < 0) {
                str = realPart + "" + imagePart + "i";
            }
            return str;
        }
        public ComplexWZH complexAdd(ComplexWZH a) {
            return new ComplexWZH(realPart + a.getRealPart(), imagePart + a.getImagePart());
        }
        public ComplexWZH complexSub(ComplexWZH a) {
            return new ComplexWZH(realPart - a.getRealPart(), imagePart - a.getImagePart());
        }
        public ComplexWZH complexMulti(ComplexWZH a) {
            return new ComplexWZH(realPart *a.getRealPart() - imagePart *a.getImagePart(), realPart *a.getImagePart() + imagePart *a.getRealPart());
        }
        public ComplexWZH complexDiv(ComplexWZH a) {
            if(a.getRealPart() == 0&&a.getImagePart() == 0) {
                System.out.println("除数不能为0");
                return new ComplexWZH();
            }
            else {
                return new ComplexWZH((realPart *a.getRealPart() - imagePart *a.getImagePart())/(a.getRealPart()*a.getRealPart()-a.getImagePart()*a.getImagePart()),(realPart *a.getImagePart() + imagePart *a.getRealPart())/(a.getRealPart()*a.getRealPart()-a.getImagePart()*a.getImagePart()));
            }
        }
    }
    

    -4.Java密码学相关内容

    • Java安全体系结构总共分为4个部分:

    • JCAJava Cryptography Architecture, Java加密体系结构):JCA提供基本的加密框架, 如证书、 数字签名、消息摘要和密钥对产生器。

    • JCEJava Cryptography Extension, Java加密扩展包): JCEJCA的基础上作了扩展, 提供了各种加密算法、 消息摘要算法和密钥管理等功能。JCE的实现主要在javax.crypto包( 及其子包) 中

    • JSSEJava Secure Sockets Extension, Java安全套接字扩展包):JSSE提供了基于SSL Secure Sockets Layer,安全套接字层) 的加密功能。 在网络的传输过程中, 信息会经过多个主机(很有可能其中一台就被窃听) , 最终传送给接收者, 这是不安全的。这种确保网络通信安全的服务就是由JSSE来提供的。

    • JAASJava Authentication and Authentication Service, Java鉴别与安全服务):JAAS提供了在Java平台上进行用户身份鉴别的功能。

    • 凯撒密码

      • 对凯撒密码进行了验证,并对代码进行了重构

      • 运行结果

      • 重构后结果

      • Java对称加密—DES算法

      • 密钥的产生

      • 加密Hello World

      • 对密文进行解密

      • Java非对称加密—RSA算法

      • 公私钥的产生

      • 加密Hello World

      • 对密文进行解密

      • 使用密钥协定创建共享密钥—DH算法

      • A和B分别产生自己的公钥和私钥

      • 创建共享密钥

      • Java摘要算法—MD5

    三、实验中遇到的问题

    • 问题:在实现DH算法时,希望把用户A和B的产生的公钥和私钥分别存放至两个目录中,但实际上不能做到放至同一个包下,在out文件中运行时会自动存放至根目录下,无法真正实现博客中所说的个人用户的管理
    • 解决方法:暂无

    四、伙伴评价

    伙搭档学习热情很高,一直督促我学习,过程中也帮助我很多,是很好的学习伙伴。

    五、码云链接

    我的码云链接:链接
    伙伴的码云链接:链接

  • 相关阅读:
    记ArcGIS Android V100.4加载天地图不显示的问题
    arcgis性能检测记录
    python数据更新
    python批量definition query
    从天地图下载瓦片构建本地瓦片地图
    android studio问题备注
    android studio报butterknife错误
    openPose-注
    视觉工程师现场调试手册
    human pose estimation
  • 原文地址:https://www.cnblogs.com/fzlzc/p/10812869.html
Copyright © 2011-2022 走看看