20175316 盛茂淞 2018-2019-2 《Java程序设计》实验三《敏捷开发与XP实践》 实验报告
实验内容与要求
1.XP基础
极限编程(Extreme Programming,XP)是一种全新而快捷的软件开发方法。XP团队使用现场客户、特殊计划方法和持续测试来提供快速的反馈和全面的交流:
- XP是以开发符合客户需要的软件为目标而产生的一种方法论
- XP是一种以实践为基础的软件工程过程和思想
- XP认为代码质量的重要程度超出人们一般所认为的程度
- XP特别适合于小型的有责任心的、自觉自励的团队开发需求不确定或者迅速变化的软件
XP软件开发的基石是XP的活动,包括:编码、测试、倾听、设计。
2.XP核心实践
3.相关工具
敏捷开发与XP实践-1
实验目的与要求:
- 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');
buf
fer.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));
}
}
实验步骤
编程标准使代码更容易阅读和理解。编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。
Settings ->Plugins -> Browse repositories...——安装alibaba在项目名称上单击右键,在弹出菜单上选择
编码规约扫描

不规范的地方,有中文提示并且定位到了行,alibaba把问题分为block/critical/major三个等级。根据报错提示,进行了修改。
Code->Reformate Code

重新格式化之后

我发现
Code->Surround with...功能很好用,例如我们想改变自己代码的部分逻辑结构,加个if语句,直接用这个功能就好了,先选择范围

Surround后

敏捷开发与XP实践-2
实验目的与要求:
- 在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;
- 提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。
实验内容
- 搭档代码
public class Complex {
double RealPart;
double ImagePart;
public Complex(){}
public Complex(double R,double I){
RealPart=R;
ImagePart=I;
}
public boolean equals(Complex a){
if(a.RealPart==this.RealPart&&a.ImagePart==this.ImagePart){
return true;
}
else {
return false;
}
}
public String toString(){
return "Complex{"+RealPart+","+ImagePart+"}";
}
}
- 加入不少于三个JUnit单元测试用例,并且测试成功
Complex:
public class Complex {
double RealPart;
double ImagePart;
public Complex(){}
public Complex(double R,double I){
RealPart=R;
ImagePart=I;
}
public boolean equals(Complex a){
if(a.RealPart==this.RealPart&&a.ImagePart==this.ImagePart){
return true;
}
else {
return false;
}
}
public String toString(){
return "Complex{"+RealPart+","+ImagePart+"}";
}
Complex ComplexAdd(Complex a) {
return new Complex(this.RealPart + a.RealPart,this.ImagePart + a.ImagePart);
}
Complex ComplexSub(Complex a){
return new Complex(this.RealPart - a.RealPart,this.ImagePart - a.ImagePart);
}
Complex ComplexMulti(Complex a){
return new Complex(this.RealPart*a.RealPart-this.ImagePart*a.ImagePart,
this.ImagePart*a.RealPart+this.RealPart*a.ImagePart);
}
Complex ComplexDiv(Complex a){
double change = a.RealPart*a.RealPart + a.ImagePart*a.ImagePart;
Complex b = new Complex(a.RealPart / change, - a.ImagePart / change);
return this.ComplexMulti(b);
}
}
ComplexTest:
public class Complex {
double RealPart;
double ImagePart;
public Complex(){}
public Complex(double R,double I){
RealPart=R;
ImagePart=I;
}
public boolean equals(Complex a){
if(a.RealPart==this.RealPart&&a.ImagePart==this.ImagePart){
return true;
}
else {
return false;
}
}
public String toString(){
return "Complex{"+RealPart+","+ImagePart+"}";
}
Complex ComplexAdd(Complex a) {
return new Complex(this.RealPart + a.RealPart,this.ImagePart + a.ImagePart);
}
Complex ComplexSub(Complex a){
return new Complex(this.RealPart - a.RealPart,this.ImagePart - a.ImagePart);
}
Complex ComplexMulti(Complex a){
return new Complex(this.RealPart*a.RealPart-this.ImagePart*a.ImagePart,
this.ImagePart*a.RealPart+this.RealPart*a.ImagePart);
}
Complex ComplexDiv(Complex a){
double change = a.RealPart*a.RealPart + a.ImagePart*a.ImagePart;
Complex b = new Complex(a.RealPart / change, - a.ImagePart / change);
return this.ComplexMulti(b);
}
}
上传码云
git pushgit log


