实验三 敏捷开发与XP实践
实验内容
- XP基础
- XP核心实践
- 相关工具
实验要求
1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程
2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导
3 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。
实验步骤
(一)敏捷开发与XP
(二)编码标准
程序代码初始是这样的:
因为我用的是IDEA,通过网上搜索,知道了IDEA中自动规范缩进是Ctrl+Alt+i,操作后如下:
根据代码逻辑,加入空格后,如下:
目前为止的学习过程中,如何命名是让我一直有些头疼的问题,恰好这次实验中给了命名规则:
要体现各自的含义
包、类、变量用名词
方法名用动宾
包名全部小写,如:io,awt
类名第一个字母要大写,如:HelloWorldApp
变量名第一个字母要小写,如:userName
方法名第一个字母要小写:setName
...
标识符名字应当直观且可以拼读,可望文知意,不必进行“解码”,一般采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名,用词要准确例如“当前值”应该起名currentValue,写成nowValue就不准确了,但还凑合,写成dqz(dang qian zhi 首字母)就是笑话了。
标识符的长度“min-length && max-information”的原则,比如:maxVal 比 maxValueUntilOverflow要好些,可以通过去元音法把变量名变短,如returnValue->rtnVal ,message->msg;一般全局变量用具有说明性的名字,局部变量用短名字:单字符的名字,常见的如i,j,k等用作局部变量。
(三)结对编程
两人中每人都要对代码负责,但有具体分工,总结来说可以是驾驶员和领航员,在协作的基础上发挥个性.
(四)版本控制
(五)重构
在网上找到了一篇文章,http://www.open-open.com/home/space-37924-do-blog-id-9475.html
介绍了20种IDEA的重构功能,与eclipse操作还是有一定区别,现列举一下博客中提到的功能:
Out-of-the-box support for languages and frameworks
Find and replace code duplicates
Rename and name patterns recognition
Type migration
Invert boolean
String fragments
Other productivity-boosting features
Inline to anonymous
Encapsulate fields
一个完整的重构流程包括:
从版本控制系统代码库中Check out code
读懂代码(包括测试代码)
发现bad smell
Refactoring
运行所有的Unit Tests
往代码库中Check in code
(六)实践项目
1.以结对编程的方式编写一个软件,Blog中要给出结对同学的Blog网址,可以拍照展现结对编程情况,可以参考一下其他学校的作业
2.记录TDD和重构的过程,测试代码不要少于业务代码,Eclipse中refactor菜单下的重构技能不要少于5个
3.团队代码要使用git在实验楼中托管,要使用结对同学中的一个同学的账号托管。
4 程序要有GUI界面,参考用户界面和用户体验
5.程序功能从豌豆荚游戏中选择一款用Java实现,注意:团队之间项目不能有重复,课代表协调一下。
在git代码时,尝试了半天,总是出现这样的情况:
我的实验伙伴是20145129刘芳芳 博客地址是
产品代码是:
/*
* 设计思路:给一个N的值计算出从2到N之间的素数
* 定义一个方法即一个数不被小于它根号下所有整数整除,则这个数为素数
* 运用数组和循环语句完成程序
*/
package t5;
import java.util.*;
public class test5 {
public static boolean chek(int n) { //判断是否为素数的方法
for(int i=2;i<=Math.sqrt(n);i++) {
if(n%i==0)
return false;
}
return true;
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in); //输入N的数值
int n=sc.nextInt();
int[] array=new int[1000];
int k=0;
for(int i=2;i<=n;i++) //调用方法,并将素数存入数组
{
if(chek(i))
{
array[k]=i;
k++;
}
}
for (int i=0;i<k;i++) //输出数组元素
{
System.out.println(array[i]);
}
sc.close(); //关闭Scanner(关闭输入流)
}
}
测试代码:
package cy;
import static org.junit.Assert.*;
import java.io.*;
import org.junit.Test;
import java.io.FileNotFoundException;
import java.lang.AssertionError;
/**
* Created by cy on 2016/4/24.
*/
public class Test5Test {
@org.junit.Test
public void testChek() throws FileNotFoundException,EOFException{
try {
if("n<0") {
throw new FileNotFoundException();
}else {
throw new EOFException();
}
}catch(FileNotFoundException n) {
n.printStackTrace();
throw n;
}catch(EOFException n) {
n.printStackTrace();
throw n;
}
}
}
6.实验报告中统计自己的PSP(Personal Software Process)时间
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 30分钟 | 6.7% |
设计 | 30分钟 | 6.7% |
代码实现 | 120分钟 | 26.7% |
测试 | 240分钟 | 53.3% |
分析总结 | 30分钟 | 6.7% |
参考资料
1.《解析极限编程》
2.《构建之法 (电子版)》,著者邹欣Blog
3.《结对编程技术》
4.《版本控制之道》
5.《重构》
6.《重构与模式》
7.《程序设计实践》