20162330 实验三 《敏捷开发与XP实践》 实验报告
20162330 实验三 《敏捷开发与XP实践》 实验报告
课程名称:《程序设计与数据结构》
学生班级:1623班
学生姓名:刘伟康
学生学号:20162330
实验时间:2017年5月12日
实验名称:《敏捷开发与XP实践》
指导老师:娄嘉鹏、王志强老师
主目录
实验内容:
1.XP基础
2.XP核心实践
3.相关工具
实验要求:
1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》、《Vim编辑器》 课程;
2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导;
3.严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施;
实验步骤:
(一)敏捷开发与XP
敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。
敏捷开发包括很多模式。其中,极限编程(eXtreme Programming,XP)是一种全新而快捷的软件开发方法。一项实践在XP环境中成功使用的依据通过
XP的法则呈现,包括:快速反馈、假设简单性、递增更改、提倡更改、优质工作。
XP软件开发的基石是XP的活动,包括:编码、测试、倾听、设计。
项目成员用户成功执行XP活动的技术通过XP实践来呈现,包括编程、团队、过程相关的12条实践,我们关注其中的编码标准,结对编程,代码集体所有,测试,重构等实践。上次实验已经讲过TDD,通过学习这些实践,可以形成以测试为核心的开发流程。
敏捷可以作为一种做事的方式,掌握好的在以后的工作中也会受益无穷。
(二)编码标准
编写代码一个重要的认识是“程序大多时候是给人看的”,编程标准使代码更容易阅读和理解,甚至可以保证其中的错误更少。编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。
编码标准中的版式反例:(该程序影响了可读性。程序的版式追求清晰、美观,是程序风格的重要因素。)

