2018-2019-2 20175217 实验三《敏捷开发与XP实践》实验报告
一、实验报告封面
课程:Java程序设计 班级:1752班 姓名:吴一凡 学号:20175217
指导教师:娄嘉鹏 实验日期:2019年4月25日
实验时间:--- 实验序号:实验三
实验名称:敏捷开发与XP实践
实验内容:
- XP基础
- XP核心实践
- 相关工具
实验要求:
- 没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程
- 完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导
- 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。
二、实验内容及步骤
1.安装、使用alibaba 插件规范代码
- 在ieda的
setting中找到plugins并搜索alibaba,点击install进行安装

- 重启IDEA后,在代码中右击点击
编码规约扫描就可以使用了

- 然后就可以在下方看到一些不规范的地方,出现的问题分为block、critical、major三个级别,根据提示信息就可以规范代码了

Java中的一般的命名规则有:
- 要体现各自的含义
- 包、类、变量用名词
- 方法名用动宾
- 包名全部小写,如:io,awt
- 类名第一个字母要大写,如:HelloWorldApp
- 变量名第一个字母要小写,如:userNamege
- 方法名第一个字母要小写:setName
规范后的代码:
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菜单的功能
使用工具(Code->Reformate Code)格式化代码
- 在
code中选择Reformate Code格式化代码(Ctrl+Alt+L)

code菜单中的功能
- Override Methods(ctrl+O):重载基本类的方法

- Surround With(Ctrl+Alt+T):使用if-else、for、while等语句包装代码段

- Comment with Line Comment(Ctrl+/):将本行变成注释

- Comment with Block Comment(Ctrl+Shift+/):将选中的代码块变成注释

3.下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例
- 搭档的Complex代码如下:

- 要测试的类
getReal、getImaginary、toString、equals、complexAdd、complexSub、complexMulti、complexDiv - 测试代码如下:
import junit.framework.TestCase;
public class Complex_pTest extends TestCase {
Complex_p a=new Complex_p(2,3);
Complex_p b=new Complex_p(0,1);
Complex_p c=new Complex_p(-1,-2);
public void testGetReal() {
assertEquals(2.0,a.getReal());
assertEquals(0.0,b.getReal());
assertEquals(-1.0,c.getReal());
}
public void testGetImaginary() {
assertEquals(3.0,a.getImaginary());
assertEquals(1.0,b.getImaginary());
assertEquals(-2.0,c.getImaginary());
}
public void testToString1() {
assertEquals("2.0+3.0i",a.toString());
assertEquals("1.0i",b.toString());
assertEquals("-1.0-2.0i",c.toString());
}
public void testComplexAdd() {
assertEquals("2.0+4.0i",a.ComplexAdd(b).toString());
assertEquals("1.0+1.0i",a.ComplexAdd(c).toString());
assertEquals("-1.0-1.0i",b.ComplexAdd(c).toString());
}
public void testComplexSub() {
assertEquals("2.0+2.0i",a.ComplexSub(b).toString());
assertEquals("1.0+3.0i",b.ComplexSub(c).toString());
assertEquals("-3.0-5.0i",c.ComplexSub(a).toString());
}
public void testComplexMulti() {
assertEquals("-3.0+2.0i",a.ComplexMulti(b).toString());
assertEquals("4.0-7.0i",a.ComplexMulti(c).toString());
assertEquals("2.0-1.0i",b.ComplexMulti(c).toString());
}
public void testComplexDiv() {
assertEquals("-1.4-4.0i",a.ComplexDiv(c).toString());
assertEquals("-0.2-1.0i",b.ComplexDiv(c).toString());
}
}
- 然后将测试代码传到搭档的码云里,git log如下:

4.重构
重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
修改软件的四种动机:
- 增加新功能;
- 原有功能有BUG;
- 改善原有程序的结构;
- 优化原有系统的性能 。
需要重构的地方:
- 代码重复;
- 方法过长;
- 参数列过长;
- 条件逻辑过度复杂;
- 分支语句
一个完整的重构流程应包括
- 从版本控制系统代码库中Check out code
- 读懂代码(包括测试代码)
- 发现bad smell
- Refactoring
- 运行所有的Unit Tests
- 往代码库中Check in code
下载搭档的代码,至少进行三项重构
- 搭档代码如下:

- 重构1:重写toString时的@override标志

- 重构2:添加作者和日期

- 重构3:对类中的变量和方法进行封装

- 重构4:规范方法名(首字母小写)

- 重构5:精简过长的方法

- 修改后的代码:

5.密码学
RSA算法
RSA算法,通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册
加密过程:
1) 随机选取两个不相等的质数p和q
2) 计算p和q的乘积
n:n=pxq
3) 计算欧拉函数φ(n)。(程序里我用的是u(n))
φ(n)=(p-1)x(q-1)
4) 随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。
5) 计算e对于φ(n)的模反元素d。
6) 将n和e封装成公钥,n和d封装成私钥。
公钥:(e,n) 私钥:(d,n)
7) 密文c=明文m^公钥e mod 公钥n:
C=m^e mod n
- 解密过程
1) 前面6个步骤相同
2) 明文m=密文c^私钥d mod私钥n:
M=c^d mod n
编程步骤
1.创建密钥对
- 创建密钥对生成器
KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
- 初始化密钥生成器
kpg.initialize(1024);
- 生成密钥对
KeyPair kp=kpg.genKeyPair( );
- 获取公钥和私钥
PublicKey pbkey=kp.getPublic( );
PrivateKey prkey=kp.getPrivate( );

