2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

时间:2021-11-19 02:04:26

一、实验报告封面

课程:Java程序设计 班级:1752班 姓名:吕正宏 学号:20175213

指导教师:娄嘉鹏 实验日期:2019年4月29日

实验时间:13:45 - 21:00 实验序号:实验三

实验名称:敏捷开发与XP实践

实验内容:

1、XP基础

2、XP核心实践

3、相关工具

实验要求:

1、完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。

2、严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

二、实验内容与步骤

(一)编码标准

1.要求:参考 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));
}
}

2.实验步骤

首先是安装alibaba:

IDEA中的插件,我们通过Jetbrains官方仓库安装:打开 Settings ->Plugins -> Browse repositories...

在搜索框输入alibaba即可看到Alibaba Java Code Guidelines插件,点击Install进行安装,然后重启IDE生效:

2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

使用比较简单:在项目名称上单击右键,在弹出菜单上选择编码规约扫描:

2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

出现下图内容:

2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

不规范的地方,有中文提示并且定位到了行,alibaba把问题分为block/critical/major三个等级,有些规则可以一键修复。

经编码规约扫描后,下面是规范后的代码和规范说明:

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));
}
}
}

2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

然后是IDEA里的Code菜单,下面是Code菜单:

2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

我挑选的是Surround With(Ctrl+Alt+T)这种选项,其功能是使用if-else、try-catch、do-while等包装代码段;

2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

(二)敏捷开发与XP

1.要求:在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;

提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。

2.实验步骤

下面是我搭档的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() {
if (this.RealPart != 0 && this.ImagePart > 0) {
return this.RealPart + " + " + this.ImagePart + "i";
} else if (this.RealPart != 0 && this.ImagePart == 0) {
return String.valueOf(this.RealPart);
} else if (this.RealPart != 0 && this.ImagePart < 0) {
return this.RealPart + " - " + -this.ImagePart + "i";
} else if (this.RealPart == 0 && this.ImagePart != 0) {
return this.ImagePart + "i";
} else {
return "0";
}
} 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) {
return new Complex((this.ImagePart * a.ImagePart + this.RealPart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart), (this.RealPart * a.ImagePart - this.ImagePart * a.RealPart) / (a.ImagePart * a.ImagePart + a.RealPart * a.RealPart));
} }

2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

我对此Complex代码测试的方法有:Equals(),ToString(),ComplexAdd(),ComplexSub(),ComplexMulti(),ComplexDiv()

下面是对Complex的测试代码:

import junit.framework.TestCase;

public class ComplexTest extends TestCase {
Complex a = new Complex(3.0, 4.0);
Complex b = new Complex(-2.0, -3.0); public void testEquals() {
assertEquals(true, a.equals(a));
assertEquals(false, b.equals(a));
} public void testToString() {
assertEquals("3.0 + 4.0i", a.toString());
assertEquals("-2.0 - 3.0i", b.toString());
} public void testComplexAdd() {
assertEquals("1.0 + 1.0i",a.ComplexAdd(b).toString());
assertEquals("-4.0 - 6.0i",b.ComplexAdd(b).toString());
} public void testComplexSub() {
assertEquals("5.0 + 7.0i",a.ComplexSub(b).toString());
assertEquals("0",b.ComplexSub(b).toString());
} public void testComplexMulti() {
assertEquals("-7.0 + 24.0i",a.ComplexMulti(a).toString());
assertEquals("6.0 - 17.0i",a.ComplexMulti(b).toString());
} public void testComplexDiv() {
assertEquals("1.0",a.ComplexDiv(a).toString());
}
}

(三)重构

1.要求:参考http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA

完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。

2.实验步骤

重构的概念:

重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。

重构中一个非常关键的前提就是“不改变软件外部行为”,它保证了我们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。如何保证不改变软件外部行为?重构后的代码要能通过单元测试。如何使其更加易于阅读、易于维护和易于变更 ?设计模式给出了重构的目标。

我们要修改软件,万变不离其宗,无非就是四种动机:

  • 增加新功能;

  • 原有功能有BUG;

  • 改善原有程序的结构;

  • 优化原有系统的性能 。

第一种和第二种动机,都是源于客户的功能需求,而第四种是源于客户的非功能需求。软件的外部质量,其衡量的标准就是客户对软件功能需求与非功能需求的满意度。它涉及到一个企业、一个软件的信誉度与生命力,因此为所有软件企业所高度重视。要提高软件内部质量,毫无疑问就是软件修改的第三个动机:改善原有程序的结构。它的价值是隐性的,并不体现在某一次或两次开发中,而是逐渐体现在日后长期维护的软件过程中。

而一个完整的重构流程包括:

  • 从版本控制系统代码库中Check out code

  • 读懂代码(包括测试代码)

  • 发现bad smell

  • efactoring

  • 运行所有的Unit Tests

  • 往代码库中Check in code

下面就是下载搭档的代码,并进行三项重构:

搭档的代码:

class A {
float computer(float x,float y) {
return x+y;
}
public int g(int x,int y) {
return x+y;
}
}
class B extends A {
float computer (float x,float y,double z) {
return x-y;
}
}
public class Example5_5 {
public static void main(String args[]) {
B b=new B();
double result=b.computer(8,9); //b调用重写的方法
System.out.println(result);
int m=b.g(12,8); //b调用继承的方法
System.out.println(m);
}
}

2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

针对编码规约扫描提出的问题一一解决。

  • 问题一:

    2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

  • 问题二:

    2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

  • 问题三:

    2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

  • 问题四:

    2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

  • 修改后代码截图:

2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

(四)Java密码学算法

要求:

-机密性(Confidentiality)

-完整性(Integrity)

-可用性(Availability)

  • (4)密码学: 主要是研究保密通信和信息保密的学科, 包括信息保密传输和信息加密存储等。密码学包含密码编码学( Cryptography) 和密码分析学(Cryptanalyst) 两个分支。

  • (5)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平台上进行用户身份鉴别的功能。

实验代码:

/**
* @author LZH
* @date 2019/05/05
*/
public class Caesar {
public static void main(String args[]) {
String s=args[0];
int key=Integer.parseInt(args[1]);
M m=new M();
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);
}
}
class M {
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;
}
}

运行截图

2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告

(五)实验体会与总结

  • 本次实验,代码的规范让我受益匪浅,规范后的代码让人看着很一目了然。

  • 本次实验加强了对代码测试的理解,拓宽了视野。

2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告的更多相关文章

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

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

  2. 20175212童皓桢 实验三敏捷开发与XP实践实验报告

    20175212童皓桢 实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 一.Code菜单功能的研究 Move Line/statement Down/Up:将某 ...

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

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

  4. 20162311 实验三 敏捷开发与XP实践 实验报告

    20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...

  5. 20165308实验三 敏捷开发与XP实践实验报告

    实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...

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

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

  7. 20155220 实验三 敏捷开发与XP实践 实验报告

    20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  8. &num; 20155224 实验三 敏捷开发与XP实践 实验报告

    20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  9. 20155226 实验三 敏捷开发与XP实践 实验报告

    20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  10. 20155311 实验三 敏捷开发与XP实践 实验报告

    20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

随机推荐

  1. atoi&lpar;&rpar;函数

    原型:int  atoi (const  char  *nptr) 用法:#include  <stdlib.h> 功能:将字符串转换成整型数:atoi()会扫描参数nptr字符串,跳过前 ...

  2. Eclipse中Program arguments和VM arguments的说明

    在运行程序的时候,我们一般可以进行run configuration的配置,就比如tomcat源码导入eclipse之后,我们可以发现其运行配置如下: 其中Program arguments配置的元素 ...

  3. PHP 生成指定大小随机图片

    PHP 生成指定大小随机图片 <?php $image_width = 100; $image_height = 100; $image_str = ''; if (isset($_GET['w ...

  4. Firefox便携版

    安装firefox后默认配置文件在C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox 可以在快捷方式里设置不同的配置文件,但是要注意参数的含义 ...

  5. Lrc歌词批量下载助手 MP3歌词批量下载助手

    Lrc歌词批量下载助手  MP3歌词批量下载助手   易歌词的服务器已经挂掉,各个主流播放器已不提供明确的下载Lrc服务,当上G的MP3文件遇上苦逼的播放器,二缺就诞生了!本软件就是在这种背景下诞生的 ...

  6. windows下的mongodb下载安装

    1.首先从官网https://www.mongodb.org/下载mongodb的安装包,本人下载的是mongoDB3.2版本的.msi的文件,然后双击安装即可 2.点击next 3.compelte ...

  7. mysql数据迁移

    使用mysqldump mysqldump -host=host1 -uroot -p123456 -opt sourceDb| mysql -host=host2 -uroot -p123 -C t ...

  8. windows平台安装并使用MongoDB

    下载并安装MongoDB,我的安装路径:D:\Program_Files\MongoDB 创建数据库目录,我的目录:D:\mongodb\data\db 命令行下运行MongoDB服务器: 在命令行窗 ...

  9. Spring AOP 五大通知类型

    1.前置通知 在目标方法执行之前执行执行的通知. 前置通知方法,可以没有参数,也可以额外接收一个JoinPoint,Spring会自动将该对象传入,代表当前的连接点,通过该对象可以获取目标对象 和 目 ...

  10. 评价指标整理:Precision&comma; Recall&comma; F-score&comma; TPR&comma; FPR&comma; TNR&comma; FNR&comma; AUC&comma; Accuracy

    针对二分类的结果,对模型进行评估,通常有以下几种方法: Precision.Recall.F-score(F1-measure)TPR.FPR.TNR.FNR.AUCAccuracy   真实结果 1 ...