20169205实验三 敏捷开发与XP实践

20169205实验三 敏捷开发与XP实践

实验内容及步骤

(一)敏捷开发与XP基本知识

敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。
一项实践在XP环境中成功使用的依据通过XP的法则呈现,包括:快速反馈、假设简单性、递增更改、提倡更改、优质工作。
敏捷开发包括很多模式,其中,极限编程(eXtreme Programming,XP)是一种全新而快捷的软件开发方法。XP团队使用现场客户、特殊计划方法和持续测试来提供快速的反馈和全面的交流:
XP是以开发符合客户需要的软件为目标而产生的一种方法论
XP是一种以实践为基础的软件工程过程和思想
XP认为代码质量的重要程度超出人们一般所认为的程度
XP特别适合于小型的有责任心的、自觉自励的团队开发需求不确定或者迅速变化的软件

(二)编码标准

代码标准中很重要的一项是如何给包、类、变量、方法等标识符命名,能很好的命名可以让自己的代码立马上升一个档次。Java中的一般的命名规则有:要体现各自的含义
包、类、变量用名词
方法名用动宾
包名全部小写,如:io,awt
类名第一个字母要大写,如:HelloWorldApp
变量名第一个字母要小写,如:userName
方法名第一个字母要小写:setName

Eclipse菜单下的source->Format可以按Eclipse规定的规范缩进

为了更加有层次感和规范性,根据代码逻辑加入一些空行

(三)结对编程

共同学习代码。
编写了一个日历小程序。

其中,我负责编写日历具体实现代码,另一位同学负责编写界面。
其中CalenderFrame.java类是界面由同伴编写
CalenderBean.java类和CalendarMainClass.java由我编写其中最主要的功能是闰年的判断,代码如下:

ublic String[] getCalendar()
    {
        String a[]=new String[42];
        Calendar date=Calendar.getInstance();
        date.set(year,month-1,1);
        int week=date.get(Calendar.DAY_OF_WEEK)-1;
        int day=0;

        //判断大月份
        if(month==1||month==3||month==5||month==7
                ||month==8||month==10||month==12)
        {
            day=31;
        }

        //判断小月
        if(month==4||month==6||month==9||month==11)
        {
            day=30;
        }

        //判断平年与闰年
        if(month==2)
        {
            if(((year%4==0)&&(year%100!=0))||(year%400==0))
            {
                day=29;
            }

            else
            {
                day=28;
            }
        }

        for(int i=week,n=1;i<week+day;i++)
        {
            a[i]=String.valueOf(n) ;
            n++;
        }
        return a;
    }

(四)下载搭档的Complex类并编写测试

(五) 重构代码

重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更。

public boolean isLeap(int year) {
  return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
 
public static int getMonthDays(int year, int month) {
  int numberDays = 0;
 
  switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
      numberDays = 31;
      break;
 
    case 4:
    case 6:
    case 9:
    case 11:
      numberDays = 30;
      break;
 
    case 2:
      numberDays = isLeap(year) ? 29 : 28;
      break;
  }
 
  return numberDays;
}

搭档这段代码使用了switch语句,然而这种写法在重构中是不推荐使用的具体改动如下
重构后

public boolean isLeap(int year) {
  return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
 
private int getFebruaryDays(int year) {
  return this.isLeap(year) ? 29 : 28;
}
 
public int getMonthDays(int year, int month) {
  int[] months = new int[] { 31, this.getFebruaryDays(year), 31, 30, 31, 30,
31, 31, 30, 31, 30, 31 };
 
  return months[month];
}

截图如下

实验中的问题和解决过程

java的重构模式都有哪些?

解决

重命名方法重构模式、引入解释性变量重构模式、以查询取代临时变量重构模式
重命名方法重构模式建议执行如下的步骤来完成:
1.建立一个具有新名称的方法
2.将旧方法的方法体复制进新方法
3.讲旧方法的方法体修改为调用新方法
4.将所有引用旧方法的地方修改为引用新方法
5.删除旧方法
引入解释性变量重构模式步骤相对简单,如下:
1.声明一个局部变量,并将其初始化为需要替换的表达式部分
2.对于复杂的表达式,用新的局部变量代替其中需要替换的部分
3.对于该表达式的其他部分,重复这个过程
以查询取代临时变量重构模式的步骤如下:
1.找出只赋值了一次的局部变量
2.将该局部变量声明为final并重新编译(以确保该变量的确只赋值了一次)
3.复制赋值语句的等号右侧的表达式,并将其修改为一个新方法的方法体
4.将赋值语句的等号右侧更改为对新方法的调用
5.将所有对该局部变量的使用替换为对新方法的调用
6.删除赋值语句以及局部变量的声明

作业项目地址

码云项目地址

代码托管

安卓项目地址

项目地址

实验总结

步骤 耗时 百分比
需求分析 20min 13.8%
设计 30min 20.7%
代码实现 60min 41.4%
测试 15min 10.3%
总结分析 20min 13.8%

感想

希望能够通过系统地学习,探索一些开源项目并改进功能,养成良好的开发习惯,形成一套完整的android生态知识体系,并能完全自主开发一款具有一定实用价值的app。

posted @ 2017-04-27 11:03  20169205-lewo  阅读(302)  评论(0编辑  收藏  举报