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生效 - 实验截图
Code
菜单功能Override Methods
:重载方法/新建方法Implement Methods
:执行方法Generate
:创建类里面任何字段的getter
与setter
方法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
- 实验截图
(四)重构
- 重构(Refactor):即在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更。
- 重构动机
- 增加新功能
- 原有功能有BUG
- 改善原有程序的结构
- 优化原有系统的性能
- 可以在哪些方面对代码进行重构:
- 重命名:对类,接口,方法,属性等重命名,以使得更易理解
- 抽取代码:将方法内的一段代码抽取为另一个方法,以使得该段代码可以被其他方法调用,这是重构中很重要很常用的,此举可以极大的精炼代码,减少方法的代码行数
- 封装字段:将类的某个字段转换成属性,可以更加合理的控制字段的访问
- 抽取接口:将类的某些属性,方法抽取组成个接口,该类自动实现该接口
- 提升方法内的局部变量为方法的参数:这主要是在写代码的过程中会使用到
- 删除参数:将方法的一个或多个参数删掉
- 重排参数:将方法的参数顺序重新排列
Refactor
菜单各功能
- 实验任务:下载搭档的代码,至少进行三项重构,提交重构后代码的截图
- 实验截图:
(五)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;
}
}
-
运行结果
-
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;
}
}
- 结果截图
实验过程中遇到的问题及解决
- 在下载alibaba插件时出现
解决方法:应该是网络连接的问题,转换网络后下载成功。在查询资料时,我找到了阿里巴巴Java开发规约IDEA插件安装及使用,这里提供了两种下载方法。
- 在进行团队项目时,老师要求将搭档可以添加代码到自己的项目中,我们认为是在自己原进行git的文件下进行
git clone
,结果在搭档码云中出现我的码云文件并且打不开
解决方法:需新建一个全新的文件夹,进行
git clone
,再转到要添加代码的搭档目录下进行vim 类名.java
实验总结
- 通过本次实验我知道了如何进行规范、格式化代码,如何将搭档加入自己的码云项目并进行合作编写添加代码,如何重构以及Java密码学相关知识。
- 这次实验也加深了对平时不清楚的知识点的理解,也掌握了重构等新知识点。在小伙伴的帮助下,我对代码有了更深的解读,团队完成的效率更得到提高,在之后学习的路上,要不断学会合作,掌握更多的知识并会熟练运用!
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 15分钟 | 9% |
设计 | 90分钟 | 49% |
代码实现 | 20分钟 | 10% |
测试 | 30分钟 | 16% |
分析总结 | 30分钟 | 16% |