20145214实验三 敏捷开发与XP实践
XP准则
-
沟通 :XP认为项目成员之间的沟通是项目成功的关键,并把沟通看作项目中间协调与合作的主要推动因素。
-
简单 :XP假定未来不能可靠地预测,在现在考虑它从经济上是不明智的,所以不应该过多考虑未来的问题而是应该集中力量解决燃眉之急。
-
反馈 :XP认为系统本身及其代码是报告系统开发进度和状态的可靠依据。系统开发状态的反馈可以作为一种确定系统开发进度和决定系统下一步开发方向的手段。
-
勇气:代表了XP认为人是软件开发中最重要的一个方面的观点。在一个软件产品的开发中人的参与贯穿其整个生命周期,是人的勇气来排除困境,让团队把局部的最优抛之脑后,达到更重大的目标。表明了XP对“人让项目取得成功”的基本信任态度。
-
软件开发的活动:编码、测试、倾听、设计。其中的编码标准,结对编程,代码集体所有,测试,重构等实践过程较为重要。
编码标准
-
编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。
-
Java中的一般的命名规则有:
(1)要体现各自的含义
(2)包、类、变量用名词
(3)方法名用动宾
(4)包名全部小写,如:io,awt
(5)类名第一个字母要大写,如:HelloWorldApp
(6)变量名第一个字母要小写,如:userName
(7)方法名第一个字母要小写:setName
-
标识符名字应当直观且可以拼读,可望文知意,不必进行“解码”,一般采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名,用词要准确
-
标识符的长度“min-length && max-information”的原则,比如:maxVal 比 maxValueUntilOverflow要好些,可以通过去元音法把变量名变短,如returnValue->rtnVal ,message->msg;一般全局变量用具有说明性的名字,局部变量用短名字:单字符的名字,常见的如i,j,k等用作局部变量。
版本控制
-
1、下载并安装好git,在cmd中输入git指令
-
2、在命令行下模式下给git配置用户名和邮箱
-
3、在当前文件夹右键选择 git bush here ,输入 git add . 把要提交的文件的信息添加到索引库中
-
4、输入 git commit -m 命令,将代码在本地环境下提交
-
5、输入 ssh -T git@git.oschina.net 检测联通性
-
6、输入 git push origin master 将代码提交至开源中国
结对编程
-
重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更。
-
一个完整的重构流程包括:
-
从版本控制系统代码库中Check out code
-
读懂代码(包括测试代码)
-
发现bad smell
-
Refactoring
-
运行所有的Unit Tests
-
往代码库中Check in code
-
-
1、将结对伙伴添加到项目中,作为开发者。我的结对伙伴是:20145219宋歌
-
2、自己编写的代码成功上传后,对方下载后进行修改。
-
3、下载对方的代码。
-
4、修改对方的代码,重复此过程。
-
5、最后,用Junit进行测试。
-
6、运行最后的代码。
重构
-
1、重新编写之前学过的角色扮演游戏代码。编写代码时,由于设置的类名称和代码中不同,出现错误。
-
2、用
Refactor
中的Rename
重构。
-
3、用
Refactor
中的Encapsulate Field...
再次重构。
-
4、继续用
Extract Method...
对最后输出信息的语句进行重构。
-
5、在
Code
中选择Generate
,给Role类产生一个toString方法
-
6、重构后的代码及运行结果如下。
class Role {
private String name;
private int level;
private int blood;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
@Override
public String toString() {
return "Role{" +
"name='" + name + '\'' +
", level=" + level +
", blood=" + blood +
'}';
}
}
public class RoleTest{
public static void main(String[] args){
Role role = new Role();
role.setName("Swordsman");
role.setLevel(1);
role.setBlood(200);
System.out.println("角色信息:名称:" + role.getName() + "等级:" + role.getLevel() + "血量:" + role.getBlood());
}
}
产生的问题及解决
问题1
-
在在命令行下模式下给git配置用户名和邮箱后想要添加公钥时,仍然用命令行进行,结果提示错误。
-
结合之前进行git公钥添加的经验发现应该用右键的Git Bush here进行添加,并且因为已经有过一个公钥,所以不用再次添加,只需要提交代码即可。
问题2
-
下载对方代码时出现错误。
-
询问同学后发现需要新建一个文件夹,新建后再Git Bash就可以成功。
我的PSP时间
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 10min | 12.5 |
设计 | 20min | 25 |
代码实现 | 20min | 25 |
测试 | 20min | 25 |
分析总结 | 10min | 12.5 |
实验心得
通过结对项目,我认识到了合作的重要性,紧密的合作能够提高我们的能力。代码测试过程中出现很多错误,但经过互相的合作和探讨,加以改进,便成功运行。我通过这次实验也学了这些非常有用的知识,如敏捷开发与xp的具体知识,编码标准的学习,结对编程的具体过程,版本控制,重构,怎么使用git等,主要是学到了如何规范化一个程序,总之我在这次的实践中收获很多。