- 代码标准中很重要的一项是如何给包、类、变量、方法等标识符命名,能很好的命名可以让自己的代码立马上升一个档次。Java中的一般的命名规则有:
- 要体现各自的含义
- 包、类、变量用名词
- 方法名用动宾
- 包名全部小写,如:io,awt
- 类名第一个字母要大写,如:HelloWorldApp
- 变量名第一个字母要小写,如:userName
- 方法名第一个字母要小写:setName
可以参考邹欣老师写的代码规范与代码复审。
(三)结对编程
- 结对编程中有两个角色:
- 驾驶员(Driver)是控制键盘输入的人。
- 领航员(Navigator)起到领航、提醒的作用。
(四)版本控制
- 注意Git的使用
了解git pullgit addgit commitgit pushgit statusgit log等命令行的用法和含义。
(五)重构
重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更。
一个完整的重构流程包括:
1.从版本控制系统代码库中Check out code
2.读懂代码(包括测试代码)
3.发现bad smell
4.Refactoring
5.运行所有的Unit Tests
6.往代码库中Check in code
(六)实践项目
1.在IDEA中使用工具(Code->Reformat Code)把示例代码重新格式化,再研究一下Code菜单;
2.在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例;
3.完成重构内容的练习,下载搭档的代码,至少进行三项重构;
4.以结对的方式完成Java密码学相关内容的学习。
5.实验报告中统计自己的PSP(Personal Software Process)时间
前期准备:
- 预先安装好IDEA,并配置好环境变量。
需求分析:
1.需要掌握单元测试和TDD;
2.需要理解并掌握Git的用法;
3.需要初步掌握IDEA中的一些菜单工具;
4.需要初步掌握Java密码学相关知识;
代码实现:
1.在IDEA中使用工具(Code->Reformat 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中时,便被自动格式化了,这样一来用不用Reformat不都无所谓了吗?其实还是有细微差别的,如下图(左:直接复制到IDEA后,右:Reformat之后)

在Code菜单中找出一项让自己感觉最好用的功能:
我主要试用了Code中的Override Methods...功能,可以直接复写方法:

其实还有一些其他的功能比较实用,比如可以给代码块增加条件循环语句的Surround with...功能,可以调整任何一行代码位置的Move Line DownMove Line Up功能,包括之前使用过的可以生成测试代码框架的Generate...功能等。

2.在码云上把自己的学习搭档加入自己的项目中,确认搭档的项目加入自己后,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例:


【代码链接】3.完成重构内容的练习,下载搭档的代码,至少进行三项重构:
(感觉在重构时考虑得太少,所以没有发现示例代码中需要改进的地方,只是尝试了一些基本功能)

【代码链接】4.以结对的方式完成Java密码学相关内容的学习:
(我选择在虚拟机上进行学习和测试,不懂的一些地方也已经向张旭升请教,感觉这方面内容并不熟练,理解至关重要)

【代码链接】
测试过程及遇到的问题:
1.由于之前在IDEA删除了一些项目,我在IDEA中重新克隆项目时出现clone failed的问题:

我打开克隆项目发现有但是不能运行:

解决办法:通过搜索,我查找到正确的解决方法,这个错误是因为没有设置output的路径,在网上看到了两种方法:

第一种方法:在Modules设置里勾选”Inherit project compile path” ,由于bin文件要设置绝对路径我就没有修改此路径,主要是用了第二种方法:设置Project中的”Project compiler output” 。

设置好就可以正常运行了。

2.在使用TDD进行单元测试时,不知道怎么添加Junit生成的方法框架中的测试代码,上一次实验是直接给出的期望测试代码,但是期望代码的格式框架我并没有掌握:


解决办法:看了王彪上次的实验博客,掌握了基本Assert的框架,并询问了张旭升之后,可以写出基本的单元测试的代码:
Assert的基本框架如下:import junit.framework.*; public class TestSimple extends TestCase{ public TestSimple(String name){ super(name);} public void testAdd(){ assertEquals(2,1+1);} }首先要根据源代码找到测试类中应该被测试的方法,其次要使用assertEquals期望值的格式进行测试,这样的好处是:即使出现红条(实际值与期望值不符合)也会显示提示:

之后只需弄清出错的原因并修改即可测试成功:

3.在学习Java密码学相关内容时不理解凯撒密码(如下)的转换机制。
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); if(c>='a' && c<='z') // 是小写字母 { c+=key%26; //移动key%26位 if(c<'a') c+=26; //向左超界 if(c>'z') c-=26; //向右超界 } else if(c>='A' && c<='Z') // 是大写字母 { c+=key%26; if(c<'A') c+=26; if(c>'Z') c-=26; } es+=c; } System.out.println(es); }解决办法:询问结对队友张旭升,了解到:
1.凯撒密码中只针对字母类型的明文进行加密,并且毫无遗漏;
2.如果给空格或者其他字符串类型的(数字、符号等)加密,会以明文形式输出;
3.之所以输入明文“Hello World!”,取密钥4,运行:java Caesar "Hello World!" 4将输出“Lipps Asvph!”的结果,是因为凯撒密码是以字母对应的ASCII码为机制进行加密的,所以比较容易破解。
在看了ASCII码表之后,理解起来就容易多了。
分析总结:
对于本周的实验,我的投入较少,就是感觉每次环境配置问题消耗的时间有些多,导致真正学习实现代码时,感觉有些缺少动力了,所以效率就低了下来。
不得不说,本周的密码学内容有些难度,看完之后总体感觉有点懵,这是一块很有技术含量的内容,实践理解在先。其次,我觉得对于IDEA中的重构,我的掌握程度不够,重构的目的是消除有臭味道的代码。这个概念非常宽泛,不仅包括代码重复,还有方法过长、参数列过长、条件逻辑过度复杂、分支语句等等方面。这其中的每一点都应该纳入以后编程时的考虑内容。
希望自己可以及时调整状态,找回之前的一些学习动力。
PSP(Personal Software Process)时间统计:
步骤 耗时 百分比 需求分析 40min 16% 设计 40min 16% 代码实现 80min 32% 测试 60min 24% 分析总结 30min 12%
参考资料:
- Intellj IDEA 简易教程
- 使用JUnit学习Java
- 实验三 敏捷开发与XP实践
- 2016-2017-2学期《程序设计与数据结构》教学进程
- 国际C语言混乱代码大赛 (IOCCC, The International Obfuscated C Code Contest)
- 代码规范与代码复审
- Java 密码学算法
20162330 实验三 《敏捷开发与XP实践》 实验报告的更多相关文章
- 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20162311 实验三 敏捷开发与XP实践 实验报告
20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...
- 20165308实验三 敏捷开发与XP实践实验报告
实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...
- 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...
- 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20155220 实验三 敏捷开发与XP实践 实验报告
20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- # 20155224 实验三 敏捷开发与XP实践 实验报告
20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155226 实验三 敏捷开发与XP实践 实验报告
20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155311 实验三 敏捷开发与XP实践 实验报告
20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告
2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...
随机推荐
- CSS布局方案
居中布局 水平居中 1)使用inline-block+text-align 原理:先将子框由块级元素改变为行内块元素,再通过设置行内块元素居中以达到水平居中. 用法:对子框设置display:inli ...
- OSS Android SDK
Android SDK开发包(2014-12-20) 版本号0.2.2 开发包下载地址: http://oss.aliyuncs.com/aliyun_portal_storage/help/o ...
- AC自动机模板1(【洛谷3808】)
题面 题目背景 这是一道简单的AC自动机模版题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 题目描述 给定n个模式串和1个文本串,求有多少个模式串 ...
- 动态增加表单元素并获取元素的text和value提交
以上是效果图 需求是这样的: 专家设置好条件,然后设备检测到达到相应的条件之后,设备发出提醒给用户. 这就需要专家设置好能看懂的条件之后,然后把给专家看的,正常人能看懂的条件和发送的设备的,设备能够识 ...
- CentOS 静态IP分配,提示Error, some other host already uses address解决办法
(一)第一 修改 ifup-eth vi /etc/sysconfig/network-scripts/ifup-eth #if ! /sbin/arping -q -c 2 -w 3 -D -I $ ...
- Java NIO FileVisitor 高效删除文件
在公司项目中,由于做个二维码扫码平台项目,预计每天产生的二维码图片达到十几G,所以要做个定时清理任务来定时清理图片,根据不同场景保留图片,规则是:1.二维码统一登录图片几个小时有效 2.电子名片二 ...
- Java对于特殊字符做间隔读入的处理(1.3.4)
先读进字符串,然后再用split分割,注意当默认间隔符有其他意义时,要用\转义字符转义 这道题是pat的一道题,主要读入方法看前面就行了 import java.util.Scanner; publi ...
- Linux shell 脚本(三)
转载请标明出处: http://blog.csdn.net/zwto1/article/details/45111547: 本文出自:[zhang_way的博客专栏] 九.使用case 分支 语法 ...
- CDN和CDN加速原理
随着互联网的发展,用户在使用网络时对网站的浏览速度和效果愈加重视,但由于网民数量激增,网络访问路径过长,从 而使用户的访问质量受到严重影响.特别是当用户与网站之间的链路被突发的大流量数据拥塞时,对于异 ...
- 叮咚recovery——想刷什么包就刷什么包
我手机vivo s11t,我之前试过刷机,刷过很多包,发现只有官网下载的相同版本的固件包可以成功刷入,其他的任何的包都不行,我弟弟的手机vivo x3L,遇见和我一样的情况,他想刷小米的MIUI,开始 ...