20145118 《Java程序设计》 实验报告三

实验三 敏捷开发与XP实践

实验内容

  1. XP基础
  2. XP核心实践
  3. 相关工具

实验要求

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刘芳芳 博客地址是

http://www.cnblogs.com/l-cat/

产品代码是:

/*
 * 设计思路:给一个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.《程序设计实践》

原文地址:https://www.cnblogs.com/cy1123/p/5427283.html