• 2018-2019-2 实验三 敏捷开发与XP实践


    实验内容

    1.XP基础
    2.XP核心实践
    3.相关工具

    实验要求

    1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程

    2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网
    络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导

    3.严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

    实验步骤

    一、编码标准

    • 参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD 安装alibaba插件,解决代码中的规范问题。
    • 在IDEA中使用工具(Code->Reformate Code)把CodeStandard重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。提交截图,加上自己学号水印。

    1.IDEA中的插件,我们通过Jetbrains官方仓库安装:打开 Settings ->Plugins -> Browse repositories...
    在搜索框输入alibaba即可看到Alibaba Java Code Guidelines插件,点击Install进行安装,然后重启IDE生效:

    2.使用比较简单:在项目名称上单击右键,在弹出菜单上选择编码规约扫描

    出现下图内容:

    不规范的地方,有中文提示并且定位到了行,alibaba把问题分为block/critical/major三个等级,有些规则可以一键修复。

    Java中的一般的命名规则有:
    - 1.要体现各自的含义
    - 2.包、类、变量用名词
    - 3.方法名用动宾
    - 4.包名全部小写,如:io,awt
    - 5.类名第一个字母要大写,如:HelloWorldApp
    - 6.变量名第一个字母要小写,如:userName
    - 7.方法名第一个字母要小写:setName
    

    3.在IDEA中使用工具Code->Reformate Code,格式化代码:

    规范后的代码:

    4.Code菜单

    - 1.Override Methods ( 重写覆盖方法 ) Ctrl + O
    - 2.Implements Methods ( 实现接口方法 ) Ctrl + I
    - 3.Delegate Methods
    - 4.Gengrate ( 用于生成Construct、Getter/Setter、toString等) Alt + Insert
    - 5.Surround With ( 生成包围代码 ) Ctrl + Alt +T
    - 6.Unwarp/Remove ( 取消代码包围 ) Ctrl + Shift + Delete
    - 7.Completion
       - Basic Ctrl + 空格
       - SmartType ( 智能选择并实现 ) Ctrl + Shift + 空格
       - Cyclic Expand Word ( 循环往上选择单词 ) Alt + /
       - Cyclic Expand Word (Backwrad)( 循环往下选择单词 ) Alt + Shift + /
    - 8.Folding
       - Expand ( 方法展开 ) Ctrl + 加号
       - Collapse ( 方法折叠 ) Ctrl + 减号
       - Expand Recursively ( 同上,方法展开 ) Ctrl + Alt + 加号
       - Collapse Recursively ( 同上,方法折叠 ) Ctrl + Alt + 减号
       - Expand All ( 全部方法展开 ) Ctrl + Shift + 加号
       - Collapse All ( 全部方法折叠 ) Ctrl + Shift + 减号
       - Expand to level...
       - Expand all to level...
       - Expand doc comments ( 展开Java doc注释 )
       - Collapse doc comments ( 折叠Java doc注释 )
       - Fold Selection / Remove region Ctrl + 句点
       - Fold Code Block Ctrl + Shift + 句点
    - 9.Insert Live Template ( 选择Live Templates模板 ) Ctrl + J
    - 10.Surround with Live Template ( 选择Live Templates模板 ) Ctrl + Alt + J
    - 11.Comment with Line Comment ( 行注释 ) Ctrl + /
    - 12.Comment with Block Comment ( 块注释 ) Ctrl + Shift + /
    - 13.Reformat Code ( 格式化代码 ) Ctrl + Alt + L
    - 14.Show Reformat File Dialog ( 弹出格式化弹框 ) Ctrl + Alt + Shift + L
    - 15.Auto-Indent Lines Ctrl + Alt + I
    - 16.Optimize Imports ( 去除未引用的包导入声明 ) Ctrl + Alt + O
    - 17.Rearrange Code ( 重新整理代码 )
    - 18.Move Statement Down ( 方法、代码下移 ) Ctrl + Shift + 向下箭头
    - 19.Move Statement Up ( 方法、代码上移 ) Ctrl + Shift + 向上箭头
    - 20.Move Element Left Ctrl + Alt + Shift + 向左箭头
    - 21.Move Element Rigth Ctrl + Alt + Shift + 向右箭头
    - 22.Move Line Down Alt + Shift + 向下箭头
    - 23.Move Line Up Alt + Shift + 向上箭头
    - 24.Update Copyright
    

    5.我觉得最好用的功能是:

    • Override Methods ( 重写覆盖方法 ) Ctrl + O

    • Reformat Code ( 格式化代码 ) Ctrl + Alt + L
    • Surround With ( 生成包围代码 ) Ctrl + Alt +T

    二、结对编程

    • 在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容"git push
    • 提交搭档项目git log的截图,包含上面git commit的信息,并加上自己的学号水印信息。

    1.在码云上把自己的学习搭档加入自己的项目中

    2.确认搭档的项目加入自己后

    3.加入不少于三个JUnit单元测试用例

    测试成功截图:

    4.提交搭档项目git log的截图

    三、重构

    • 完成重构内容的练习,下载搭档的代码,至少进行三项重构,提交重构后代码的截图,加上自己的学号水印。提交搭档的码云项目链接。
    • 一个完整的重构流程包括:
      • 1.从版本控制系统代码库中Check out code
      • 2.读懂代码(包括测试代码)
      • 3.发现bad smell
      • 4.Refactoring
      • 5.运行所有的Unit Tests
      • 6.往代码库中Check in code

    1.选取下载搭档代码
    重构前:

    public class linshi {
            public static void main(String[] args) {
                //定义一个数组,比如
                int arr[] = {1,2,3,4,5,6,7,8};
    
                //打印原始数组的值
                for(int i:arr){
                    System.out.print(i + " ");
                }
                System.out.println();
    
                // 添加代码删除上面数组中的5
                int weizhi = 0;
                for(int i:arr){
                    if(arr[i] == 5){
                        weizhi = i;
                        break;
                    }
                }
    
                for(int i=weizhi+1;i<arr.length;i++){
                    arr[i-1] = arr[i];
                }
                arr[arr.length-1] = 0;
    
                //打印出 1 2 3 4 6 7 8 0
                for(int i:arr){
                    System.out.print(i + " ");
                }
    
                System.out.println();
    
                // 添加代码再在4后面5
                for(int i:arr){
                    if(arr[i] == 4){
                        weizhi = i;
                        break;
                    }
                }
    
                for(int i=arr.length-1;i>weizhi+1;i--){
                    arr[i] = arr[i-1];
                }
                arr[weizhi+1] = 5;
    
                //打印出 1 2 3 4 5 6 7 8
                for(int i:arr){
                    System.out.print(i + " ");
                }
                System.out.println();
            }
    }
    
    

    2.编码规约扫描后发现


    存在如下问题:

    • 1.中括号是数组类型的一部分,数组定义如下:String[] args
    • 2.所有的类都必须添加创建者信息,说明:在设置模板时,注意IDEA的@author${USER},而eclipse的@author${user},大小写有区别,而日期的设置统一为yyyy/MM/dd的格式。
    • 3.类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名)DO / BO / DTO / VO / DAO

    3.重构后截图:

    4.提交搭档项目git log的截图

    四、Java 密码学算法

    1.体验加解密---凯撒密码

    • 加密:


    • 解密:


    2.Java对称加密-DES算法

    • 加密:
      • 1.从文件中获取密钥

    • 2.创建密码器(Cipher对象)
    • 3.初始化密码器
    • 4.获取等待加密的明文
    • 5.执行加密
    • 6.处理加密结果

    • 解密:
      • 1.获取密文
      • 2.获取密钥
      • 3.创建密码器(Cipher对象
      • 4.初始化密码器
      • 5.执行解密

    3.Java非对称加密-RSA算法

    • 生成双钥
      • 1.创建密钥对生成器
      • 2.初始化密钥生成器
      • 3.生成密钥对
      • 4.获取公钥和私钥
    • 加密:
      • 1.获取公钥
      • 2.获取公钥的参数(e, n)
      • 3.获取明文整数(m)
      • 4.执行计算

    • 解密:
      • 1.读取密文
      • 2.获取私钥
      • 3.获取私钥的参数(d, n)
      • 4.执行计算
      • 5.计算明文整型数对应的字符串

    4.使用密钥协定创建共享密钥

    • 1.创建DH公钥和私钥
    • 2.创建共享密钥

    • 3.读取自己的DH私钥和对方的DH公钥
    • 4.创建密钥协定对象
    • 5.初始化密钥协定对象
    • 6.执行密钥协定
    • 7.生成共享信息

    5.Java摘要算法- MD5

    • 1.生成MessageDigest对象
    • 2.传入需要计算的字符串
    • 3.计算消息摘要
    • 4.处理计算结果


    码云链接

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

    • 问题一:编译DigestPass时,出现错误提示:非法字符:“ufeff”
    • 问题一解决方法:在IDEA右下角,将编码改为GBK,再转为UTF-8,可以解决。

    PSP

    步骤 耗时/h 百分比
    需求分析 0.5 10%
    设计 2 40%
    代码实现 1 20%
    测试 1 20%
    分析总结 0.5 10%
  • 相关阅读:
    UVALive
    BZOJ2120:数颜色(数状数组套主席树)(带修改的莫对)
    BZOJ-3439:Kpm的MC密码(Trie+DFS序+主席树)
    51nod1674:区间的价值2(分治,利用&和|的收敛性)
    [CQOI2009]DANCE跳舞
    [HNOI2006]超级英雄
    Luogu1613 跑路
    [HZOI 2016]公路修建
    [NOI2014]魔法森林
    [HAOI2006] 旅行
  • 原文地址:https://www.cnblogs.com/killer-queen/p/10803423.html
Copyright © 2020-2023  润新知