实验三《敏捷开发与XP实践》

实验报告封面

课程:Java程序设计 班级:1752班 姓名:曾祥杰 学号:20175221

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

实验时间:13:45 - 15:25 实验序号:21

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

一.实验内容

1. XP基础

2. XP核心实践

3. 相关工具

二.实验步骤

  • 第一部分:

  • 要求:参考 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中安装alibaba插件, Settings → Plugins → Marketplace ,然后在搜素栏输入  Alibaba ,即可看到 Alibaba Java Code Guidelines 插件,点击Install进行安装,然后重启IDE生效。
  • 使用比较简单:在项目名称上单击右键,在弹出菜单上选择“编码规约扫描
  • 随后即可
  • 随后即可根据报错内容进行规范修改
  • 我们可以使用 Code → Reformat Code (或 Ctrl + Alt +L )规范缩进,规范后的代码如下:
  • code菜单中,我感觉最好用的功能就是 Move Statement Up 和 Move Statement Down ,整行移动简直不要太好玩(划掉),太方便!
  • 第二部分:

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

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

  • 首先将搭档拉入自己的项目中:管理→仓库成员管理→管理员→添加仓库成员→邀请用户
  • 产生链接
  • 邀请成功
  • 下载搭档代码
 public class Complex {
// 定义属性并生成getter,setter
double RealPart;
double ImagePart; // 定义构造函数
public Complex(){
}
public Complex(double R,double I){
RealPart=R;
ImagePart=I;
} public static double RealPart(double v) {
return 1;
} public static double ImagePart(double v) {
return 0;
} //Override Object
public boolean equals(Complex m){
if(m.RealPart==this.RealPart&&m.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));
}
}
  • 测试代码
 import junit.framework.TestCase;
import org.junit.Test; public class ComplexTest extends TestCase {
Complex a = new Complex(0.0, 2.0);
Complex b = new Complex(-1.0, -1.0);
Complex c = new Complex(1.0,2.0);
@Test
public void testgetRealPart() throws Exception {
assertEquals(1.0, Complex.RealPart(0.0));
assertEquals(1.0, Complex.RealPart(-1.0));
assertEquals(1.0, Complex.RealPart(1.0));
}
@Test
public void testgetImagePart() throws Exception {
assertEquals(0.0, Complex.ImagePart(2.0));
assertEquals(0.0, Complex.ImagePart(-1.0));
assertEquals(0.0, Complex.ImagePart(2.0));
}
@Test
public void testComplexAdd() throws Exception {
assertEquals("-1.0 + 1.0i", a.ComplexAdd(b).toString());
assertEquals("1.0 + 4.0i", a.ComplexAdd(c).toString());
assertEquals("1.0i", b.ComplexAdd(c).toString());
}
@Test
public void testComplexSub() throws Exception {
assertEquals("1.0 + 3.0i", a.ComplexSub(b).toString());
assertEquals("-1.0", a.ComplexSub(c).toString());
assertEquals("-2.0 - 3.0i", b.ComplexSub(c).toString());
}
@Test
public void testComplexMulti() throws Exception {
assertEquals("2.0 - 2.0i", a.ComplexMulti(b).toString());
assertEquals("-4.0 + 2.0i", a.ComplexMulti(c).toString());
assertEquals("1.0 - 3.0i", b.ComplexMulti(c).toString());
}
@Test
public void testComplexComplexDiv() throws Exception {
assertEquals("-1.0 + 1.0i", a.ComplexDiv(b).toString());
assertEquals("0.8 - 0.4i", a.ComplexDiv(c).toString());
assertEquals("-0.6 - 0.2i", b.ComplexDiv(c).toString());
}
}
  • 测试截图:
  • 然后虚拟机里 mkdir 20175221zxj 新建文件夹以方便区分, git clone 搭档码云链接 ,将代码推到搭档码云:
  • 推送成功截图
  • 第三部分:

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

  • 我们先看看重构的概念:重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
  • 重构中一个非常关键的前提就是“不改变软件外部行为”,它保证了我们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。
  • 如何保证不改变软件外部行为?重构后的代码要能通过单元测试。
  • 如何使其更加易于阅读、易于维护和易于变更 ?设计模式给出了重构的目标。
  • -修改软件的四种动机:
    ①增加新功能;
    ②原有功能有BUG;
    ③改善原有程序的结构;
    ④优化原有系统的性能 。
  • -需要重构的地方:
    ①代码重复;
    ②方法过长;
    ③参数列过长;
    ④条件逻辑过度复杂;
    ⑤分支语句。
  • -一个完整的重构流程包括
    ①从版本控制系统代码库中Check out code;
    ②读懂代码(包括测试代码);
    ③发现bad smell;
    ④Refactoring;
    ⑤运行所有的Unit Tests;
    ⑥往代码库中Check in code。
  • 常用使用方法:
  • refactor->Rename 给类、包、方法、变量改名字
  • refactor->Encapsulate Field 封装
  • Source->Generate toString() toString()方法
  • refactor->Extract Method 提炼出重复的代码
  • 我继续以搭档的 Complex 代码为例进行重构

  • 代码中存在的问题:

  • 许多地方命名时未采用驼峰形式
  • 类未添加创建者信息
  • 类方法等未遵从javadoc规范
  • 重构后代码如下:
 /**
* @author 20175221 zxj
* @date 2019/5/1
*/
@SuppressWarnings("ALL")
public class Complex { double realpart;
double imagepart; public Complex() {
} public Complex(double r, double i) {
realpart = r;
imagepart = i;
} public static double realpart(double v) {
return ;
} public static double imagepart(double v) {
return ;
} public boolean equals(Complex m) {
if (m.realpart == this.realpart && m.imagepart == this.imagepart) {
return true;
} else {
return false;
}
} @Override
public String toString() {
if (this.realpart != && this.imagepart > ) {
return this.realpart + " + " + this.imagepart + "i";
} else if (this.realpart != && this.imagepart == ) {
return String.valueOf(this.realpart);
} else if (this.realpart != && this.imagepart < ) {
return this.realpart + " - " + -this.imagepart + "i";
} else if (this.realpart == && this.imagepart != ) {
return this.imagepart + "i";
} else {
return "";
}
} 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));
}
}

