实验内容与要求

1.XP基础

极限编程(Extreme Programming,XP)是一种全新而快捷的软件开发方法。XP团队使用现场客户、特殊计划方法和持续测试来提供快速的反馈和全面的交流:

  • XP是以开发符合客户需要的软件为目标而产生的一种方法论
  • XP是一种以实践为基础的软件工程过程和思想
  • XP认为代码质量的重要程度超出人们一般所认为的程度
  • XP特别适合于小型的有责任心的、自觉自励的团队开发需求不确定或者迅速变化的软件

    XP软件开发的基石是XP的活动,包括:编码、测试、倾听、设计。

2.XP核心实践

3.相关工具

敏捷开发与XP实践-1

实验目的与要求:

public class CodeStandard {
public static void main(String [] args){
StringBuffer buffer = new StringBuffer();
buffer.append('S');
buf![](https://img2018.cnblogs.com/blog/1272669/201905/1272669-20190502160118003-975536005.png) 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 push
  • git 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

实验目的与要求:

实验步骤:

  • 获取密钥生成器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实践》 实验报告的更多相关文章

  1. 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...

  2. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  3. 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  4. 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告

    2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...

  5. 20145314郑凯杰 《Java程序设计》实验三 敏捷开发与XP实践实验报告

    20145314郑凯杰 <Java程序设计>实验二 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...

  6. 20155328 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    一.编码标准 编程标准包含:具有说明性的名字.清晰的表达式.直截了当的控制流.可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性. 下面是没有最基本的缩进的一个程序: publi ...

  7. 20145213《Java程序设计》实验三敏捷开发与XP实践

    20145213<Java程序设计>实验三敏捷开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 1.敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法 ...

  8. JAVA课程实验报告 实验三 敏捷开发与XP实践

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  9. 20145225《Java程序设计》 实验三 "敏捷开发与XP实践"

    20145225<Java程序设计> 实验三 "敏捷开发与XP实践" 实验报告 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 git 上 ...

  10. 20155324 《Java程序设计》实验三 敏捷开发与XP实践

    20155324 <Java程序设计>实验三 敏捷开发与XP实践 实验内容 XP基础 1.XP核心实践 2.相关工具 实验步骤 敏捷开发与XP 1.敏捷开发(Agile Developme ...

随机推荐

  1. php利用webuploader实现超大文件分片上传、断点续传

    PHP用超级全局变量数组$_FILES来记录文件上传相关信息的. 1.file_uploads=on/off 是否允许通过http方式上传文件 2.max_execution_time=30 允许脚本 ...

  2. plupload上传整个文件夹

    大容量文件上传早已不是什么新鲜问题,在.net 2.0时代,HTML5也还没有问世,要实现这样的功能,要么是改web.config,要么是用flash,要么是用一些第三方控件,然而这些解决问题的方法要 ...

  3. The Boot Process at a Glance x86/x64系统启动过程解析

    哥又来干体力活了.人肉翻译一下: The Boot Process at a Glance This section explains the boot process in sufficient d ...

  4. python 查看安装的库的路径(找site-packages)

    import sysprint(sys.path) orwhich pythonwhich python3

  5. 2019 ICPC 沈阳网络赛 J. Ghh Matin

    Problem Similar to the strange ability of Martin (the hero of Martin Martin), Ghh will random occurr ...

  6. centos7 安装 Mysql 5.7.27,详细完整教程

    1. 下载 MySQL yum包 wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm   2.安装MySQL源 ...

  7. Mac下不能成功打开uiautomatorviewer的问题解决

    在终端运行uiautomatorviewer之后出现下面的错误,检查以后发现环境变量也配置好了 Error: Could not create the Java Virtual Machine. Er ...

  8. Java 程序流程语句

    顺序结构 什么是顺序结构:一行一行的执行代码 选择结构 if 什么是选择结构:通过判断条件来做选择的语句,我们称为选择语句或分支语句 定义方式:if语句使用boolean表达式或boolean值作为选 ...

  9. js修改Switchery复选框的状态

    声明一个switchery插件,绑定到一个input上 js代码 var mySwitch = new Switchery($('#blacklist')[0], { size:"small ...

  10. latex运算符

    一些小的运算符,可以在数学模式下直接输入,但是有一些运算符需要用控制序列生成: