2016-2017-2 实验报告目录:   1   2   3   4   5



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 pull git add git commit git push git status git 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 Down Move 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%

【返回目录】

参考资料:

【返回目录】

20162330 实验三 《敏捷开发与XP实践》 实验报告的更多相关文章

  1. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  2. 20162311 实验三 敏捷开发与XP实践 实验报告

    20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...

  3. 20165308实验三 敏捷开发与XP实践实验报告

    实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...

  4. 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...

  5. 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  6. 20155220 实验三 敏捷开发与XP实践 实验报告

    20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  7. # 20155224 实验三 敏捷开发与XP实践 实验报告

    20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  8. 20155226 实验三 敏捷开发与XP实践 实验报告

    20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  9. 20155311 实验三 敏捷开发与XP实践 实验报告

    20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  10. 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告

    2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...

随机推荐

  1. CSS布局方案

    居中布局 水平居中 1)使用inline-block+text-align 原理:先将子框由块级元素改变为行内块元素,再通过设置行内块元素居中以达到水平居中. 用法:对子框设置display:inli ...

  2. OSS Android SDK

    Android SDK开发包(2014-12-20)  版本号0.2.2   开发包下载地址: http://oss.aliyuncs.com/aliyun_portal_storage/help/o ...

  3. AC自动机模板1(【洛谷3808】)

    题面 题目背景 这是一道简单的AC自动机模版题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 题目描述 给定n个模式串和1个文本串,求有多少个模式串 ...

  4. 动态增加表单元素并获取元素的text和value提交

    以上是效果图 需求是这样的: 专家设置好条件,然后设备检测到达到相应的条件之后,设备发出提醒给用户. 这就需要专家设置好能看懂的条件之后,然后把给专家看的,正常人能看懂的条件和发送的设备的,设备能够识 ...

  5. 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 $ ...

  6. Java NIO FileVisitor 高效删除文件

    在公司项目中,由于做个二维码扫码平台项目,预计每天产生的二维码图片达到十几G,所以要做个定时清理任务来定时清理图片,根据不同场景保留图片,规则是:1.二维码统一登录图片几个小时有效   2.电子名片二 ...

  7. Java对于特殊字符做间隔读入的处理(1.3.4)

    先读进字符串,然后再用split分割,注意当默认间隔符有其他意义时,要用\转义字符转义 这道题是pat的一道题,主要读入方法看前面就行了 import java.util.Scanner; publi ...

  8. Linux shell 脚本(三)

    转载请标明出处:  http://blog.csdn.net/zwto1/article/details/45111547:  本文出自:[zhang_way的博客专栏] 九.使用case 分支 语法 ...

  9. CDN和CDN加速原理

    随着互联网的发展,用户在使用网络时对网站的浏览速度和效果愈加重视,但由于网民数量激增,网络访问路径过长,从 而使用户的访问质量受到严重影响.特别是当用户与网站之间的链路被突发的大流量数据拥塞时,对于异 ...

  10. 叮咚recovery——想刷什么包就刷什么包

    我手机vivo s11t,我之前试过刷机,刷过很多包,发现只有官网下载的相同版本的固件包可以成功刷入,其他的任何的包都不行,我弟弟的手机vivo x3L,遇见和我一样的情况,他想刷小米的MIUI,开始 ...