20165233 实验三 敏捷开发与XP实践
实验内容
XP基础
XP核心实践
相关工具
实验步骤
一、编码标准
编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。
-
代码标准中很重要的一项是如何给包、类、变量、方法等标识符命名,能很好的命名可以让自己的代码立马上升一个档次。Java中的一般的命名规则有:
- 要体现各自的含义
- 包、类、变量用名词
- 方法名用动宾
- 包名全部小写,如:io,awt
- 类名第一个字母要大写,如:HelloWorldApp
- 变量名第一个字母要小写,如:userName
- 方法名第一个字母要小写:setName
- ...
任务一:在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能
以下是没有缩进的代码,这看起来十分费劲:
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功能菜单中的Code
->Reformat Code
,便可实现按照IDEA的规范进行缩进。修改效果如下:
在研究Code
菜单的过程中,我发现名为Surround With
的功能十分好用。它的作用是:使用if-else
、try-catch
、do-while
等包装代码段;它会将这些语句中的基本内容进行补全。比如说在我需要用try-catch
语句时,突然忘记异常的类型或者名字,此时就可以使用Surround With
,为编程提高效率。
二、敏捷开发与XP
敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。“敏捷流程”是一系列价值观和方法论的集合。从2001年开始,一些软件界的专家开始倡导“敏捷”的价值观和流程,他们肯定了流行做法的价值,但是强调敏捷的做法更能带来价值。
我们关注其中的编码标准,结对编程,代码集体所有,测试,重构等实践。
任务二:在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例
首先在码云中打开自己的项目,功能栏中选择
管理
->开发者
,就可以邀请自己的学习搭档加入自己的项目中,随后对方确认邀请,即添加成功。打开IDEA在功能栏中选择
File
->New
->Project from Version Control
,就可以成功clone自己学习搭档码云项目里的所有代码
- 下载实验二的Complex代码后,我的学习搭档MyComplex.java的源程序如图:
- 我修改的JUnit单元测试用例如下图:
三、重构
重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
- 我们要修改软件,万变不离其宗,无非就是四种动机:
增加新功能;
原有功能有BUG;
改善原有程序的结构;
优化原有系统的性能 。
任务三:完成重构内容的练习,下载搭档的代码,至少进行三项重构
我下载的搭档代码如下:
通过分析,代码存在如下问题:
- 类名不符合命名规则;
- 程序对于用户输入的不同数据的包含情况过少
- 处理问题太笼统,划分不细致
基于以上的分析,我对搭档的代码进行了如下图的重构:
练习:Java 密码学算法
-
我们遇到的安全问题可以归结为安全的三个属性(CIA金三角):
- 机密性(Confidentiality):确保数据仅能被合法的用户访问, 即数据不能被未授权的第三方使用。
- 完整性(Integrity):主要确保数据只能由授权方或以授权的方式进行修改,即数据在传输过程中不能被未授权方修改。
- 可用性(Availability):主要确保所有数据仅在适当的时候可以由授权方访问。
-
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密码学相关内容的学习,结合重构、git、代码标准等
我们基于老师的博客进行了对于Java对称加密-DES算法的学习。
在对称加密-DES算法中一共包括四个部分:
- 生成随机密钥
- 保存了密钥编码后,又使用循环语句将字节数组中的内容打印出来
- 加密
- 解密
在理解了这个加密过程后,我们对方法进行了一部分的重构:
我想添加解密的JUnit单元测试用例,但在进行过程中遇到了问题。由于密文存放在文件SEnc.dat中,需要从文件中读入,所以在声明一个新的字符串对象用于验证密文解密后是否正确时,IDEA会提示没有String方法,因此也就无法进行断言语句进行匹配判断,最终以失败告终...
总结与体会
- 本次试验更注重结对编程,通过互相加入开发者,便可以互相修改代码,更加方便。两个人都可以对双方的代码进行修改。
- 在修改对方的单元测试用例时,也能够增强自己纠错,适应多种编程形式的能力
- 重构搭档代码时,可以吸取更多经验教训,使自己避免出现与搭档同样的错误
- Java密码学算法的学习过程中,的确很深刻的感受到学了《密码学》却不会使用密码技术的问题,在老师的博客中也见到了教材中没有接触过的生成密钥等之类的方法。
步骤 | 耗时 | 百分比 |
需求分析 | 10min | 17.2% |
设计 | 20min | 34.5% |
代码实现 | 8min | 13.8% |
测试 | 15min | 25.9% |
分析总结 | 5min | 8.6% |