第四部分:

  • 参考 http://www.cnblogs.com/rocedu/p/6683948.html,以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。
  • 提交学习成果码云链接和代表性成果截图,要有学号水印。

密码学包括密码编码学(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平台上进行用户身份鉴别的功能。
  • 我和我的伙伴使用java语言编写了凯撒密码:
  • 编码规范扫描,发现以上错误,开始进行重构,并运行:
  • 代码如下:
  •  import java.util.Scanner;
    
     /**
    * @author 20175221Zxj
    * @date 2019/5/2
    */
    public class Caeser {
    /**
    定义密钥字母表
    */
    private String alphabet;
    /**
    定义密钥 key
    */
    private int key;
    public Caeser(String alphabet, int key) {
    // 根据不同的字母表和不同的密钥生成一个新的凯撒算法,达到通用的目的
    super();
    this.alphabet = alphabet;
    this.key = key;
    }
    public String encode(String from) {
    //凯撒加密算法,传入明文字符串,返回一个密文字符串
    String to = "";
    for (int i = ; i < from.length(); i++) {
    to += alphabet.charAt((alphabet.indexOf(from.charAt(i))+key)%alphabet.length());
    }
    return to;
    } public static void main(String[] args) {
    Caeser caeser = new Caeser("abcdefghijklmnopqrstuvwxyz", );
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入要加密的字符串");
    //输入字符串
    String str =scanner.nextLine();
    //调用加密方法进行加密
    String result = caeser.encode(str);
    // 得到结果
    System.out.print(result);
    }
    }

实验中遇到的问题

问题1:由于IDEA与老师的版本不一,下载Alibaba找了好一会

问题1解决方案:我下载的IDEA版本 Plugins 后没有 Browse repositories... ,这里应该是 Marketplace ,然后在搜索框输入 alibaba 即可看到插件。

实验体会:

  • 这次的实验对我来说还是很有难度的,虽然每一步的教程都有,但由于老师给的教程版本和我的不一样,期间无论是下载东西还是编写代码,都还是出现了很多难题。
  • 这一次的实验需要将搭档拉入自己的码云项目,在和伙伴的合作下完成,所以需要两个人配合默契,才能使这次实验完成得高效。
  • 通过这次的实验,我学到了如何使代码规范,将代码上传到搭档的码云上,怎样让代码重构,Java中密码算法的实现等内容,收获颇丰。也希望以后的实验也可以做得更好。
步骤 耗时 百分比
需求分析 9min 5%
设计 18min 10%
代码实现 90min 50%
测试 9min 5%
分析总结 54min 30%
 
 
 
 

20175221曾祥杰 实验三《敏捷开发与XP实践》的更多相关文章

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

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

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

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

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

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

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

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

  5. 20145215实验三 敏捷开发与XP实践

    20145215实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软 ...

  6. 20145325张梓靖 实验三 "敏捷开发与XP实践"

    20145325张梓靖 实验三 "敏捷开发与XP实践" 程序设计过程 实验内容 使用 git 上传代码 git上传中遇到的问题 使用 git 相互更改代码 实现代码的重构 git ...

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

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

  8. 2018-2019-20175205 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告

    2018-2019-20175205 实验三敏捷开发与XP实践<Java开发环境的熟悉>实验报告 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>&l ...

  9. 20175314 实验三 敏捷开发与XP实践

    20175314 实验二 Java面向对象程序设计 一.实验内容 XP基础 XP核心实践 相关工具 二.实验步骤 (一)代码格式化 创建"175314.exp3"项目,在该项目下创 ...

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

    一.实验三 敏捷开发与XP实践-1 1.实验要求 -实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成I ...

随机推荐

  1. Mybatis-学习笔记(4)1对1、1对多、多对多

    1.1对1 有2种方式对内嵌Bean设值: 1>关联查询就一条语句.使用association关键字,直接将嵌套对象的映射表的字段赋值内嵌对象. <association property ...

  2. Javascript的是三种字符串连接方式

    第一种:用连接符“+”连接字符串 str="a"; str+="b"; 这种方法相对以下两种,最便捷快速.建议100字符以下的连接使用这种连接方式. 第二种:以 ...

  3. C#.NET、Power BI、数据挖掘

    阅读目录 1.采集目目标特点与分析 2.方案第一版-Low到爆,别笑话 3.碰壁后的第二版方案 4.最终方案第三版 5.总结 说起采集,其实我是个外行,以前拔过阿里巴巴的客户数据,在我博客的文章:C# ...

  4. 为ASP.NET按钮(Button)添加确认对话框

    http://www.cnblogs.com/blodfox777/articles/1261303.html Button有两个点击事件: onclick 触发服务端事件,脚本为c#或VB.NET ...

  5. 【问题解决方案】Centos操作文件vim-No write since last change (add ! to override)

    参考链接 CSDN:Centos 7 操作文件No write since last change (add ! to override) 问题描述: :q或者:wq退出失败,显示如No write ...

  6. 解决stanfordnlp一直运行不报错也没有结果

    最近学习stanfordnlp,当运行程序时,发现程序一直没有反应,上网查询说是内存不够,但是本地电脑是8g内存.后来重新下载了所需文件,问题解决.

  7. Excel批量插入的SQL Server

    首先新建一个WPF的项目,名为ExcelToServerDemo 到Nuget去安装NPOI的Nuget包,点击安装即可,会自动引用项目. 新建一个Student的表格,有名字,年龄,性别,地址,以及 ...

  8. 解决arcgis10.5直连postgresql报错

    软件版本: arcgis10.5 postgresql9.5.9 最近使用desktop直连postgresql,已经拷贝了类库文件到desktop及pgsql配置完成的前提下,但还是报以下错误: 解 ...

  9. 自己制作 Android Vector Asset 矢量图

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/c5138891/article/deta ...

  10. verilog中的timescale

    `timescale是Verilog HDL 中的一种时间尺度预编译指令,它用来定义模块的仿真 时的时间单位和时间精度.格式如下: `timescale  仿真时间单位/时间精度 注意:,不能为其它的 ...