发表时间:2022-03-24来源:网络
课程:Java程序设计 班级:1653班 姓名:孙晓暄 学号:20165318html
指导教师:娄嘉鹏 实验日期:2018年4月27日java
实验时间:13:45 - 3:25 实验序号:实验三git
实验名称:敏捷开发与XP实践程序员
实验内容:算法
XP基础 XP核心实践 相关工具实验要求:编程
没有Linux基础的同窗建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程 完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同窗”、“看书”等一概得0分)以及分析(从中能够获得什么启示,有什么收获,教训等)。报告能够参考范飞龙老师的指导 严禁抄袭,有该行为者实验成绩归零,并附加其余惩罚措施。安全
(一)编码标准网络
任务一:在IDEA中使用工具(Code->Reformate Code)格式化代码,并学习Code菜单的功能(二)敏捷开发与XPapp
任务二:下载搭档实验二的Complex代码,加入很多于三个JUnit单元测试用例(三)重构框架
任务三:下载搭档的代码,至少进行三项重构(四)练习
任务四:以结对的方式完成Java密码学相关内容的学习,结合重构、git、代码标准等(五)实验过程当中遇到的问题及解决方法
(六)实验体会与总结
(七)代码托管
(八)PSP需求分析
参考资料
打开 Settings -> Plugins -> Browse repositories... 
在搜索框输入alibaba便可看到Alibaba Java Code Guidelines插件,点击Install进行安装,而后重启IDE生效:
使用比较简单:在项目名称上单击右键,在弹出菜单上选择编码规约扫描:

出现下图内容:

不规范的地方,有中文提示而且定位到了行,alibaba把问题分为block/critical/major三个等级,有些规则能够一键修复。
Java中的通常的命名规则有:
要体现各自的含义 包、类、变量用名词 方法名用动宾 包名所有小写,如:io,awt 类名第一个字母要大写,如:HelloWorldApp 变量名第一个字母要小写 ,如:userName 方法名第一个字母要小写:setName规范后的代码格式
import java.util.concurrent.Callable; 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菜单以下:

几个比较经常使用的功能总结以下:
Override Methods(Ctrl+O):重载基本类的方法;
Implement Methods(Ctrl+I):完成当前类 implements 的(或者抽象基本类的)接口的方法; Generate(Alt+Insert):建立类里面任何字段的 getter 与 setter 方法;
Surround With(Ctrl+Alt+T):使用if-else、try-catch、do-while等包装代码段;

