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

实验内容

  • P基础
  • XP核心实践
  • 相关工具

实验步骤

(一)敏捷开发与XP
  • 软件开发:即将软件需求分析、软件设计、软件构建、软件测试和软件维护这些相关技术和过程统一到一个体系中
  • 敏捷开发:是一种以人为核心、迭代、循序渐进的开发方法。
  • 敏捷流程:是一系列价值观和方法论的集合。
  • XP软件开发(极限编程):包括编码、测试、倾听、设计
(二)编码标准
  • 编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。
  • 代码标准
    • 要体现各自的含义
    • 包、类、变量用名词
    • 方法名用动宾
    • 包名全部小写,如:io,awt
    • 类名第一个字母要大写,如:HelloWorldApp
    • 变量名第一个字母要小写,如:userName
    • 方法名第一个字母要小写:setName
    • ...
  • 实验任务:安装alibaba插件,解决代码中的规范问题,并在IDEA中使用工具Code->Reformate Code把代码重新格式化,再研究一下Code菜单。
  • IDEA中的插件,通过Jetbrains官方仓库安装:打开Settings ->Plugins -> Browse repositories...在搜索框输入alibaba即可看到Alibaba Java Code Guidelines插件,点击Install进行安装,然后重启IDEA生效
  • 实验截图
    image
  • Code菜单功能
    • Override Methods:重载方法/新建方法
    • Implement Methods:执行方法
    • Generate:创建类里面任何字段的gettersetter方法
    • Surround with:将某条语句被if、for等等封装语句括起
    • Move Statement Down/up:将语句下移到后一模块之后
    • Move line down:调换语句顺序
    • Comment with Line/Block Comment:两种注释
    • Reformat Code:将代码按标准格式缩进
    • ...
(三)结对编程
  • 两个角色:
    • 驾驶员(Driver)是控制键盘输入的人。
    • 领航员(Navigator)起到领航、提醒的作用。
  • 实验任务:在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .git commit -m "自己学号 添加内容"git push
  • 将自己的搭档加入自己的项目
    • 打开自己的码云项目
    • 点击管理->项目成员管理->添加项目成员->邀请组织成员
    • 打开虚拟机新建一个文件,打开终端转到新建文件下
    • 输入git clone 搭档码云链接
    • 转到要添加代码的搭档目录下进行vim 类名.java
  • 实验截图
    image
    image
(四)重构
  • 重构(Refactor):即在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更。
  • 重构动机
    • 增加新功能
    • 原有功能有BUG
    • 改善原有程序的结构
    • 优化原有系统的性能
  • 可以在哪些方面对代码进行重构:
    • 重命名:对类,接口,方法,属性等重命名,以使得更易理解
    • 抽取代码:将方法内的一段代码抽取为另一个方法,以使得该段代码可以被其他方法调用,这是重构中很重要很常用的,此举可以极大的精炼代码,减少方法的代码行数
    • 封装字段:将类的某个字段转换成属性,可以更加合理的控制字段的访问
    • 抽取接口:将类的某些属性,方法抽取组成个接口,该类自动实现该接口
    • 提升方法内的局部变量为方法的参数:这主要是在写代码的过程中会使用到
    • 删除参数:将方法的一个或多个参数删掉
    • 重排参数:将方法的参数顺序重新排列
  • Refactor菜单各功能
    image
  • 实验任务:下载搭档的代码,至少进行三项重构,提交重构后代码的截图
  • 实验截图:
    image
(五)Java密码学算法
  • 密码学包含密码编码学和密码分析学两个分支
    • 密码编码学:主要研究如何对信息进行编码,如何实现对信息的隐蔽,是密码学理论的基础,也是保密系统设计的基础。
    • 密码分析学:主要研究加密消息的破译或消息的伪造,是检验密码体制安全性最为直接的手段,只有通过实际密码分析考验的密码体制,才是真正可用的。
  • 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密码学算法:
    • 体验加解密-凯撒密码
    • Java对称加密-DES算法
    • Java非对称加密-RSA算法
    • 使用密钥协定创建共享密钥
    • Java摘要算法- MD5
    • Java混合密码系统
  • 实验任务:以结对的方式完成Java密码学相关内容的学习,结合重构,git,代码标准。
  • 实验代码:
  • 凯撒密码
/**
 * @Date 2018/4/28
 * @author wangyaojia
 */
public class Caesar{
    public static void main(String []args) throws Exception{
        String s=args[0];
        int key=Integer.parseInt(args[1]);
        String es="";
        for(int i=0;i<s.length( );i++)
        {  char c=s.charAt(i);
            // 是小写字母
            c = getC(key, c);
            es+=c;
        }
        System.out.println(es);
    }

    private static char getC(int key, char c) {
        if(c>='a' && c<='z') {
            //移动key%26位
            c = move(key, c);
            if(c<'a') {
                //向左超界
                c = changeCplus(c);
            }
            if(c>'z') {
                //向右超界
                c = changeCminus(c);
            }
        }
        // 是大写字母
        else if(c>='A' && c<='Z') {
            c = move(key, c);
            if(c<'A') {
                c = changeCplus(c);
            }
            if(c>'Z') {
                c = changeCminus(c);
            }
        }
        return c;
    }

    private static char changeCminus(char c) {
        c -= 26;
        return c;
    }

    private static char changeCplus(char c) {
        c += 26;
        return c;
    }

    private static char move(int key, char c) {
        c+=key%26;
        return c;
    }
}
  • 运行结果
    image

  • Java摘要算法- MD5

import java.security.*;
/**
 * Demo class
 *
 * @author zyx
 * @date 2018/04/28
 */
public class DigestPass{
    public static void main(String[ ] args) throws Exception{
        String x = getString(args[0]);
        MessageDigest m=MessageDigest.getInstance("MD5");
        m.update(x.getBytes("UTF8"));
        byte[] s = getDigest(m);
        String result="";
        for (int i=0; i<s.length; i++){
            result+= getString(s[i]).substring(6);
        }
        System.out.println(result);
    }

    private static String getString(byte b) {
        return Integer.toHexString((0x000000ff & b) |
                0xffffff00);
    }

    private static byte[] getDigest(MessageDigest m) {
        return m.digest();
    }

    private static String getString(String arg) {
        return arg;
    }
}
  • 结果截图
    image

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

  • 在下载alibaba插件时出现
    image

解决方法:应该是网络连接的问题,转换网络后下载成功。在查询资料时,我找到了阿里巴巴Java开发规约IDEA插件安装及使用,这里提供了两种下载方法。

  • 在进行团队项目时,老师要求将搭档可以添加代码到自己的项目中,我们认为是在自己原进行git的文件下进行git clone,结果在搭档码云中出现我的码云文件并且打不开

解决方法:需新建一个全新的文件夹,进行git clone,再转到要添加代码的搭档目录下进行vim 类名.java

实验总结

  • 通过本次实验我知道了如何进行规范、格式化代码,如何将搭档加入自己的码云项目并进行合作编写添加代码,如何重构以及Java密码学相关知识。
  • 这次实验也加深了对平时不清楚的知识点的理解,也掌握了重构等新知识点。在小伙伴的帮助下,我对代码有了更深的解读,团队完成的效率更得到提高,在之后学习的路上,要不断学会合作,掌握更多的知识并会熟练运用!
步骤 耗时 百分比
需求分析 15分钟 9%
设计 90分钟 49%
代码实现 20分钟 10%
测试 30分钟 16%
分析总结 30分钟 16%
posted @ 2018-05-03 21:38  20165330张羽昕  阅读(296)  评论(1编辑  收藏  举报