• 20175325 《JAVA程序设计》实验三《敏捷开发与XP实践》实验报告


    20175325 《JAVA程序设计》实验三《敏捷开发与XP实践》实验报告

    一、实验报告封面
    课程:Java程序设计 班级:1753班 姓名:石淦铭 学号:20175325 成绩:
    指导教师:娄嘉鹏 实验日期:2019年5月2日
    实验时间:13:45 - 17:25
    实验序号:实验三 实验名称:敏捷开发与XP实践

    实验内容:
    1.XP基础
    2.XP核心实践
    3.相关工具

    二、实验内容及步骤:
    (一)、实验一
    1、题目:

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

    2、解答:

    • 使用工具(Code->Reformate Code)把上面代码重新格式化,实验截图:

    • code菜单:

    • Move Line/statement Down/Up:将某行表达式向下/向上移动一行
    • generate可以自动创建类里面任何字段的 gettersetter 方法
    • Reformat Code:格式化代码
    • suround with:代码块环绕
    • comment with line/block comment:将选中区域变成注释
    • show reformat file dialog:格式自动对齐
    • Optimize imports:去除不必要的imports
    • Insert Live Template:插入Live Template 的缩写
    • 感觉好用的功能:Move Line/statement Down/Up(将某行、表达式向下/向上移动一行)

    (二)、实验二
    1、题目:

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

    2、解答:

    • 搭档的实验二Complex代码:
    public class Complex {
        // 定义属性并生成getter,setter
        double RealPart;
        double ImagePart;
        // 定义构造函数
        public Complex(){
            RealPart = 0;
            ImagePart = 1;
        }
        public Complex(double R,double I){
            ImagePart = I;
            RealPart = R;
        }
    
        //Override Object
        public boolean equals(Object obj){
            if(this == obj) {
                return true;
            }
            if(!(obj instanceof Complex)) {
                return false;
            }
            Complex complex = (Complex) obj;
            if(complex.RealPart != ((Complex) obj).RealPart) {
                return false;
            }
            if(complex.ImagePart != ((Complex) obj).ImagePart) {
                return false;
            }
    
            return true;
        }
        public String toString()   {
            String string = "";
            if (ImagePart > 0)
                string =  RealPart + "+" + ImagePart + "i";
            if (ImagePart == 0)
                string =  RealPart + "";
            if (ImagePart < 0)
                string = RealPart + " " + ImagePart + "i";
            return string;
        }
        // 定义公有方法:加减乘除
        Complex ComplexAdd(Complex a) {
            return  new Complex(RealPart+a.RealPart,ImagePart+a.ImagePart);
        }
        Complex ComplexSub(Complex a) {
            return new Complex(RealPart-a.RealPart,ImagePart-a.ImagePart);
        }
        Complex ComplexMulti(Complex a) {
            return new Complex(RealPart*a.RealPart,ImagePart*a.ImagePart);
        }
        Complex ComplexDiv(Complex a) {
            if(a.RealPart==0||a.ImagePart==0) {
                System.out.println("被减数不能为0");
                return new Complex();
            }
    
            double d = Math.sqrt(a.RealPart*a.RealPart)+Math.sqrt(a.ImagePart*a.ImagePart);
            return new Complex((RealPart*a.RealPart+ImagePart*a.ImagePart)/d,Math.round((RealPart*a.ImagePart-ImagePart*a.RealPart)/d));
        }
    }
    
    • 进行的JUnit单元测试代码如下:
    import junit.framework.TestCase;
    import org.junit.Test;
    public class ComplexTest extends TestCase {
        Complex a=new Complex(1,2);
        Complex b=new Complex(-2,-1);
        Complex c=new Complex(4,-2);
        Complex d=new Complex(4,-2);
       
        @Test
        public void testAdd(){
            assertEquals(new Complex(-1,1),a.ComplexAdd(b));
            assertEquals(new Complex(5,0),a.ComplexAdd(c));
        }
        @Test
        public void testSub(){
            assertEquals(new Complex(3,3),a.ComplexSub(b));
            assertEquals(new Complex(-3,4),a.ComplexSub(c));
        }
        @Test
        public void testMulti(){
            assertEquals(new Complex(0,-5),a.ComplexMulti(b));
            assertEquals(new Complex(8,6),a.ComplexMulti(c));
        }
        @Test
        public void testDiv(){
            assertEquals(new Complex(0,0.5),a.ComplexDiv(c));
            assertEquals(new Complex(-0.3,-0.4),b.ComplexDiv(c));
        }
    }
    
    • 测试成功截图:

    (三)、实验三
    1、题目:

    • 实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
    • 完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接

    2、解答

    • 重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
    • 一个完整的重构流程包括:
      • 从版本控制系统代码库中Check out code
      • 读懂代码(包括测试代码)
      • 发现bad smell
      • Refactoring
      • 运行所有的Unit Tests
      • 往代码库中Check in code
    • 完成重构后的代码截图:

    (四)、实验四
    1、题目:

    2、解答:

    • 密码学: 主要是研究保密通信和信息保密的学科, 包括信息保密传输和信息加密存储等。
    • Java密码学算法:
      • 体验加解密--凯撒密码
      • Java对称加密--DES算法
      • Java非对称加密--RSA算法
      • 使用密钥协定创建共享密钥
      • Java摘要算法- MD5
      • Java混合密码系统
    • 实验结果截图:

    三、实验感想:
    通过这次实验,体会到了结对编程的魅力,学习了重构代码,也理解了代码的规范性以及可读性的重要意义,规范的代码能使我们对代码内容一目了然。

    四、PSP:

    步骤 耗时 百分比
    需求分析 10 10%
    设计 15 15%
    代码实现 40 40%
    测试 20 20%
    分析结果 15 15%
  • 相关阅读:
    python基础27 -----python进程终结篇-----IO模型
    python基础26 -----python进程及协成
    python基础25 -----python高级用法
    python基础24 -----python中的各种锁
    python基础23 -----进程和线程
    Leetcode:5. Longest Palindromic Substring
    Leetcode: 3. Longest Substring Without Repeating Characters
    4. Median of Two Sorted Arrays
    Leetcode:445. Add Two Numbers II
    Leetcode: 43. Multiply Strings
  • 原文地址:https://www.cnblogs.com/sgm5/p/10802584.html
Copyright © 2020-2023  润新知