Insert Live Template(Ctrl-J):执行一些记不起来的 Live Template 缩写;
Comment with Line Comment(Ctrl+斜杠)/Comment with Block Comment(Ctrl+Shift+斜杠):用 Ctrl+斜杠 与 Ctrl-Shift-/ 来注释(或反注释)代码行与代码块。 用Ctrl+斜杠单行注释标记(“ //… ”)来注释(或反注释)当前行或者选择地代码块。而 Ctrl+Shift+斜杠则能够用块注释标记(“ /* */”)把所选块包围起来。要反注释一个代码块就在块中任何一个地方按 Ctrl+Shift+斜杠 便可;
Reformat Code(Ctrl+Alt+L):将代码按标准格式缩进;
show reformat file dialog:按照格式自动对齐
Optimize imports:能够优化imports,去除没必要要的imports
Move Line/statement Down/Up:将某行、表达式向下、向上移动一行
返回目录
结对编程是XP中的重要实践。在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工做。他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一块儿工做。他们一块儿分析,一块儿设计,一块儿写测试用例,一块儿编码,一块儿作单元测试,一块儿作集成测试,一块儿写文档等。 --引用自实验三 敏捷开发与XP实践
搭档的Complex代码以下:

须要测试的方法有:ComplexAdd(),ComplexSub(),ComplexMulti(),ComplexDiv(); 编写测试代码并上传到搭档码云项目上:
import junit.framework.TestCase; import org.junit.Test; import static org.junit.Assert.*; /** * Created by sxx on 2018/4/26. */ public class ComplexTest extends TestCase { Complex c1 = new Complex(0.0, 2.0); Complex c2 = new Complex(-1.0, -1.0); Complex c3 = new Complex(1.0,2.0); @Test public void testgetRealpart() throws Exception{ assertEquals(0.0,Complex.getRealPart(0.0)); assertEquals(-1.0,Complex.getRealPart(-1.0)); assertEquals(1.0,Complex.getRealPart(1.0)); } @Test public void testgetImagePart() throws Exception{ assertEquals(2.0,Complex.getImagePart(2.0)); assertEquals(-1.0,Complex.getImagePart(-1.0)); assertEquals(2.0,Complex.getImagePart(2.0)); } @Test public void testComplexAdd() throws Exception{ assertEquals("-1.0+1.0i",c1.ComplexAdd(c2).toString()); assertEquals("1.0+4.0i",c1.ComplexAdd(c3).toString()); assertEquals("0.0+1.0i",c2.ComplexAdd(c3).toString()); } @Test public void testComplexSub() throws Exception{ assertEquals("1.0+3.0i",c1.ComplexSub(c2).toString()); assertEquals("-1.0",c1.ComplexSub(c3).toString()); assertEquals("-2.0-3.0i",c2.ComplexSub(c3).toString()); } @Test public void testComplexMulti() throws Exception{ assertEquals("2.0-2.0i",c1.ComplexMulti(c2).toString()); assertEquals("-4.0+2.0i",c1.ComplexMulti(c3).toString()); assertEquals("1.0-3.0i",c2.ComplexMulti(c3).toString()); } @Test public void testComplexDiv() throws Exception{ assertEquals("-1.0-1.0i",c1.ComplexDiv(c2).toString()); assertEquals("0.4+0.8i",c1.ComplexDiv(c3).toString()); assertEquals("-0.6-0.6i",c2.ComplexDiv(c3).toString()); } }
返回目录
重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变动 。
咱们要修改软件,万变不离其宗,无非就是四种动机:
增长新功能; 原有功能有BUG; 改善原有程序的结构; 优化原有系统的性能 。须要重构的地方: 代码重复、方法过长、参数列过长、条件逻辑过分复杂、分支语句 
一个完整的重构流程包括:
从版本控制系统代码库中Check out code 读懂代码(包括测试代码) 发现bad smell Refactoring 运行全部的Unit Tests 往代码库中Check in code
如上代码存在如下几个问题:
类名不符合命名规则; 类中变量没有被封装; 方法没有被封装;程序修改入下:

返回目录
Java安全体系结构总共分为4个部分:
JCA( Java Cryptography Architecture, Java加密体系结构):JCA提供基本的加密框架, 如证书、 数字签名、消息摘要和密钥对产生器。
JCE( Java Cryptography Extension, Java加密扩展包):JCE在JCA的基础上做了扩展, 提供了各类加密算法、 消息摘要算法和密钥管理等功能。JCE的实现主要在javax.crypto包( 及其子包) 中
JSSE( Java Secure Sockets Extension, Java安全套接字扩展包):JSSE提供了基于SSL( Secure Sockets Layer,安全套接字层) 的加密功能。 在网络的传输过程当中, 信息会通过多个主机(颇有可能其中一台就被窃听) , 最终传送给接收者, 这是不安全的。这种确保网络通讯安全的服务就是由JSSE来提供的。
JAAS( Java Authentication and Authentication Service, Java鉴别与安全服务):JAAS提供了在Java平台上进行用户身份鉴别的功能。
进行了学习以后,我与搭档选择了实现凯撒密码的加解密算法,并以结对的方式完成了代码编写的工做。
凯撒密码算法:将字母表中的字母移动必定位置而实现加密。
具体步骤: (1)根据凯撒密码特性设计算法 (2)传入须要计算的字符串 (3)处理计算结果
伪代码:
定义main方法 传入参数 参数判断,是否有非法输入,如有,抛出异常 进行加解密,大小写区分 输出结果 产品代码: Caesaar.java public class Caesar { public static void main(String[] args) throws EadException { String s = args[0]; int key = Integer.parseInt(args[1]); String es = ""; for (int i = 0; i < (s.length()); i++) { char c = s.charAt(i); //自定义异常类 try { boolean exist = ((c > 64) && (c < 91)) || ((c > 96) && (c < 123) || c == 32 || c == 33); if (exist == false) { throw new EadException(s); } } catch (EadException e) { System.out.println(e.warnMess()); } //小写字母 if (c >= 'a' && c 'z') { c -= 26; } } //大写字母 else if (c >= 'A' && c 'Z') { c -= 26; } } es += c; } System.out.println(es); } }EadException.java
public class EadException extends Exception{ String message; public EadException(String sourceString){ message = "The input is not correct"; } public String warnMess(){ return message; } }最初代码:

运行结果:

代码规范截图:

重构截图:

除了实现凯撒密码算法以外,我还运行了其余算法:
DES算法
文件key1.dat中生成的密钥



RSA加密

RSA解密 
MD5算法 
返回目录
**Q1:**在作重构相关内容的实验时,因为对重构的内容并非很是了解,小伙伴的代码也大都是书上的代码,找了好多,都没有发现太多须要重构的地方。
**解决方法:**在学习了实验三 敏捷开发与XP实践——娄老师的博客,以及参考了Java代码重构的几种模式详解 java 代码重构(系列讲解)后,我再次查看伙伴的代码,找到了几处能够规范的地方。
**Q2:**在编译运行MD5算法时,出现如下问题 
**解决方法:**经过alibaba编码扫描,我发现是代码中有一处“;”使用成了中文的“;”致使编码错误,改正该错误后,代码就能够正常运行了。
返回目录
经过本次实验,我主要学习到了代码标准,代码重构,Java中密码学算法等内容。
代码标准和重构的学习,使我注意到本身以前编写代码时的不少不规范之处,并且经过使用alibaba的实时编码扫描,使我在编写代码的同时,注意规范代码的标准格式,使写出的代码更加明了可观,类名和变量名的规范,也使我在编写代码时,减小了许多没必要要的注释。
有了以前四则运算结对编程的锻炼,在本次实验过程当中,我与个人小伙伴合做的比较融洽,节约了一些没必要要的时间,结对编程效率有了必定的提升。
返回目录
个人码云地址 搭档的码云地址
Java 密码学算法——娄老师的博客 实验三 敏捷开发与XP实践——娄老师的博客 Java代码重构的几种模式详解 java 代码重构(系列讲解) IntelliJ IDEA使用技巧一览表 返回目录
上一篇:下列不属于开发java程序的步骤
下一篇:改善java程序的151个建议
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14