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 ...
随机推荐
- 谈谈在.NET Core中使用Redis和Memcached的序列化问题
前言 在使用分布式缓存的时候,都不可避免的要做这样一步操作,将数据序列化后再存储到缓存中去. 序列化这一操作,或许是显式的,或许是隐式的,这个取决于使用的package是否有帮我们做这样一件事. 本文 ...
- 【Luogu2444】病毒(AC自动机)
[Luogu2444]病毒(AC自动机) 题面 洛谷 题解 如果存在一个无限长的串 证明可以在\(AC\)自动机上找到一个环 然后在上面可以无限跳 所以构建\(AC\)自动机 在上面跑\(dfs\)就 ...
- 【Luogu3808】多项式乘法FFT(FFT)
题目戳我 一道模板题 自己尝试证明了大部分... 剩下的还是没太证出来... 所以就是一个模板放在这里 以后再来补东西吧.... #include<iostream> #include&l ...
- [BZOJ1610] [Usaco2008 Feb] Line连线游戏 (set)
Description Farmer John最近发明了一个游戏,来考验自命不凡的贝茜.游戏开始的时 候,FJ会给贝茜一块画着N (2 <= N <= 200)个不重合的点的木板,其中第i ...
- 小结:c++中的new、operator new和placement new
小结:c++中的new.operator new和placement new new(也称作new operator),是new 操作符,不可重载 class T{...}; T *t = new T ...
- 【python学习笔记】7.更加抽象
[python学习笔记]7.更加抽象 类的定义就是执行代码块 在内存保存一个原始实例,可以通过类名来访问 类的实例化,是创建一个原始实例的副本, 并且所有成员变量与原始实例绑定 通过修改实例变量,可以 ...
- 深度揭秘腾讯云TSF日调用量超万亿次背后技术架构
腾讯云TSF是整合外部开源框架和腾讯内部历经多年锤炼的PaaS平台打造而成的企业级分布式应用服务开发与托管平台,本文重点对TSF中负责服务托管的PaaS平台进行揭秘,从技术角度解析TSF 平台是如何每 ...
- java反射使用及性能比较
环境准备 package com.lilei.pack09; public class Logger { public void show(){ System.out.println("he ...
- 如约而至,Java 10 正式发布!
3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- selenium 学习之路开始了,一遍搬一遍理解学习,加油!!!
selenium 学习之路开始了,一遍搬一遍理解学习,加油!!!