2018-2019-2 20175227张雪莹《Java程序设计》实验三 《敏捷开发与XP实践》
2018-2019-2 20175227张雪莹《Java程序设计》
实验三 《敏捷开发与XP实践》
实验报告封面
- 课程:Java程序设计 班级:1752班 姓名:张雪莹 学号:20175227
- 指导教师:娄嘉鹏 实验日期:2019年4月29日
- 实验时间:--- 实验序号:实验三
- 实验名称:敏捷开发与XP实践
- 实验题目:
- 实验要求:
- 完成实验三 敏捷开发与XP实践中的内容,参考Java密码学算法相关内容
- 其中Eclipse相关的内容参考Intellj IDEA简易教程换成IDEA实现
- 完成云班课中的检查点,也可以先完成实验报告,直接提交。注意不能只有截图,要有知识点,原理,遇到的问题和解决过程等说明。实验报告中一个检查点要有多张截图。
- 发表实验报告博客,标题“学期(如2018-2019-2) 学号(如20175300)实验三《敏捷开发与XP实践》实验报告”
实验步骤
- 代码规范
- 要求:
- 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
- 参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD 安装alibaba 插件,解决代码中的规范问题。
- 在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。提交截图,加上自己学号水印。
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中的插件,通过Jetbrains官方仓库安装:打开
Settings
->Plugins
->Marketplace
在搜索框输入alibaba即可看到Alibaba Java Code Guidelines
插件,点击Install进行安装,然后重启IDE生效:
- 在项目名称上单击右键,在弹出菜单上选择
编码规约扫描
:
- 在IDEA中使用工具(
Code
->Reformate Code
)把下面代码重新格式化
- 下面简单介绍一下
Code
菜单中选项的简单用法:Override Methods
:重载方法/新建方法Implement Methods
:执行方法Generate
:创建类里面任何字段的getter与setter方法Surround with
:将某条语句被if、for等等封装语句括起Move Statement Down/up
:将语句下移到后一模块之后Move line down
:调换语句顺序Comment with Line/Block Comment
:两种注释Reformat Code
:将代码按标准格式缩进
- 要求:
- 结对编程
- 要求:
- 在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;
- 提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。
- 结对编程是XP中的重要实践。在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。
- 结对编程中有两个角色:
- 驾驶员(Driver)是控制键盘输入的人。
- 领航员(Navigator)起到领航、提醒的作用。
- 邀请结对伙伴加入自己的仓库
- 打开自己的码云项目
- 点击
管理
->仓库成员管理
->添加仓库成员
->邀请用户
- 要求:
- 打开虚拟机,输入git clone 搭档码云链接
- 转到要添加代码的搭档目录下进行
atom Complex.java
和atom ComplexTest.java
- Complex代码为:
/**@author Xueying Zhang 20175227@date 2019/4/29 12:49.
*/
public class Complex{private double a;private double b;public Complex(double a, double b) {this.a = a;this.b = b;}public static double getRealPart(double a) {return a;}public static double getImagePart(double b) {return b;}public Complex ComplexAdd(Complex c) {return new Complex(a + c.a, b + c.b);}public Complex ComplexSub(Complex c) {return new Complex(a - c.a, b - c.b);}public Complex ComplexMulti(Complex c) {return new Complex(a * c.a - b * c.b, a * c.b + b * c.a);}public Complex ComplexDiv(Complex c) {return new Complex((a * c.b + b * c.a)/(c.b * c.b + c.a * c.a), (b * c.b + a * c.a)/(c.b * c.b + c.a * c.a));}public String toString() {String s = " ";if (b > 0) {s = a + "+" + b + "i";}if (b == 0) {s = a + "";}if (b < 0) {s = a + " " + b + "i";}return s;}
}
- 需要测试的方法有:
getRealPart
;getImagePart
;ComplexAdd
;ComplexSub
;ComplexMulti
;ComplexDiv
- 测试代码如下:
import junit.framework.TestCase;
import org.junit.Test;public class ComplexTest extends TestCase {Complex com1=new Complex(1.0,2.0);Complex com2=new Complex(0.0,1.0);Complex com3=new Complex(1.0,0.0);Complex com4=new Complex(-1.0,-2.0);public void testgetRealPart()throws Exception{//测试getRealPart方法assertEquals(2.7,Complex.getRealPart(2.7));assertEquals(-2.7,Complex.getRealPart(-2.7));assertEquals(5.0,Complex.getRealPart(5.0));assertEquals(0.0,Complex.getRealPart(0.0));}public void testgetImagePart()throws Exception{//测试getImagePart方法assertEquals(2.7,Complex.getImagePart(2.7));assertEquals(-2.7,Complex.getImagePart(-2.7));assertEquals(5.0,Complex.getImagePart(5.0));assertEquals(0.0,Complex.getImagePart(0.0));}public void testComplexAdd()throws Exception{//测试ComplexAdd方法assertEquals("1.0+3.0i",com1.ComplexAdd(com2).toString());assertEquals("2.0+2.0i",com1.ComplexAdd(com3).toString());assertEquals("1.0+1.0i",com2.ComplexAdd(com3).toString());assertEquals("0.0",com1.ComplexAdd(com4).toString());}public void testComplexSub()throws Exception{//测试ComplexSub方法assertEquals("1.0+1.0i",com1.ComplexSub(com2).toString());assertEquals("0.0+2.0i",com1.ComplexSub(com3).toString());assertEquals("-1.0+1.0i",com2.ComplexSub(com3).toString());assertEquals("2.0+4.0i",com1.ComplexSub(com4).toString());}public void testComplexMulti()throws Exception{//测试ComplexMulti方法assertEquals("-2.0+1.0i",com1.ComplexMulti(com2).toString());assertEquals("1.0+2.0i",com1.ComplexMulti(com3).toString());assertEquals("0.0+1.0i",com2.ComplexMulti(com3).toString());assertEquals("3.0 -4.0i",com1.ComplexMulti(com4).toString());}public void testComplexDiv()throws Exception{//测试ComplexDiv方法assertEquals("1.0+2.0i",com1.ComplexDiv(com2).toString());assertEquals("2.0+1.0i",com1.ComplexDiv(com3).toString());assertEquals("1.0",com2.ComplexDiv(com3).toString());assertEquals("-0.8 -1.0i",com1.ComplexDiv(com4).toString());}
}
运行示例(此处由虚拟机中atom更改为windows中IDEA编写,因为方便运用junit单元测试)如下:
- 上传至码云:
- 重构
- 要求
- 实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
- 完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。
- 概念:重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
- 前提:不改变软件外部行为;来确保重构的安全
- 如何做到不改变软件外部行为?
- 重构后的代码要能通过单元测试
- 修改软件的四种动机:
- 增加新功能;
- 原有功能有BUG;
- 改善原有程序的结构;
- 优化原有系统的性能 。
- 臭味道(Bad Smell)的代码及其重构方法:
- 要求
- 完整的重构流程:
- 从版本控制系统代码库中Check out code
- 读懂代码(包括测试代码)
- 发现bad smell
- Refactoring
- 运行所有的Unit Tests
- 往代码库中Check in code
- 练习:
重构前代码:
class XiyoujiRenwu{float height,weight;String head,ear;void speak(String s){head ="歪着头";System.out.println(s);}}public class Example4_3{public static void main(String args[]){XiyoujiRenwu zhubajie,sunwukong;zhubajie = new XiyoujiRenwu();sunwukong = new XiyoujiRenwu();zhubajie.height = 1.80f;zhubajie.head = "大头";zhubajie.ear = "一双大耳朵";sunwukong.height = 1.62f;sunwukong.weight = 1000f;sunwukong.head = "秀发飘飘";System.out.println("zhubajie的身高"+zhubajie.height);System.out.println("zhubajie的头"+zhubajie.head);System.out.println("sunwukong的重量"+sunwukong.height);System.out.println("sunwukong.head"+sunwukong.head);zhubajie.speak("俺老猪我想娶媳妇");System.out.println("zhubajie现在的头:"+zhubajie.head);sunwukong.speak("老孙我重1000斤,我想骗猪八戒背我");System.out.println("sunwukong现在的头:"+sunwukong.head);}}
- 代码中存在的问题:
- 类命名方法未遵守驼峰规则
- 成员变量未封装
- 类中方法未封装
- 重构后代码
- Java密码学算法
- 要求
- 参考 http://www.cnblogs.com/rocedu/p/6683948.html,以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。
- 提交学习成果码云链接和代表性成果截图,要有学号水印。
- 安全问题可以归结为安全的三个属性(CIA金三角):
- 机密性(Confidentiality)
- 完整性(Integrity)
- 可用性(Availability)
- 密码学: 主要是研究保密通信和信息保密的学科, 包括信息保密传输和信息加密存储等。密码学包含密码编码学( Cryptography) 和密码分析学(Cryptanalyst) 两个分支。
- 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平台上进行用户身份鉴别的功能。
- 我与结对伙伴共同编写凯撒密码加解密算法代码如下:
- 初始代码:
- 初始代码:
- 要求
规范代码
代码为:
- Caesar.java
/*** @author Xueying Zhang 20175227* @date 2019/4/29 19:46.*/public class Caesar {public static void main(String args[]) throws Exception{String s=args[0];int key=Integer.parseInt(args[1]);Movement m=new Movement();int n=s.length();String es="";for(int i=0;i<s.length();i++){char c=s.charAt(i);if(c >= 'a' && c <= 'z'){es=m.realizeMove(n,c,key,'a','z');}else if (c >= 'A' && c <= 'Z'){es=m.realizeMove(n,c,key,'A','Z');}}System.out.println(es);}
}
- Movement.java
/*** @author Xueying Zhang 20175227* @date 2019/4/29 20:33.*/
public class Movement {String es="";public String realizeMove(int n,char c,int key,char a,char b){//移动key%26位c+=key%26;if(c<a) {c+=26;//向左超界}if(c>b) {c-=26;//向右超界}es+=c;return es;}
}
- 运行结果
实验中遇到的问题和解决过程
- 问题1:在实现第一步代码规范时,下面提示需要注释作者信息,我之前并没有设置过,于是出现了上文截图中系统默认的作者信息。
- 问题1解决办法:在IDEA中选
Settings
->Editor
->File and Code Templates
->Class
在程序框中输入:
/***@author xxx*@date ${DATE} ${TIME}.*/
再次重新新建class就能看见有作者信息注释了:
感悟和收获
- 通过本次实验,学习了如何使代码规范,代码重构,Java中密码算法的实现等内容。
- 我意识到平时自己的编程中有很多不规范的地方和缺少注释的地方,注意这些方面可以使自己的程序可读性更高。
- 实验二时,老师教授了很多关于编程的原则,使得我的思维从会编程到便好程,但是对于更改“bad smell”程序时,在不知道可以使用代码重构的情况下,这个任务会显得很麻烦,重复工作很多;在此次实验过后,有了效率更高的办法解决该问题,同时也感受到了IDEA功能的强大。
- 本次实验还get了码云仓库新技能,可以在仓库中添加成员,这对于结对编程来说很方便,一定程度上提高了结对编程效率。
代码托管
- 我的码云
- 我的小伙伴的码云
参考资料
- https://blog.csdn.net/weixin_42254058/article/details/81219931
转载于:https://www.cnblogs.com/zxy20175227/p/10790321.html
2018-2019-2 20175227张雪莹《Java程序设计》实验三 《敏捷开发与XP实践》相关推荐
- 20155229实验三 《Java面向对象程序设计实验三 敏捷开发与XP实践 》实验报告
实验题目 1.在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能. 2.下载搭档实验二的Complex代 ...
- 20165205 2017-2018-2 《Java程序设计》实验三 敏捷开发与XP实践
20165205 2017-2018-2 <Java程序设计>实验三 敏捷开发与XP实践 20165205 2017-2018-2 <Java程序设计>实验三 敏捷开发与XP实 ...
- 20155314 2016-2017-2 《Java程序设计》实验三 敏捷开发与XP实践
20155314 2016-2017-2 <Java程序设计>实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验知识点总结 (一)敏捷开发与XP 软件工程:把系统 ...
- Java课程实验报告 实验三 敏捷开发与XP实践
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1352 姓名:吕松鸿 学号:20135229 成绩: ...
- java for xp_20155328 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
一.编码标准 编程标准包含:具有说明性的名字.清晰的表达式.直截了当的控制流.可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性. 下面是没有最基本的缩进的一个程序: publi ...
- 20155328 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
一.编码标准 编程标准包含:具有说明性的名字.清晰的表达式.直截了当的控制流.可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性. 下面是没有最基本的缩进的一个程序: publi ...
- #20175201张驰 实验三 敏捷开发与XP实践
实验步骤 (一)敏捷开发与XP 一.敏捷开发与XP实践-1 ①实验要求: 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse ...
- 2018-2019-2 20175227张雪莹《Java程序设计》
2018-2019-2 20175227张雪莹<Java程序设计> 实验四 <Android程序设计> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学 ...
- 2018-2019-2 20175227张雪莹《Java程序设计》 实验二《Java面向对象程序设计》
2018-2019-2 20175227张雪莹<Java程序设计> 实验二<Java面向对象程序设计> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学 ...
最新文章
- 文件系统类型是ntfs无法确定卷版本和状态_硬盘写到一半时断电,文件系统里会发什么?...
- parse_str与http_build_query的使用
- Linux/Android多点触摸协议
- python中单引号,双引号,多引号区别
- 利用xsl和xml转html没有内容_P系列2代码页转pdf后篇
- 解决@vue/cli 创建项目是安装chromedriver时失败的问题
- Windows 10 Creators Update [ISO官方镜像][15063][1703][x64][x86][创意者更新正式版]
- matlab norm向量和矩阵的范数
- leetcode 131. 分割回文串(dp+回溯)
- linux网络编程之广播详细代码及文档说明 -,Linux网络编程之广播
- 硬件安全 (1) —— SHA-1算法在FPGA上的实现
- python访问共享文件夹_python – 通过linux机器打开Windows共享文件夹
- 容器云平台在传统企业落地的一些思考和探索
- Pytorch专题实战——激活函数(Activation Functions)
- SpringMVC 搭建遇到的坑
- ImageLoader的简单分析(四)
- mvc ajax验证登录页面,MVC 4 jquery Ajax调用返回登录页面html
- Flutter的SnackBar
- VTK笔记-组建vtkPolyData-四面体/五面体/六面体
- Assimp 裁剪编译 Android 库
热门文章
- EAS 客户端缓存清理
- 微信小程序 将手机号存入通讯录
- python 3d库_python的3d库
- win10系统用友软件服务器,win10系统怎么安装用友软件所需要的IIS的图文教程
- 【C++】关于回调函数
- [Untiy]贪吃蛇大作战(一)——开始界面
- J-Link下载烧录提示Failed to read back RAMCode for verification
- IDEA Maven配置了阿里云代理还是报错
- 2021-2027全球与中国户外建筑用大理石市场现状及未来发展趋势
- vsftpd2.3.4笑脸漏洞