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

一、实验内容

1.XP基础

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

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

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

2.XP核心实践
3.相关工具

二、在IDEA中使用工具格式化代码

实验内容:安装alibaba 插件,解决代码中的规范问题。在IDEA中使用工具把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。提交截图,加上自己学号水印。

  1. public class CodeStandard {
  2. public static void main(String [] args){
  3. StringBuffer buffer = new StringBuffer();
  4. buffer.append('S');
  5. buffer.append("tringBuffer");
  6. System.out.println(buffer.charAt(1));
  7. System.out.println(buffer.capacity());
  8. System.out.println(buffer.indexOf("tring"));
  9. System.out.println("buffer = " + buffer.toString());
  10. if(buffer.capacity()<20)
  11. buffer.append("1234567");
  12. for(int i=0; i<buffer.length();i++)
  13. System.out.println(buffer.charAt(i));
  14. }
  15. }

编程标准使代码更容易阅读和理解。编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。

  • Settings ->Plugins -> Browse repositories...安装alibaba
  • 在项目名称上单击右键,在弹出菜单上选择编码规约扫描

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

  • Code->Rename重写方法
  • Code->Comment with Line Comment 此行改成注释
  • Code->Comment with Block Comment此行添加注释,这也是我比较喜欢的一个快捷键了(Ctrl+Shift+\)

三、下载搭档代码并添加测试用例

实验内容:在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例。

  • 首先在码云中将我的搭档加入了我的项目
  • mkdir 5312Anna新建文件夹以方便区分git clone 搭档码云链接连接到搭档码云,这样就可以畅快寻找搭档代码了
  • 下载搭档Com.java,编写ComTest.java
  1. import junit.framework.TestCase;
  2. import org.junit.Test;
  3. public class ComTest extends TestCase {
  4. Com c1 = new Com(1,1);
  5. Com c2 = new Com(0,-1);
  6. Com c3 = new Com(-1,1);
  7. @Test
  8. public void testgetRealPart() throws Exception {
  9. assertEquals(1.1, new Com().setA(1.1));
  10. assertEquals(0.-1, new Com().setA(0.-1));
  11. assertEquals(-1.1, new Com().setA(-1.1));
  12. }
  13. @Test
  14. public void testgetImagePart() throws Exception {
  15. assertEquals(1.1, new Com().setB(1.1));
  16. assertEquals(0.-1, new Com().setB(0.-1));
  17. assertEquals(-1.1, new Com().setB(-1.1));
  18. }
  19. @Test
  20. public void testComAdd() throws Exception {
  21. assertEquals("1.0", c1.ComAdd(c2).toString());
  22. assertEquals("0.0+2.0i", c1.ComAdd(c3).toString());
  23. assertEquals("-1.0", c2.ComAdd(c3).toString());
  24. }
  25. @Test
  26. public void testComSub() throws Exception {
  27. assertEquals("-1.0 -2.0i", c1.ComMinus(c2).toString());
  28. assertEquals("-2.0", c1.ComMinus(c3).toString());
  29. assertEquals("-1.0+2.0i", c2.ComMinus(c3).toString());
  30. }
  31. }

  • git push
  • git log ComTest.java

四、下载搭档代码并进行重构

常用使用方法:

  • refactor->Rename给类、包、方法、变量改名字
  • refactor->Encapsulate Field封装
  • Source->Generate toString()toString()方法
  • refactor->Extract Method提炼出重复的代码

重构后代码

  1. class studentdark {
  2. private int num;
  3. private String name;
  4. private int java;
  5. public int getNum() {
  6. return num;
  7. }
  8. @Override
  9. public String toString() {
  10. return "studentdark{" +
  11. "num=" + num +
  12. ", name='" + name + '\'' +
  13. ", java=" + java +
  14. '}';
  15. }
  16. public void setNum(int num) {
  17. this.num = num;
  18. }
  19. public String getName() {
  20. return name;
  21. }
  22. public void setName(String name) {
  23. this.name = name;
  24. }
  25. public int getJava() {
  26. return java;
  27. }
  28. public void setJava(int java) {
  29. this.java = java;
  30. }
  31. }
  32. public class studentdarkTest {
  33. public static void main(String[] args) {
  34. studentdark student = new studentdark();
  35. student.setName("caoge");
  36. student.setNum(5312);
  37. student.setJava(94);
  38. System.out.println("学号为"+ student.getNum() +",姓名为"+ student.getName() +"java成绩为"+ student.getJava());
  39. }
  40. }

五、结对编程--JAVA密码学算法

