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

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

1、编码标准

编写代码一个重要的认识是“程序大多时候是给人看的”,编程标准使代码更容易阅读和理解,甚至能够保证其中的错误更少。编程标准包含:具备说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。 编码标准中的版式就是一个很好的例子,版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要因素。html

--娄老师《敏捷开发与XP实践java

  • 规定的规范缩进:

咱们常见的是这样的代码:git

public class CodeStandard {
public static void main(String [] args){
StringBuffer buffer = new StringBuffer();
buffer.append('S');
buffer.append("tringBuffer");
System.out.println(buffer.charAt(1));
System.out.println(buffer.capacity());
System.out.println(buffer.indexOf("tring"));
System.out.println("buffer = " + buffer.toString());
if(buffer.capacity()<20)
buffer.append("1234567");
for(int i=0; i<buffer.length();i++)
System.out.println(buffer.charAt(i));
}
}

程序没有最基本的缩进,让人读起来很费劲,可是在IDEA中利用插件能够轻松解决:程序员

  • 打开 Settings ->Plugins -> Browse repositories...
  • 在搜索框输入alibaba便可看到Alibaba Java Code Guidelines插件,点击Install进行安装,而后重启IDE生效:

  • 在项目名称上单击右键,在弹出菜单上选择编码规约扫描便可扫描出不规范代码:

代码标准中很重要的一项是如何给包、类、变量、方法等标识符命名,能很好的命名可让本身的代码立立刻升一个档次。Java中的通常的命名规则有:算法

  • 要体现各自的含义
  • 包、类、变量用名词
  • 方法名用动宾
  • 包名所有小写,如:ioawt
  • 类名第一个字母要大写,如:HelloWorldApp
  • 变量名第一个字母要小写,如:userName
  • 方法名第一个字母要小写:setName
  • ...

任务一:在IDEA中使用工具(Code->Reformate Code)格式化代码,并学习Code菜单的功能

  • 打开工具栏中的Code选项,选择Reformate Code功能,便可格式化代码

  • 经过学习Code菜单,现将基本功能总结以下:
    • Override Methods(Ctrl+O):重载基本类的方法;
    • Implement Methods(Ctrl+I):完成当前类接口或者抽象基本类的接口的方法;
    • Generate(Alt+Insert):建立类里面任何字段的 getter 与 setter 方法;
    • Surround With(Ctrl+Alt+T):使用if-elsetry-catchdo-while等包装代码段;
    • Insert Live Template(Ctrl+J):执行一些记不起来的 Live Template 缩写;
    • Comment with Line Comment(Ctrl+斜杠):注释(或反注释)当前行或者选择地代码块;
    • Comment with Block Comment(Ctrl+Shift+斜杠):用块注释标记(“ /* */”)把所选块包围起来
    • Reformat Code(Ctrl+Alt+L):将代码按标准格式缩进;
    • Move Statement Up/Down:向上/向下移动代码语句;
    • Move Line Up/Down:向上/向下移动光标所在行
    • ...

2、敏捷开发与XP

结对编程是XP中的重要实践。在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工做。他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一块儿工做。他们一块儿分析,一块儿设计,一块儿写测试用例,一块儿编码,一块儿作单元测试,一块儿作集成测试,一块儿写文档等。 结对编程中有两个角色:编程

  • 驾驶员(Driver)是控制键盘输入的人。
  • 领航员(Navigator)起到领航、提醒的做用。

如何结对编程,为什么要结对编程,你们参考一下结对编程和两人合做 ,重点是:安全

  • 驾驶员:写设计文档,进行编码和单元测试等XP开发流程;
  • 领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否须要和如何重构;帮助驾驶员解决具体的技术问题;
  • 驾驶员和领航员不断轮换角色,不要连续工做超过一小时,每工做一小时休息15分钟。领航员要控制时间;
  • 主动参与。任何一个任务都首先是两我的的责任,也是全部人的责任。没有“个人代码”、“你的代码”或“他/她的代码”,只有“咱们的代码”;
  • 只有水平上的差距,没有级别上的差别。两人结对,尽管可能你们的级别资历不一样,但无论在分析、设计或编码上,双方都拥有平等的决策权利。

--娄老师《敏捷开发与XP实践网络

