• 20165219 《Java程序设计》实验三(敏捷开发与XP实践)实验报告


    20165219 《Java程序设计》实验三(敏捷开发与XP实践)实验报告

    一、实验报告封面

    课程:Java程序设计 班级:1652班 姓名:王彦博 学号:20165219 成绩:

    指导教师:娄嘉鹏 实验日期:2018年4月30日
    实验时间:15:45 - 17:20

    实验序号:实验三
    实验名称:敏捷开发与XP实践

    实验内容:

    1. XP基础

    2. XP核心实践

    3. 相关工具

    实验要求:

    1 没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程;

    2 完成实验、撰写实验报告,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等);

    3 实验报告中统计自己的PSP(Personal Software Process)时间;

    4 严禁抄袭。

    二、实验内容及步骤

    (一)alibaba 插件与Code菜单

    Move Line/statement Down/Up:将某行、表达式向下、向上移动一行

    suround with:用 try-catch,for,if等包裹语句

    comment with line/block comment:把选中它区域变成注释

    show reformat file dialog:按照格式自动对齐

    Optimize imports:优化imports

    Insert Live Template:插入 Live Template 缩写

    例如:comment with line/block comment,把代码中选中的部分变成注释

    (二)Complex代码添加测试用例

    同伴代码

    public class Complex {
        // 定义属性并生成getter,setter
        private double r;
        private double i;
    
        // 定义构造函数
        public 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;
        }
    
        //Override Object
        public boolean equals(Object obj) {
    
            Complex complex = (Complex) obj;
            if (complex.r != r) {
                return false;
            }
            if (complex.i != i) {
                return false;
            }
            return true;
        }
    
        public String toString() {
            String str = new String();
            if (i == 0) str = r + "";
            else if (i < 0) str = r + "" + i + "i";
            else str = r + "" + "+" + i + "i";
            return str;
        }
    
        // 定义公有方法:加减乘除
        Complex ComplexAdd(Complex a) {
            return new Complex(r + a.r, i + a.i);
        }
    
        Complex ComplexSubtract(Complex a) {
            return new Complex(r - a.r, i - a.i);
        }
    
        Complex ComplexMultiply(Complex a) {
            return new Complex(r * a.r - i * a.i, r * a.i + i * a.r);
        }
    
        Complex ComplexDivide(Complex a) {
            return new Complex((r * a.r + i * a.i) / (a.r * a.r + a.i * a.i), (i * a.r - r * a.i) / (a.r * a.r + a.i * a.i));
        }
    }
    
    

    添加测试用例

    import junit.framework.TestCase;
    import org.junit.Test;
    import static org.junit.Assert.*;
    public class ComplexTest extends TestCase {
      Complex a=new Complex(1,2);
      Complex b=new Complex(-2,-1);
      Complex d=new Complex(4,-2);
      @Test
      public void testequals(){
          assertEquals(false,a.equals(b));
          assertEquals(false,b.equals(c));
          assertEquals(true,new Complex(1.0,2.0).equals(a));
      }
    
      @Test
      public void testAdd(){
          assertEquals(new Complex(-1,1),a.ComplexAdd(b));
          assertEquals(new Complex(5,0),a.ComplexAdd(c));
      }
      @Test
      public void testSubtract(){
          assertEquals(new Complex(3,3),a.ComplexSubtract(b));
          assertEquals(new Complex(-3,4),a.ComplexSubtract(c));
      }
      @Test
      public void testMultiply(){
          assertEquals(new Complex(0,-5),a.ComplexMultiply(b));
          assertEquals(new Complex(17,4),new Complex(3,2.5).ComplexMultiply(c));
      }
      @Test
      public void testDivide(){
          assertEquals(new Complex(0,0.5),a.ComplexDivide(c));
          assertEquals(new Complex(-2,-1),b.ComplexDivide(new Complex(1,0)));
      }
    }
    
    

    测试通过的截图

    git log的截图

    (三)重构

    Rename可以给类、包、方法、变量改名字,增加代码的可读性。

    Refactor->Encapsulate Field...用来封装成员变量

    Source->Generate toString()...用来产生一个toString方法

    (四)以结对方式完成Java密码学的学习

    凯撒密码的密钥是3,算法是将普通字母表中的字母用密钥对应的字母替换

    凯撒密码的加密过程可记为如下一个变换:

    c≡m+k mod n (其中n为基本字符个数)

    同样,解密过程可表示为:

    m≡c+k mod n (其中n为基本字符个数)

    成果如下:

    重构
    将Code,Rename为Caesar,并为p赋初值0

    三、实验体会

    通过本次实验,又一次体会到了结对编程的魅力,通过学习重构代码,也理解了,代码的规范性以及可读性的重要意义。

    四、PSP

    步骤 耗时 百分比
    需求分析 20min 8%
    设计 60min 25%
    代码实现 120min 50%
    测试 10min 4%
    分析总结 30min 13%
  • 相关阅读:
    使用Redis的理由
    从输入网址到显示网页的全过程分析
    Node.js初识
    GET和POST的数据传递到底有何区别?
    第四五六周学习进度
    首尾相接整数数组中最大子数组的和
    网页版四则运算
    团队介绍及项目简介
    整数数组中最大子数组的和
    软件工程个人作业03
  • 原文地址:https://www.cnblogs.com/wyb-1998/p/8955156.html
Copyright © 2020-2023  润新知