20165205 2017-2018-2 《Java程序设计》实验三 敏捷开发与XP实践

20165205 2017-2018-2 《Java程序设计》实验三 敏捷开发与XP实践

实验内容

检查点1:

  • 安装alibaba 插件,解决代码中的规范问题
    • 首先把搭档加入到自己的项目中:
    • 然后利用alibaba插件,将所给代码修改格式:

检查点2:

  • 在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,左侧是将搭档代码clone后的显示:
  • 下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例

    在搭档代码中添加了c4,c5,c6,并将其假如到代码测试中。

检查点3:

  • 完成重构内容的练习,下载搭档的代码,至少进行三项重构:我对文件名字进行了重构;由于alibaba的插件对格式要求严格,所以在if后添加大括号;还有添加了最后一个else用来除了其他情况:

检查点4:

  • 完成一个java密码学的代码,并进行重构,添加了异常类:

Skey_DES.java

import java.io.*;
import javax.crypto.*;
public class Skey_DES{
public static void main(String args[])
        throws Exception{
    KeyGenerator kg=KeyGenerator.getInstance("DES");
    kg.init(56);
    SecretKey k=kg.generateKey( );
    FileOutputStream  f=new FileOutputStream("key1.dat");
    ObjectOutputStream b=new  ObjectOutputStream(f);
    b.writeObject(k);
	 }
}

Skey_kb.java

import java.io.*;
	import java.security.*;
public class Skey_kb{
public static void main(String args[]) throws Exception{
    try {
        FileInputStream f = new FileInputStream("key1.dat");
        ObjectInputStream b = new ObjectInputStream(f);
        Key k = (Key) b.readObject();
        byte[] kb = k.getEncoded();
        FileOutputStream f2 = new FileOutputStream("keykb1.dat");
        f2.write(kb);

    // 打印密钥编码中的内容
    for(int i=0;i<kb.length;i++){
        System.out.print(kb[i]+",");
    }
    }
    catch (Exception e) {
            System.out.println(e.toString());
            e.printStackTrace();

  	  }
  }
}

SEnc.java

import java.io.*;
import java.security.*;
import javax.crypto.*;
public class SEnc{
public static void main(String[] args) throws Exception{
    try{
    String s="Hello World!";
    FileInputStream f=new FileInputStream("key1.dat");
    ObjectInputStream b=new ObjectInputStream(f);
    Key k=(Key)b.readObject( );
    Cipher cp=Cipher.getInstance("DES");
    cp.init(Cipher.ENCRYPT_MODE, k);

    byte ptext[]=s.getBytes("UTF8");
    for(int i=0;i<ptext.length;i++){
        System.out.print(ptext[i]+",");
    }
    System.out.println("");
    byte ctext[]=cp.doFinal(ptext);
    for(int i=0;i<ctext.length;i++){
        System.out.print(ctext[i] +",");
    }
    FileOutputStream f2=new FileOutputStream("SEnc.dat");
    f2.write(ctext);
}
catch (Exception e) {
    System.out.println(e.toString());
    e.printStackTrace();
		}
	}
}

SDer.java

import java.io.*;
import javax.crypto.*;
import javax.crypto.spec.*;
public class SDec {
	public static void main(String[] args) throws Exception 	{
   	 // 获取密文
   	 try {
        	FileInputStream f = new FileInputStream("SEnc.dat");
        	int num = f.available();
        	byte[] ctext = new byte[num];
        	f.read(ctext);
        	// 获取密钥
        	FileInputStream f2 = new FileInputStream("keykb1.dat");
        	int num2 = f2.available();
       		byte[] keykb = new byte[num2];
        	f2.read(keykb);
        	SecretKeySpec k = new SecretKeySpec(keykb, "DESede");
        	// 解密
        	Cipher cp = Cipher.getInstance("DESede");
        	cp.init(Cipher.DECRYPT_MODE, k);
        	byte[] ptext = cp.doFinal(ctext);
        	// 显示明文
        	String p = new String(ptext, "UTF8");
        	System.out.println(p);
    	} catch (Exception e) {
        	System.out.println(e.toString());
        	e.printStackTrace();
    	}
	}
}

学习内容

(一)敏捷开发与XP

  • 软件工程:

  • 软件工程包括以下领域:

    • 软件需求分析
    • 软件设计
    • 软件构建
    • 软件测试
    • 软件维护
  • 常见开发流程:

    • RUP(Rational Unified Process)
    • PSP(Personal Software Process )
    • TSP(Team Software Process )
    • Agile Process
    • ……
  • 敏捷开发(Agile Development):是一种以人为核心、迭代、循序渐进的开发方法

  • XP软件开发的基石是XP的活动,包括:

    • 编码
    • 测试
    • 倾听
    • 设计
  • Java中的一般的命名规则:

    • 要体现各自的含义
    • 包、类、变量用名词
    • 方法名用动宾
    • 包名全部小写,如:io,awt
    • 类名第一个字母要大写,如:HelloWorldApp
    • 变量名第一个字母要小写,如:userName
    • 方法名第一个字母要小写:setName
    • ...

(二)编码标准

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

(三)重构

  • 重构中一个非常关键的前提就是“不改变软件外部行为”,它保证了我们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。
    • 修改软件的四种动机:
      • 增加新功能
      • 原有功能有BUG
      • 改善原有程序的结构
      • 优化原有系统的性能

实验过程中遇到的问题及解决

  • 问题:在clone搭档的代码并重构后,run时遇到问题Cannt start process,the working dirctory

  • 解决方法:在File->Project Structure->Module->paths->修改outpath到bin文件夹

(四)实践项目

实验报告中统计自己的PSP(Personal Software Process)时间

步骤 耗时 百分比
需求分析 10min 7.7%
设计 30min 23%
代码实现 50min 38%
测试 10min 7.7%
分析总结 30min 23%
原文地址:https://www.cnblogs.com/mushroomissmart/p/8960853.html