敏捷开发与XP实践-3
实验目的与要求:
- http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA
- 完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。
实验内容及结果截图:
重构方法:
refactor->Rename给类、包、方法、变量改名字refactor->Encapsulate Field封装Source->Generate toString()toString()方法refactor->Extract Method提炼出重复的代码
重构后代码
class xmnew {
private int num;
private String name;
private int java;
public int getNum() {
return num;
}
@Override
public String toString() {
return "xmnew{" +
"num=" + num +
", name='" + name + '\'' +
", java=" + java +
'}';
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getJava() {
return java;
}
public void setJava(int java) {
this.java = java;
}
}
public class xmnewTest {
public static void main(String[] args) {
studentdark student = new studentdark();
student.setName("caoge");
student.setNum(5312);
student.setJava(94);
System.out.println("学号为"+ student.getNum() +",姓名为"+ student.getName() +"java成绩为"+ student.getJava());
}
}
运行截图

敏捷开发与XP实践-4
实验目的与要求:
- 参考 http://www.cnblogs.com/rocedu/p/6683948.html,以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。
- 提交学习成果码云链接和代表性成果截图,要有学号水印。
实验步骤:
- 获取密钥生成器
KeyGenerator kg=KeyGenerator.getInstance("DESede"); - Java中KeyGenerator类中提供了创建对称密钥的方法。KeyGenerator类预定义了一个静态方法getInstance( ),方法getInstance( )的参数为字符串类型,指定加密算法的名称。
- 初始化密钥生成器kg.init(168);该步骤一般指定密钥的长度。我们写的是“DESede”,则可以是112或168位,其中112位有效。
- 生成密钥SecretKey k=kg.generateKey( );密钥可用于以后的加密和解密。
- 通过对象序列化方式将密钥保存在文件中
FileOutputStream f=new FileOutputStream("key1.dat");
ObjectOutputStream b=new ObjectOutputStream(f);
b.writeObject(k);
- ObjectOutputStream类中提供的writeObject方法可以将对象序列化,以流的方式进行处理。这里将文件输出流作为参数传递给ObjectOutputStream类的构造器,这样创建好的密钥将保存在文件key1.data中。
- 从文件中获取密钥
FileInputStream f=new FileInputStream("key1.dat");
ObjectInputStream b=new ObjectInputStream(f);
Key k=(Key)b.readObject( );
- 创建密码器
Cipher cp=Cipher.getInstance("DESede");
- KeyGenerCipher类是一个工厂类,它不是通过new方法创建对象,而是通过其中预定义的一个静态方法getInstance( )获取Cipher对象。getInstance( )方法的参数是一个字符串,该字符串给出Cipher对象应该执行哪些操作。
- 初始化密码器
cp.init(Cipher.ENCRYPT_MODE, k);该方法包括两个参数,第一个参数指定密码器准备进行加密还是解密,若传入Cipher.ENCRYPT_MODE则进入加密模式。第二个参数则传入加密或解密所使用的密钥,即第1步从文件中读取的密钥对象k。 - 获取等待加密的明文
String s="Hello World!";
byte ptext[]=s.getBytes("UTF8");
- 执行加密
byte ctext[]=cp.doFinal(ptext);
- 处理加密结果
FileOutputStream f2=new FileOutputStream("SEnc.dat");
f2.write(ctext);
- 这里将加密结果保存在文件Senc.dat中。
加密结果:

码云链接
https://gitee.com/SANFENs/Teamwork
实验体会与总结
- java课程已过去一半,但是java实验还是依然的灵活,让我们可以在课下使用课余时间来学习完成,这仍然是其他实验课没法比拟的,因此我们需要把握住这种学习的机会,将java课学好,让学习的过程更有意义。
20175316 盛茂淞 2018-2019-2 《Java程序设计》实验三《敏捷开发与XP实践》 实验报告的更多相关文章
- 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...
- 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 ...
- 20145314郑凯杰 《Java程序设计》实验三 敏捷开发与XP实践实验报告
20145314郑凯杰 <Java程序设计>实验二 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...
- 20155328 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
一.编码标准 编程标准包含:具有说明性的名字.清晰的表达式.直截了当的控制流.可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性. 下面是没有最基本的缩进的一个程序: publi ...
- 20145213《Java程序设计》实验三敏捷开发与XP实践
20145213<Java程序设计>实验三敏捷开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 1.敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法 ...
- JAVA课程实验报告 实验三 敏捷开发与XP实践
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
- 20145225《Java程序设计》 实验三 "敏捷开发与XP实践"
20145225<Java程序设计> 实验三 "敏捷开发与XP实践" 实验报告 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 git 上 ...
- 20155324 《Java程序设计》实验三 敏捷开发与XP实践
20155324 <Java程序设计>实验三 敏捷开发与XP实践 实验内容 XP基础 1.XP核心实践 2.相关工具 实验步骤 敏捷开发与XP 1.敏捷开发(Agile Developme ...
随机推荐
- Codevs 1227 方格取数 2(费用流)
1227 方格取数 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 查看运行结果 题目描述 Description 给出一个n*n的矩阵,每一格有一个非负整数 ...
- 爬虫(十四):scrapy下载中间件
下载器中间件是介于Scrapy的request/response处理的钩子框架,是用于全局修改Scrapy request和response的一个轻量.底层的系统. 激活Downloader Midd ...
- 数据结构实验之查找三:树的种类统计(SDUT 3375)
C: #include <stdio.h> #include <stdlib.h> #include <string.h> struct node { char d ...
- TCP四次握手断开连接
建立连接非常重要,它是数据正确传输的前提:断开连接同样重要,它让计算机释放不再使用的资源.如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪 ...
- Vue自定义日历组件
今天给大家介绍Vue的日历组件,可自定义样式.日历类型及支持扩展,可自定义事件回调.Props数据传输. 线上demo效果 示例 Template: <Calendar :sundayStart ...
- python学习之模块:xlsxwriter
1.安装xlsxwriter模块 pip install xlsxwriter 2.使用 import xlsxwriter workbook = xlsxwriter.Workbook('hello ...
- php手记之05-tp5模型操作数据库
# 实例化模型 // $user = new User; // $user1 = new User(); // $user2 = model('user'); // 添加一条数据 # 方法1 // $ ...
- Mysql --- Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
我使用的5.5的mysql数据库会报这个错, 换成5.7的就可以了
- android DownloadManager: java.lang.IllegalArgumentException: Not a file URI: content://
DownloadManager 使用Uri指定下载路径Bug 使用DownloadManager 下载文件 通常写法: DownloadManager dm = (DownloadManager) g ...
- window server 2008 iis7+php安装配置
安装环境支持 Microsoft Visual C++ 2012 net framework 4.5 php配置 precision = 20 serialize_precision = 100 ...