• 20175314 实验三 敏捷开发与XP实践


    20175314 实验二 Java面向对象程序设计

    一、实验报告封面

    课程:Java程序设计 班级:1753班 姓名:薛勐 学号:20175314
    指导教师:娄嘉鹏 实验日期:2019年5月3日
    实验时间:15:35 - 17:15 实验序号:三
    实验名称: 敏捷开发与XP实践
    实验要求:
    1、完成实验、撰写实验报告,注意实验报告重点是运行结果,遇到的问题以及分析。
    2、实验报告中统计自己的PSP(Personal Software Process)时间;
    3、掌握使用IDEA完成基础编程与程序调试的能力。

    二、实验内容

    • XP基础
    • XP核心实践
    • 相关工具

    三、实验步骤

    (一)代码格式化

    创建“175314.exp3”项目,在该项目下创建CodeStandard.java,并输入代码:

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

    打开Settings ->Plugins ->Browse repositories,在搜索框输入alibaba即可看到Alibaba Java Code Guidelines插件,点击Install进行安装

    安装后右键点击类名,再点击“编码规约扫描”

    • 发现代码中不规范的地方后进行纠正:

    打开Code->Reformate Code,格式化代码:

    我认为最好用的工具是Reformate Code,可以快速规范代码格式,方便观察及编写,还有就是Override Methods,提供了Java.lang包中的一些类的方法重写

    (二)邀请搭档加入码云项目,对搭档的代码进行Junit测试

    在我的码云中创建Teamwork项目,邀请自己的搭档20175316盛茂淞成为“开发者”

    引入搭档在实验二中的Complex代码,加入多个Junit测试用例并编译:
    搭档的 Complex.java:

    public class Complex {
        double R;
        double I;
        Complex(double R, double I) {
            this.R = R;
            this.I = I;
        }
        public static double getRealPart(double R) {
            return R;
        }
        public static double getImagePart(double I) {
            return I;
        }
        public Complex ComplexAdd(Complex c) {
            return new Complex(R + c.R, I + c.I);
        }
        public Complex ComplexSub(Complex c) {
            return new Complex(R - c.R, I - c.I);
        }
        public Complex ComplexMulti(Complex c) {
            return new Complex(R * c.R - I * c.I, R * c.I + I * c.R);
        }
        public Complex ComplexDiv(Complex c) {
            return new Complex((R * c.I + I * c.R) / (c.I * c.I + c.R * c.R), (I * c.I + R * c.R) / (c.I * c.I + c.R * c.R));
        }
        public String toString() {
            String str = "";
            if (I > 0)
                str = R + "+" + I + "i";
            if (I == 0)
                str = R+"";
            if (I < 0)
                str = R + "" + I + "i";
            return str;
        }
        public boolean equals(Object obj){
            if (this == obj)
                return true;
            if(obj==null)
                return false;
            if(obj instanceof Complex){
                Complex p = (Complex) obj;
                if(p.R==this.R &&p.I==this.I )
                    return true;
            }
            return false;
        }
    }
    

    ComplexTest:

    出现“绿条”,通过测试

    在命令行中使用git语句将代码传到我和搭档新建的共同项目Teamwork,然后输入git log并截图:

    (三)重构的练习

    下载一个搭档的代码,我选择了MyUtil.java:

    代码中存在的问题与分析

    • 问题:根据截图中的结果分析,没有考虑分数不能低于0分而且分数可以等于100分

    根据以上问题,对代码进行了如下重构

    else if (grade < 100) 
        return "优秀";
    
    • 修改为:
    else if (grade <= 100) 
        return "优秀";
    
    • 添加:
    if ((grade < 0))
       return "错误";
    

    对修改的代码进行Junit测试,出现“绿条”,结果正确

    (四)Java密码学算法的学习

    编写一个实现MD5加密的程序:

    import javax.swing.*;
    import java.io.Console;
    import java.security.*;
    import java.util.Scanner;
    public class MD5{
        public static void main(String args[ ]) throws Exception{
            System.out.println("请输入密码");
            Scanner scanner = new Scanner(System.in);
            String pass = scanner.nextLine();
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(pass.getBytes());
            byte[] hash = md5.digest();
            pass = "";
            for (int i = 0; i < hash.length; i++) {
                pass += Integer.toHexString(hash[i] & 0xff);
            }
            System.out.print("加密结果为"+pass);
        }
    }
    
    

    运行MD5.java,输入abc,得到如下结果:

    阅读并运行DES算法程序并且运行,得到如下结果:

    阅读并运行RSA算法程序并且运行,得到如下结果:

    四、遇到的问题

    • (MD5.java)Java(pass方法)中只有按值传递,没有按引用传递:


    值传递:传递的是存储单元中的内容,而非地址或者引用。

    五、感想与收获

    这次实验对于我来说依然不轻松,不过学到的也是很多的,特别是再一次更深入地了解了Java里面强大的关于密码的功能(之前在Example8_8也有接触过),Java可以很容易地实现很多密码算法,十分方便,这与我们的信息安全专业紧密地连接到了一起。

    六、码云链接

    七、Personal Software Process时间

    步骤 耗时 百分比
    需求分析 40 13.3%
    设计 60 20%
    代码实现 120 40%
    测试 40 13.3%
    分析总结 40 13.4%

    八、参考资料

    实验三 敏捷开发与XP实践
    Java 密码学算法

  • 相关阅读:
    linux 和 ubuntu 修改主机名
    Linux删除用户
    ubuntu更新源
    python连接mysql
    用于迭代器的yield return
    Tuple类型
    Action 和 Func
    用iDSDT制作声显卡DSDT
    C#“同步调用”、“异步调用”、“异步回调”
    读懂IL代码就这么简单
  • 原文地址:https://www.cnblogs.com/SANFENs/p/10792314.html
Copyright © 2020-2023  润新知