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

一、实验报告封面

课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩

指导教师:娄嘉鹏 实验日期:2018年4月16日

实验时间:13:45 - 3:25

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

实验内容

  1. XP基础
  2. XP核心实践
  3. 相关工具

实验要求

  1. 没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程;
  2. 完成实验、撰写实验报告,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等);
  3. 实验报告中统计自己的PSP(Personal Software Process)时间;
  4. 严禁抄袭。

二、实验内容及步骤

(一)编码标准

  • 编程标准使代码更容易阅读和理解,甚至可以保证其中的错误更少。编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。
  • 没有缩进的代码
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));
}
}
  • 在IDEA中规范缩进

  • 规范后的代码

  • 研究code菜单

  1. Move Line/statement Down/Up:将某行、表达式向下、向上移动一行
  2. generate可以自动创建类里面任何字段的 getter 与 setter 方法
  3. Reformat Code:格式化代码
  4. suround with:代码块环绕
  5. comment with line/block comment:把选中它区域变成注释
  6. show reformat file dialog:按照格式自动对齐
  7. Optimize imports:去除不必要的imports
  8. Insert Live Template:插入一些记不起来的 Live Template 缩写
  • 个人觉得最好用的是generate功能,在编程时用到generate可以省去编写简单方法的功夫,提高效率。如getter and setter

(二)下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例

  • 代码如下:
import junit.framework.TestCase;

public class ComplexTest extends TestCase {
Complex a=new Complex(1,2);
Complex b=new Complex(-2,-1);
Complex c=new Complex(4,-2);
public void testComplexAdd() throws Exception {
assertEquals(5,2+3);
assertEquals(new Complex(-1,1),a.ComplexAdd(b));
assertEquals(new Complex(5,0),a.ComplexAdd(c)); }
public void testComplexSub() throws Exception {
assertEquals(6,9 - 3);
assertEquals(new Complex(3,3),a.ComplexSub(b));
assertEquals(new Complex(-3,4),a.ComplexSub(c)); }
public void testComplexMulti() throws Exception {
assertEquals(6,2 * 3);
assertEquals(new Complex(0,-5),a.ComplexMulti(b));
assertEquals(new Complex(8,6),a.ComplexMulti(c)); }
public void testComplexDiv() throws Exception {
assertEquals(2,6 / 3);
assertEquals(new Complex(0,0.5),a.ComplexDiv(c));
assertEquals(new Complex(-0.3,-0.4),b.ComplexDiv(c)); } }
  • 运行截图

(三)重构搭档代码

重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。

  • 重构后代码
abstract class Data {
abstract public void DisplayValue();
}
class Integer extends Data {
int value;
Integer() {
value=100;
}
@Override
public void DisplayValue(){
System.out.println (value);
} @Override
public String toString() { //重构
return "value=" + value ;
}
}
class Byte extends Data { byte value;
Byte() {
value=1;
}
@Override
public void DisplayValue(){
System.out.println (value);
} @Override
public String toString() { //重构
return "value=" + value ;
} }
// Pattern Classes
abstract class Factory {
abstract public Data CreateDataObject();
} class IntFactory extends Factory {
@Override
public Data CreateDataObject(){
return new Integer();
}
}
class ByteFactory extends Factory {
@Override
public Data CreateDataObject(){
return new Byte();
}
}
//Client classes
class Document {
private Data pd;
Document(Factory pf){
pd = pf.CreateDataObject();
}
public void getPd() { //重构
pd.DisplayValue();
} public void setPd(Data pd) { //重构
this.pd = pd;
} }
//Test class
public class MyDoc {
static Document d;
public static void main(String[] args) {
d = new Document(new ByteFactory());
d.getPd(); //重构
}
}
  • 运行截图

(四)以结对的方式完成Java密码学相关内容的学习,结合重构、git、代码标准等

  • RSA
import java.security.*;
import java.security.spec.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import javax.crypto.interfaces.*;
import java.security.interfaces.*;
import java.math.*;
import java.io.*;
public class Enc_RSA{
public static void main(String args[]) throws Exception{
String s="Hello World!";
// 获取公钥及参数e,n
FileInputStream f= getFileInputStream();
ObjectInputStream b= getObjectInputStream(f);
RSAPublicKey pbk=(RSAPublicKey)b.readObject( );
BigInteger e= getPublicExponent(pbk);
BigInteger n= getModulus(pbk);
getPrintln("e= " + e);
getPrintln("n= "+n);
// 明文 m
byte ptext[]=s.getBytes("UTF8");
BigInteger m= getBigInteger(ptext);
// 计算密文c,打印
BigInteger c=m.modPow(e,n);
getPrintln("c= "+c);
// 保存密文
String cs=c.toString( );
BufferedWriter out=
new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("Enc_RSA.dat")));
out.write(cs,0,cs.length( ));
out.close( ); } private static BigInteger getBigInteger(byte[] ptext) {
return new BigInteger(ptext);
} private static void getPrintln(String x) {
System.out.println(x);
} private static BigInteger getModulus(RSAPublicKey pbk) {
return pbk.getModulus();
} private static BigInteger getPublicExponent(RSAPublicKey pbk) {
return pbk.getPublicExponent();
} private static ObjectInputStream getObjectInputStream(FileInputStream f) throws IOException {
return new ObjectInputStream(f);
} private static FileInputStream getFileInputStream() throws FileNotFoundException {
return new FileInputStream("Skey_RSA_pub.dat");
}
}