任务二:在码云上把本身的学习搭档加入本身的项目中,确认搭档的项目加入本身后,下载搭档实验二的Complex代码,加入很多于三个JUnit单元测试用例

  • 登陆码云后,进入本身的项目,点击管理,进入后选择项目成员管理,将搭档加入本身的项目

  • 找到搭档的Complex代码以下:

  • 在IDEA的Git选项选择链接搭档的代码,下载后对照Complex代码写出很多于三个Junit测试类

  • 须要测试的类有:getRealPart()getImagePart()Add()Sub()Multi()Div(),将测试代码上传到搭档码云上

3、重构

重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变动 。app

--娄老师《敏捷开发与XP实践框架

重构中一个很是关键的前提就是“不改变软件外部行为”,它保证了咱们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。

咱们要修改软件,万变不离其宗,无非就是四种动机:

  • 增长新功能;
  • 原有功能有BUG;
  • 改善原有程序的结构;
  • 优化原有系统的性能 。

须要重构的代码有哪些呢?

IDEA提供的重构功能在Refactor选项中:

一个完整的重构流程包括:

  • 从版本控制系统代码库中Check out code
  • 读懂代码(包括测试代码)
  • 发现bad smell
  • Refactoring
  • 运行全部的Unit Tests
  • 往代码库中Check in code

任务三:下载搭档的代码,至少进行三项重构

  • 选择搭档的Rational代码
  • 找出此代码中存在的四个问题
    • 变量名不符合命名规则
    • 类名不符合命名规则
    • 类中的变量都是友好变量,改为私有变量更好
    • 定义了多余的变量
  • 根据上述问题,对搭档代码进行重构

4、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,代码标准

和搭档对各类算法进行学习研究后,咱们选择了MD5算法:

使用Java计算指定字符串的消息摘要,java.security包中的MessageDigest类提供了计算消息摘要的方法

  • 首先生成对象,执行其update()方法能够将原始数据传递给该对象,而后执行其digest( )方法便可获得消息摘要。具体步骤以下:

    • 生成MessageDigest对象:MessageDigest m=MessageDigest.getInstance("MD5");
    • 传入须要计算的字符串:m.update(x.getBytes("UTF8" ));
    • 计算消息摘要:byte s[ ]=m.digest( );
    • 处理计算结果(必要的话可使用以下代码将计算结果s转换为字符串)
    String result="";
    for (int i=0; i<s.length; i++){
       result+=Integer.toHexString((0x000000ff & s[i]) | 0xffffff00).substring(6);
    }
  • 编写代码以下:

  • 对源代码进行格式化与重构

产品代码:

import java.io.UnsupportedEncodingException;
import java.security.*;

public class MD5Encrypt {
    public static void main(String args[]) throws Exception {
        String originalStr = args[0];
        MessageDigest m = null;
        try {
            m = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        try {
            m.update(originalStr.getBytes("UTF8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        byte byteStr[] = m.digest();
        GetResult getResult = new GetResult();
        for (int i = 0; i < byteStr.length; i++) {
            getResult.result += Integer.toHexString((0x000000ff & byteStr[i]) |
                    0xffffff00).substring(6);
        }
    }

    public static class GetResult {
        String result = "";
    }
}
  • 编写测试类代码
/*测试输入输出*/
String str = new String(originalStr);
System.out.println("明文:" + str);
System.out.println("密文:" + getResult.result);

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

  • 最开始不知道如何将搭档加入本身的项目,觉得是创建一个项目,项目成员只有我和搭档两我的:

解决过程: 通过询问同窗,知道了应该在本身项目的管理中邀请搭档成为该项目成员的开发者:

  • 在对搭档的代码进行重构时,花了一番心思,由于搭档对代码的编写很是细致,不多有须要重构的地方

解决过程: 通过对重构的仔细学习和对搭档代码的认真检查,仍是找到了几处须要重构的地方:

实验体会与总结

我经过本次实验学会了如何规范、格式化代码,如何将搭档加入本身的码云项目并进行合做编写代码,如何重构以及Java密码学相关知识。

在本身上手实践操做过程当中,加深了对平时不清楚的知识点的理解,也掌握了重构等新知识点。此次实验是第一次真正意义上的“结对编程”,让我深入体会到了“众人拾柴火焰高”这句真理,实时观测搭档的代码使得编程效率大大提升。

PSP(Personal Software Process)时间

步骤 耗时 百分比
步骤 耗时 百分比
需求分析 30min 19%
设计 30min 19%
代码实现 60min 38%
测试 10min 6%
分析总结 30min 18%

码云连接

相关文章
相关标签/搜索