2.加密
- 获取公钥
FileInputStream f=new FileInputStream("Skey_RSA_pub.dat");
ObjectInputStream b=new ObjectInputStream(f);
RSAPublicKey pbk=(RSAPublicKey)b.readObject( );
- 获取公钥的参数(e, n)
BigInteger e=pbk.getPublicExponent();
BigInteger n=pbk.getModulus();
- 获取明文整数(m)
String s="Hello World!";
byte ptext[]=s.getBytes("UTF8");
BigInteger m=new BigInteger(ptext);
- 执行计算
BigInteger c=m.modPow(e,n);

3.解密
- 读取密文
BufferedReader in=
new BufferedReader(new InputStreamReader(
new FileInputStream("Enc_RSA.dat")));
String ctext=in.readLine();
BigInteger c=new BigInteger(ctext);
- 获取私钥
FileInputStream f=new FileInputStream("Skey_RSA_priv.dat");
ObjectInputStream b=new ObjectInputStream(f);
RSAPrivateKey prk=(RSAPrivateKey)b.readObject( );
- 获取私钥的参数(d, n)
BigInteger d=prk.getPrivateExponent( );
BigInteger n=prk.getModulus( );
- 执行计算
BigInteger m=c.modPow(d,n);
- 计算明文整型数对应的字符串
byte[] mt=m.toByteArray();
for(int i=0;i<mt.length;i++){
System.out.print((char) mt[i]);
}

4.重构

三、实验过程中遇到的问题及解决方法
问题:在把测试代码上传到搭档码云的过程中出现没有权限的错误:

解决:
- 先
git clone 搭档码云地址,将搭档的项目添加到自己的项目中

- 然后登录搭档的码云仓库,点击管理,在仓库成员管理中找到开发者,然后点击邀请用户

- 然后点击复制链接

- 然后登录自己的码云,点击同意就可以上传了

(成功上传~~)
四、代码托管
五、实验体会与总结
- 通过本次实验,我主要学习到了代码标准,代码重构等内容、了解了敏捷与XP开发的基本知识。在本次实验中,我认识到了代码的规范性的重要。在现实中,好的代码的功能效率都会大大增加,在代码规范性的实验中,我也认识到了,自己编写代码的格式很不规范,在之后要积极矫正。在本次实验中,我也进一步体会到了结对编程的优势,和小伙伴合作会使编程的效率大大提高。
2018-2019-2 20175217 实验三《敏捷开发与XP实践》实验报告的更多相关文章
- 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...
- 20175212童皓桢 实验三敏捷开发与XP实践实验报告
20175212童皓桢 实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 一.Code菜单功能的研究 Move Line/statement Down/Up:将某 ...
- 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20162311 实验三 敏捷开发与XP实践 实验报告
20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...
- 20165308实验三 敏捷开发与XP实践实验报告
实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...
- 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 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 ...
随机推荐
- Windows Server 2016-图形化新建域用户(一)
上章节我们介绍了有关OU组织单位的日常管理,本章我们将对域用户的创建进行简单介绍,常规的操作方法是通过管理控制台图形化手工创建,具体操作方法如下: 1.常规管理控制台 Active Directory ...
- Java 枚举类详解
1. 枚举类定义 在某些情况下,一个类的对象是有限而且固定的,比如季节类,它只有4个对象,这种实例有限而且固定的类,在Java里被称为枚举类. 2. 早期实现枚举的方式 public static f ...
- Java核心技术第五章——1.类、超类、子类(1)
1.定义子类: 关键字extends表明正在构造的新类派生与一个已存在的类.已存在的类称为超类.基类或父类:新类称为子类.派生类或孩子类.超类和子类是Java程序员最常用的两个术语(emmm~~我觉得 ...
- 一些关于IO流的问题
一:知识点 二:代码 1.阅读下面程序段: BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(&quo ...
- 浏览器F12 waterfall性能检测详解详解
Queueing 是排队的意思 Stalled 是阻塞 请求访问该URL的主机是有并发和连接数限制的,必须要等之前的执行才能执行之后的,这段时间的耗时 DNS Lookup 是指域名解析所耗时间 I ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十五║初探SSR服务端渲染(个人博客二)
缘起 时间真快,现在已经是这个系列教程的下半部 Vue 第 12 篇了,昨天我也简单思考了下,可能明天再来一篇,Vue 就基本告一段落了,因为什么呢,这里给大家说个题外话,当时写博文的时候,只是想给大 ...
- 从壹开始前后端分离 [ vue + .netcore 补充教程 ] 二九║ Nuxt实战:异步实现数据双端渲染
回顾 哈喽大家好!又是元气满满的周~~~二哈哈,不知道大家中秋节过的如何,马上又是国庆节了,博主我将通过三天的时间,给大家把项目二的数据添上(这里强调下,填充数据不是最重要的,最重要的是要配合着让大家 ...
- [Abp vNext 源码分析] - 3. 依赖注入与拦截器
一.简要说明 ABP vNext 框架在使用依赖注入服务的时候,是直接使用的微软提供的 Microsoft.Extensions.DependencyInjection 包.这里与原来的 ABP 框架 ...
- .NET Core 使用NLog日志记录
前言 每个项目都会需要使用到日志功能,这对于项目上线后 出现的bug异常,能及时定位和便于后期错误分析.那我们今天来看看在.NET Core中如何使用NLog日志. NLog 什么是NLog呢? NL ...
- Linux journalctl命令
在Systemd出现之前,Linux系统及各应用的日志都是分别管理的,Systemd开始统一管理了所有Unit的启动日志,这样带来的好处就是可以只用一个 journalctl命令,查看所有内核和应用的 ...