三、实验遇到的问题

  • 问题1:在创建的新的项目里,Junit测试失败,显示Class not found
  • 问题1解决方案:通过查询博客,找到了解决方法,步骤如下:
  1. 按ctrl+shift+alt+s,找到modules>path如下选择:
  2. 选project,根据自己的需要设置output文件夹:
  • 问题2:如何将学习搭档加入到自己的项目中?
  • 问题2解决方案:
  1. 先新建共同的项目,点开项目
  2. 找到管理的选项,点击添加项目成员
  3. 将搭档作为开发者添加

四、PSP时间

步骤 耗时 百分比
   |需求分析           |   30min           | 12%            |
| 设计 | 40min | 15% |
| 代码实现 | 90min | 34% |
|测试 | 45min | 17% |
|分析总结 | 60min |23% |

六、代码链接

https://gitee.com/tiankunye/tky-lxs-program/tree/master/src

七、参考资料

20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告的更多相关文章

  1. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  2. 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  3. 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告

    2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...

  4. 20162311 实验三 敏捷开发与XP实践 实验报告

    20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...

  5. 20165308实验三 敏捷开发与XP实践实验报告

    实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...

  6. 20155220 实验三 敏捷开发与XP实践 实验报告

    20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  7. # 20155224 实验三 敏捷开发与XP实践 实验报告

    20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  8. 20155226 实验三 敏捷开发与XP实践 实验报告

    20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  9. 20155311 实验三 敏捷开发与XP实践 实验报告

    20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

随机推荐

  1. python利用unittest测试框架组织测试用例的5种方法

    利用unittest测试框架可以编写测试用例,执行方式分两大类:利用main方法和利用testsuite,其中利用测试套件来组织测试用例可以有4种写法. 在此之前,先了解几个概念 TestCase:所 ...

  2. nilcms file类 简单文件缓存实现

    实现简单的文件缓存,参照CI的部分设计,在这里记录一下子. class File { const CACHE_PATH = 'nil_file_cache'; /*其他函数省略了*/ /** * 获取 ...

  3. Ubuntu和Windows相互共享文件夹

    一.Ubuntu访问Windows共享文件夹 1.对需要共享文件夹右击->属性->共享 2.选择要与其共享的用户,选择好用户点击有点添加按钮添加,然后点击下方的共享按钮 3.完成共享 4. ...

  4. Day22-中间件

    1.中间件,在其它程序中,有的叫管道,有的叫http handler.下面是原生的中间件 2.自己也可以写中间件 2.1 写中间件,新建文件夹Middle,新建m1.py 2.2 在setting里注 ...

  5. Alpha 完结撒花 —— 事后诸葛亮

    写在前面 林燊大哥 一路走来,好不容易,终于完结了. 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决的问题 用户在进店之前无法得知店铺的优劣,通过 ...

  6. BZOJ3688 折线统计 【dp + BIT】

    题目链接 BZOJ3688 题解 将点排序 设\(f[i][j][0|1]\)表示以第\(i\)点结尾,有\(j\)段,最后一段上升或者下降的方案数 以上升为例 \[f[i][j][0] = \sum ...

  7. loj2540 「PKUWC2018」随机算法 【状压dp】

    题目链接 loj2540 题解 有一个朴素三进制状压\(dp\),考虑当前点三种状态:没考虑过,被选入集合,被排除 就有了\(O(n3^{n})\)的转移 但这样不优,我们考虑优化状态 设\(f[i] ...

  8. 构建工具----gradle---可能遇到的问题----Could not reserve enough space for object heap

    Could not reserve enough space for object heap 意思是 jvm的设置内存不足以运行gradle命令了. 分为两种情况,解决的方法也不同. .10/user ...

  9. process.nextTick,Promise.then,setTimeout,setImmediate执行顺序

    1. 同步代码执行顺序优先级高于异步代码执行顺序优先级: 2. new Promise(fn)中的fn是同步执行: 3. process.nextTick()>Promise.then()> ...

  10. Python之旅:数据类型、字符编码、文件处理

    一 引子 1 什么是数据? x=10,10是我们要存储的数据 2 为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3 数据类型 以下每个类型都是有详细介绍链接的 ...