20155208实验三 敏捷开发与XP实践

一、实验内容

(1)在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能。

(2)下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例

(3)下载搭档的代码,至少进行三项重构

(4)以结对的方式完成Java密码学相关内容的学习,结合重构、git、代码标准等

二、实验步骤

(1)在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能:

  • 软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。 人们在开发、运营、维护软件的过程中有很多技术、做法、习惯和思想体系。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发流程”。软件开发流程的目的是为了提高软件开发、运营、维护的效率,并提高软件的质量、用户满意度、可靠性和软件的可维护性。 光有各种流程的思想是不够的,我们还要有一系列的工具来保证这些思想能够在实践中有效率地运作。软件开发很重要的一点不是看你能对多少理论讲的头头是道,还要看你对相关工具应用的如何,比如Java中单元测试要和JUnit的应用结合起来,建模要和Umbrello或StarUML的应用结合起来。编程学习是一个习而学的过程。

  • 程序没有最基本的缩进,让人读起来很费劲,这个问题在Eclipse中比较容易解决,我们单击Eclipse菜单中的source->Format 或用快捷键Ctrl+Shift+F就可以按Eclipse规定的规范缩进,效果如下:

  • 代码标准中很重要的一项是如何给包、类、变量、方法等标识符命名,能很好的命名可以让自己的代码立马上升一个档次。Java中的一般的命名规则有:

    要体现各自的含义

    包、类、变量用名词

    方法名用动宾

    包名全部小写,如:io,awt

    类名第一个字母要大写,如:HelloWorldApp

    变量名第一个字母要小写,如:userName

    方法名第一个字母要小写:setName

(2)下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例:

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

驾驶员(Driver)是控制键盘输入的人。

领航员(Navigator)起到领航、提醒的作用。

如何结对编程,为何要结对编程,大家参考一下结对编程和两人合作 ,重点是:

驾驶员:写设计文档,进行编码和单元测试等XP开发流程。

领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题。

驾驶员和领航员不断轮换角色,不要连续工作超过一小时,每工作一小时休息15分钟。领航员要控制时间。

主动参与: 任何一个任务都首先是两个人的责任,也是所有人的责任。没有“我的代码”、“你的代码”或“他/她的代码”,只有“我们的代码”。 只有水平上的差距,没有级别上的差异。两人结对,尽管可能大家的级别资历不同,但不管在分析、设计或编码上,双方都拥有平等的决策权利。

(3)下载搭档的代码,至少进行三项重构:

  • 重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。重构最主要的目标就是清楚“有臭味道”的代码,主要表现为重复代码。
  • 重构中一个非常关键的前提就是“不改变软件外部行为”,它保证了我们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。如何保证不改变软件外部行为?重构后的代码要能通过单元测试。如何使其更加易于阅读、易于维护和易于变更 ?设计模式给出了重构的目标。
  • 重构后截图如下:

(4)以结对的方式完成Java密码学相关内容的学习,结合重构、git、代码标准等:

  • 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平台上进行用户身份鉴别的功能。

这是我们所编写的凯撒密码的程序:

import java.io.*;
import java.util.Scanner;

public class kaisa{
    public static void main(String[] args){
        System.out.print("请输入密钥:");
        Scanner s=new Scanner(System.in);
        int a=s.nextInt();
        C(a);
    }
    public static void C(int n){
        try{
            char b[];
               BufferedReader br2=new BufferedReader(new InputStreamReader(System.in));
               System.out.println("请输入一段明文:");
               String str2=br2.readLine();
               b=str2.toCharArray();
               System.out.println("密文为:");
               int k=n;
               for(int i=0;i<str2.length();i++){
                   char ch=(char)((b[i]-'a'+k)%26+'a');
                   System.out.print(ch);

               }
               System.out.println("密匙k="+k);
        }catch(IOException e){
            System.out.println(e.getMessage());
        }
    }
}

并对产品代码进行了测试

PSP(Personal Software Process)时间

步骤耗时百分比
需求分析 10min 9.1%
设计 15min 13.6%
代码实现 40min 36.4%
测试 25min 22.7%
分析总结 20min 18.2%

总结

本次实验最关键的地方在于团队合作,通过团队合作,我们不仅对团队开发这一概念有了深刻认识,更对XP这一思想有了初步的理解。我觉得之所以要在这个过程中提倡团队开发,首先,软件开发的过程复杂,而团队方式可以使其简单许多,遇到问题的时候可以大家一起想,集思广益,特别是在一个较大型的软件工程项目中,一个人的力量和智慧显然是不够的。其次,团队操作在很大程度上可以实现优势的互补。