zoukankan      html  css  js  c++  java
  • 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%
  • 相关阅读:
    单一职责原则
    算法的设计与分析 -----图 (1)
    交换机
    子网掩码
    IP地址分类+网络号
    网络参考模型与5G协议
    什么是5G
    RxJAVA
    EventBus3.0的学习
    ButterKnife+Zelezny插件
  • 原文地址:https://www.cnblogs.com/besty-zyx/p/8987667.html
Copyright © 2011-2022 走看看