zoukankan      html  css  js  c++  java
  • 20175211 《实验三 敏捷开发与XP实践》实验报告

    一、实验内容

    (1)编码标准
    (2)Git的使用
    (3)重构
    (4)Java密码学相关内容的学习

    二、实验步骤

    (1)编码标准

    在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。提交截图,加上自己学号水印。

    public class CodeStandard {
    public static void main(String [] args){
    StringBuffer buffer = new StringBuffer();
    buffer.append('S');
    buffer.append("tringBuffer");
    System.out.println(buffer.charAt(1));
    System.out.println(buffer.capacity());
    System.out.println(buffer.indexOf("tring"));
    System.out.println("buffer = " + buffer.toString());
    if(buffer.capacity()<20)
    buffer.append("1234567");
    for(int i=0; i<buffer.length();i++)
    System.out.println(buffer.charAt(i));
    }
    }
    

    快捷键ctrl + alt + L格式化代码,效果如下(其实我直接粘贴复制进去Idea就自动帮我格式化了,神仙工具)

    (2)Git的使用以及添加Complex类测试代码

    在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;
    提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。

    仓库添加成员,同时扫码加入搭档的项目

    git clone url克隆仓库,添加测试代码

    import junit.framework.TestCase;
    import org.junit.Test;
    
    public class ComplexTest_Pair extends TestCase {
        Complex a = new Complex();
        Complex b = new Complex(2,-3);
        Complex c = new Complex(1.23,3.21);
    
        @Test
        public void testequals(){
            assertFalse(b.equals(a));
        }
    
        @Test
        public void testtoString(){
            assertEquals("0",a.toString());
            assertEquals("2.0-3.0i",b.toString());
            assertEquals("1.23+3.21i",c.toString());
        }
    
        @Test
        public void testComplexSub(){
            assertEquals("-0.77+6.21i",c.complexsub(b).toString());
            assertEquals("-2.0+3.0i",a.complexsub(b).toString());
        }
    
        @Test
        public void testComplexMul(){
            assertEquals("0",a.complexmulti(b).toString());
            assertEquals("12.09+2.73i",b.complexmulti(c).toString());
        }
    }
    

    (3)重构

    完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。

    使用编码规约扫描,直接点击下面的提醒,alt+enter自动修正

    (4)Java密码学相关内容的学习

    • 体验加解密-凯撒密码

      • 加密:c=m+k mod n
      • 解密:m=c+k mod n
    • Java对称加密-DES算法

      • 加密:
        • (1) 获取密钥生成器
          KeyGenerator kg=KeyGenerator.getInstance("DESede");
        • (2)初始化密钥生成器
          kg.init(168);
          定长度时,若第一步密钥生成器使用的是“DES”算法,则密钥长度必须是56位;若是“DESede”,则可以是112或168位,其中112位有效;若是“AES”,可以是128, 192或256位;若是“Blowfish”,则可以是32至448之间可以被8整除的数;“HmacMD5”和“HmacSHA1”默认的密钥长度都是64个字节。
        • (3) 生成密钥
          SecretKey k=kg.generateKey( );
        • (4) 通过对象序列化方式将密钥保存在文件中
    FileOutputStream f=new FileOutputStream("key1.dat");
    ObjectOutputStream b=new ObjectOutputStream(f);
    b.writeObject(k);
    

    • Java非对称加密-RSA算法
      • (1) 创建密钥对生成器
        KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
      • (2) 初始化密钥生成器
        kpg.initialize(1024);
      • (3) 生成密钥对
        KeyPair kp=kpg.genKeyPair( );
      • (4) 获取公钥和私钥
    PublicKey pbkey=kp.getPublic( );
    PrivateKey prkey=kp.getPrivate( );
    

    生成密钥

    加密

    解密

    • 使用密钥协定创建共享密钥

      • 创建DH公钥和私钥

        • A生成的公钥和私钥
        • B生成的公钥和私钥
      • 创建共享密钥

    • Java摘要算法- MD5

    四、实验过程中遇到的问题及其解决方法

    五、心得体会

    这次试验让我感触最深的是Java密码学中关于“用”和“懂”的关系。没想到林语堂先生还说过这么一句话,我算是林语堂先生的小迷弟了,三观受他影响很大。果然,我的想法又和林语堂先生一样,我一直抱着要弄懂一个东西就要搞明白它的原理的想法。比如要研究物理现象就要知道背后的原理和公式。但是开始学习IT相关的东西后,我发现这样的学习方法让我越来越力不从心,因为我发现这方面的东西都是一层一层包装起来的。C语言够底层了,下面还有汇编,下面还有机器语言,再下面还有硬件,真的要从头弄懂一台计算机是怎么运行的实在是一个庞大的工程。这只是举一个例子,Java中也是这样,有很多的库可以直接调用,但是有时候你没办法一个个搞懂它们的实现。
    不得不说,先会用再去明白它的道理,虽然我觉得这样不是最传统的那种原理->应用的学习方法,但是平时我少不了这么做,因为根本没空去看一个个库的具体实现。我想库被创建的意义也就在于方便人们调用,而不用重复造轮子
    还有,我还是没弄懂结对编程的好处在哪,至少就目前几个小项目来看,完全一个人的编程能力和思考能力是够的,只要头脑清晰,反而比两个人效率高。我的结对队友也很强,但是1+1也不过=2。可能还没掌握精髓?可能就是不适合合作?

    六、码云链接

    七、结对成员链接

    八、参考资料

  • 相关阅读:
    (转)Java并发包:AtomicBoolean和AtomicReference
    (转)maven怎么 引入(或引用/使用) 自定义(或本地/第三方) jar的三种方式 图文教程 方法二最简单
    servlet3.0 异步处理
    (转)Groovy简介
    (转)springboot应用启动原理(一) 将启动脚本嵌入jar
    (转)springboot应用启动原理(二) 扩展URLClassLoader实现嵌套jar加载
    (转)运行jar应用程序引用其他jar包的四种方法 -- ClassLoader应用
    (转)二层网络结构和三层网络结构的对比
    Java语法糖4:内部类
    Java语法糖3:泛型
  • 原文地址:https://www.cnblogs.com/20175211lyz/p/10810596.html
Copyright © 2011-2022 走看看