20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
一、实验报告封面
课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩:
指导教师:娄嘉鹏 实验日期:2018年4月16日
实验时间:13:45 - 3:25
实验序号:实验三 实验名称:敏捷开发与XP实践
实验内容:
- XP基础
- XP核心实践
- 相关工具
实验要求:
- 没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程;
- 完成实验、撰写实验报告,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等);
- 实验报告中统计自己的PSP(Personal Software Process)时间;
- 严禁抄袭。
二、实验内容及步骤
(一)编码标准
- 编程标准使代码更容易阅读和理解,甚至可以保证其中的错误更少。编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。
- 没有缩进的代码
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菜单
Move Line/statement Down/Up
:将某行、表达式向下、向上移动一行generate
可以自动创建类里面任何字段的 getter 与 setter 方法Reformat Code
:格式化代码suround with
:代码块环绕comment with line/block comment
:把选中它区域变成注释show reformat file dialog
:按照格式自动对齐Optimize imports
:去除不必要的importsInsert 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解决方案:通过查询博客,找到了解决方法,步骤如下:
- 按ctrl+shift+alt+s,找到modules>path如下选择:
- 选project,根据自己的需要设置output文件夹:
- 问题2:如何将学习搭档加入到自己的项目中?
- 问题2解决方案:
- 先新建共同的项目,点开项目
- 找到
管理
的选项,点击添加项目成员
- 将搭档作为开发者添加
四、PSP时间
步骤 | 耗时 | 百分比 |
---|
|需求分析 | 30min | 12% |
| 设计 | 40min | 15% |
| 代码实现 | 90min | 34% |
|测试 | 45min | 17% |
|分析总结 | 60min |23% |
六、代码链接
https://gitee.com/tiankunye/tky-lxs-program/tree/master/src
七、参考资料
20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告的更多相关文章
- 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告
2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...
- 20162311 实验三 敏捷开发与XP实践 实验报告
20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...
- 20165308实验三 敏捷开发与XP实践实验报告
实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...
- 20155220 实验三 敏捷开发与XP实践 实验报告
20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- # 20155224 实验三 敏捷开发与XP实践 实验报告
20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155226 实验三 敏捷开发与XP实践 实验报告
20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155311 实验三 敏捷开发与XP实践 实验报告
20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
随机推荐
- Eclipse HTML Editor
需插件: 1.GEF 3.1 安装程序下载 下载地址: http://download.eclipse.org/tools/gef/downloads/drops/R-3.1-200507071758 ...
- 015 反射中的 Class.forName() 与 ClassLoader.loadClass() 的区别
作者:nnngu GitHub:https://github.com/nnngu 博客园:http://www.cnblogs.com/nnngu 简书:https://www.jianshu.com ...
- I Count Two Three HDU - 5878(暴力二分)
为甚么16年Qingdao Online 都是暴力题emm///... 先暴力预处理 然后lower _bound二分 #include <iostream> #include <c ...
- BZOJ 3166: [Heoi2013]Alo
3166: [Heoi2013]Alo Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 923 Solved: 437[Submit][Status] ...
- Ansible基础概述
一.Ansible简介 Ansible基于Python语言实现,由paramiko和PyYAML两个关键模块构建.Ansible的编排引擎可以出色地完成配置管理,流程控制,资源部署等多方面工作.Ans ...
- Android Studio之BuildConfig类
https://blog.csdn.net/lvxiangan/article/details/71601451 Android Studio开发中,把一个module输出打包为jar文件,我们会发现 ...
- c语言条件编译和预编译
转自http://www.cnblogs.com/rusty/archive/2011/03/27/1996806.html 一.C语言由源代码生成的各阶段如下: C源程序->编译预处理-> ...
- Fibonacci数列时间复杂度之美妙
Fibonacci数列: fib(0)=1 fib(1)=1 fib(n)=fib(n-1)+fib(n-2) 上课老师出了一道题,求下列函数的时间复杂度: int fib(int d) { ) ; ...
- css基础--常用css属性01
1 背景相关 背景颜色 background-color = 颜色名称/rgb值/十六进制值 背景图片 background-image = url('') 背景图片平铺方式 backgro ...
- java基础-回调函数(callback)
java基础-回调函数(callback) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数 ...