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

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

实验内容

检查点1:

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

检查点2:

  • 在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,左侧是将搭档代码clone后的显示:
    1296460-20180426223307042-12208156.png
  • 下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例
    1296460-20180426223322364-1165615999.png
    在搭档代码中添加了c4,c5,c6,并将其假如到代码测试中。

检查点3:

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

检查点4:

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

1296460-20180427003926167-1479383167.png

1296460-20180427003932550-696296401.png

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

1296460-20180427091830385-1927444271.png

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

(四)实践项目

实验报告中统计自己的PSP(Personal Software Process)时间
步骤耗时百分比
需求分析10min7.7%
设计30min23%
代码实现50min38%
测试10min7.7%
分析总结30min23%
posted on 2018-04-27 09:28 mushroom1111 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/mushroomissmart/p/8960853.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值