密码学包括密码编码学(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平台上进行用户身份鉴别的功能。

我们小组结合正在学习《密码学》中的DES算法,以及认真阅读娄老师博客 Java密码学算法,了解到“DES”是目前最常用的对称加密算法,但安全性较差。针对DES安全性的改进产生了能满足当前安全需要的TripleDES算法,即“DESede”。决定实现TripleDES算法,在老师范例代码上做了调整。

编程思路:

(1) 获取密钥生成器KeyGenerator kg=KeyGenerator.getInstance("DESede");

Java中KeyGenerator类中提供了创建对称密钥的方法。KeyGenerator类预定义了一个静态方法getInstance( ),方法getInstance( )的参数为字符串类型,指定加密算法的名称。

(2) 初始化密钥生成器kg.init(168);该步骤一般指定密钥的长度。我们写的是“DESede”,则可以是112或168位,其中112位有效。

(3) 生成密钥SecretKey k=kg.generateKey( );密钥可用于以后的加密和解密。

(4) 通过对象序列化方式将密钥保存在文件中

  1. FileOutputStream f=new FileOutputStream("key1.dat");
  2. ObjectOutputStream b=new ObjectOutputStream(f);
  3. b.writeObject(k);

ObjectOutputStream类中提供的writeObject方法可以将对象序列化,以流的方式进行处理。这里将文件输出流作为参数传递给ObjectOutputStream类的构造器,这样创建好的密钥将保存在文件key1.data中。

(5) 从文件中获取密钥

  1. FileInputStream f=new FileInputStream("key1.dat");
  2. ObjectInputStream b=new ObjectInputStream(f);
  3. Key k=(Key)b.readObject( );

(6) 创建密码器

Cipher cp=Cipher.getInstance("DESede");

KeyGenerCipher类是一个工厂类,它不是通过new方法创建对象,而是通过其中预定义的一个静态方法getInstance( )获取Cipher对象。getInstance( )方法的参数是一个字符串,该字符串给出Cipher对象应该执行哪些操作。

(7) 初始化密码器

cp.init(Cipher.ENCRYPT_MODE, k);该方法包括两个参数,第一个参数指定密码器准备进行加密还是解密,若传入Cipher.ENCRYPT_MODE则进入加密模式。第二个参数则传入加密或解密所使用的密钥,即第1步从文件中读取的密钥对象k。

(8) 获取等待加密的明文

  1. String s="Hello World!";
  2. byte ptext[]=s.getBytes("UTF8");

(9) 执行加密

byte ctext[]=cp.doFinal(ptext);

(10) 处理加密结果

  1. FileOutputStream f2=new FileOutputStream("SEnc.dat");
  2. f2.write(ctext);

这里将加密结果保存在文件Senc.dat中。

加密结果:

密钥相同,解密与加密过程类似,解密结果:

六、实验感想

再一次的结对学习让我们的默契度再次增加,更加有默契。将密码学学习的内容与java相结合,更一步锻炼了自己的能力。

代码链接

步骤 耗时/h 百分比
需求分析 0.5 10%
设计 1 20%
代码实现 2 40%
测试 0.5 10%
分析总结 1 20%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. eclipse添加js智能代码提示

    安装重启之后,在项目名上右键 结束

  2. git创建分支提交到远程分支步骤

    git创建分支提交到远程分支步骤 step1,在本地新建分支() git branch newbranch step2:把本地分支push到远程 git push origin newbranch s ...

  3. Netflix:我们为什么要将 GraphQL 引入前端架构? (转)

    在刚开始时,Monet 的 React UI 层需要访问由 Tomcat 服务器提供的传统 REST API.随着时间的推移,随着应用程序的发展,我们的用例变得越来越复杂,即使是一个简单页面也需要从各 ...

  4. 微服务架构演变过程-SpringCloud

  5. [BZOJ2427]软件安装

    Problem 每个软件都要安装某些软件才能安装,而且都有体积和价值,求安装的价值最大值 Solution 对于每个环,我们可以知道必须全部一起取或者不取,因此我们先用Tarjan缩点 然后我们用一个 ...

  6. NPOI 操作excel之 将图片插入到指定位置;

    //新建类 重写Npoi流方法 public class NpoiMemoryStream : MemoryStream { public NpoiMemoryStream() { AllowClos ...

  7. 创建学生类 有姓名 学校 和年龄 覆盖toString() 1放到集合ArrayList 然后 2在第2个位置插入1个学生信息 3判断 刘德华这个学生是否存在 存在就打出来, 4输出全部学生信息 直接打印对象

    学生类 package com.lanxi.demo1; public class Student { //创建属性 姓名,学校,年龄 private String name; private Str ...

  8. CLR via C#--------CLR的执行模式

    CLR:是一个可由多种编程语言使用的“运行时”. CLR的核心功能(比如 内存管理.程序集加载.安全性.异常处理.线程同步)可由面向CLR的所有语言使用. CLR是完全围绕类型展开的. 面向CLR的语 ...

  9. JAVA学习笔记系列3-JVM、JRE和JDK的区别

    JVM(Java Virtual Machine)就是一个虚拟的用于执行bytecode字节码的“虚拟计算机”.它和os打交道 JRE(Java Runtime Environment)包含:Java ...

  10. mysql-5.7.23-winx64.zip安装教程

    请参考这篇文章:https://www.jianshu.com/p/94647c0c98c4