• 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%
  • 相关阅读:
    redux-simple 简化版的redux
    react服务端渲染(同构)
    使用systemd管理程序进程
    使用Dockerfile构建镜像
    centos7使用supermin制作centos7的docker镜像包
    DNS-dnsmasq安装配置
    kubernetes-部署(单机,使用证书)
    DNS-bind+namedmanager安装
    python3第一个脚本(hello world!)
    Python3 基础语法
  • 原文地址:https://www.cnblogs.com/mushroomissmart/p/8960853.html
Copyright © 2020-2023  润新知