孙星

2016-2017 《移动平台开发》实验三 敏捷开发与XP实践

概述

软件=程序+软件工程
软件企业=软件+商业模式

XP是一种轻量(敏捷)、高效、低风险、柔性、可预测、科学而且充满乐趣的软件开发方式。

  • 在更短的周期内,更早地提供具体、持续的反馈信息。
  • 在迭代的进行计划编制,首先在最开始迅速生成一个总体计划,然后在整个项目开发过程中不断的发展它。
  • 依赖于自动测试程序来监控开发进度,并及早地捕获缺陷。
  • 依赖于口头交流、测试和源程序进行沟通。
  • 倡导持续的演化式设计。
  • 依赖于开发团队内部的紧密协作。
  • 尽可能达到程序员短期利益和项目长期利益的平衡。

XP软件开发是什么样的通过 XP准则来表达:

  • 沟通 :XP认为项目成员之间的沟通是项目成功的关键,并把沟通看作项目中间协调与合作的主要推动因素。
  • 简单 :XP假定未来不能可靠地预测,在现在考虑它从经济上是不明智的,所以不应该过多考虑未来的问题而是应该集中力量解决燃眉之急。
  • 反馈 :XP认为系统本身及其代码是报告系统开发进度和状态的可靠依据。系统开发状态的反馈可以作为一种确定系统开发进度和决定系统下一步开发方向的手段。
  • 勇气:代表了XP认为人是软件开发中最重要的一个方面的观点。在一个软件产品的开发中人的参与贯穿其整个生命周期,是人的勇气来排除困境,让团队把局部的最优抛之脑后,达到更重大的目标。表明了XP对“人让项目取得成功”的基本信任态度。

XP的法则:

  • 快速反馈:及时地、快速地获取反馈,并将所学到的知识尽快地投入到系统中去。也就是指开发人员应该通过较短的反馈循环迅速地了解现在的产品是否满足了客户的需求。这也是对反馈这一价值观的进一步补充。
  • 简单性假设:类似地,简单性假设原则是对简单这一价值观的进一步补充。这一原则要求开发人员将每个问题都看得十分容易解决,也就是说只为本次迭代考虑,不去想未来可能需要什么,相信具有将来必要时增加系统复杂性的能力,也就是号召大家出色地完成今天的任务。
  • 逐步修改:就像开车打方向盘一样,不要一次做出很大的改变,那样将会使得可控性变差,更适合的方法是进行微调。而在软件开发中,这样的道理同样适用,任何问题都应该通过一系列能够带来差异的微小改动来解决。
  • 提倡更改:在软件开发过程中,最好的办法是在解决最重要问题时,保留最多选项的那个。也就是说,尽量为下一次修改做好准备。
  • 优质工作:在实践中,经常看到许多开发人员喜欢将一些细小的问题留待后面解决。例如,界面的按钮有一些不平整,由于不影响使用就先不管;某一两个成员函数暂时没用就不先写等。这就是一种工作拖泥带水的现象,这样的坏习惯一旦养成,必然使得代码质量大打折扣。

XP的活动:
编码、测试、倾听、设计。

实验

实验一

根据实验三 敏捷开发与XP实践
在IDEA中使用工具(Code->Reformate 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));
}
}```
![](http://images2015.cnblogs.com/blog/1115797/201704/1115797-20170430005120053-1469429373.png)

按照教程中利用快捷键crtl+alt+I可以将IDEA中代码女自动缩进,按照命名格式命名代码,是代码格式规范方便阅读。
## 实验二
在码云上把自己的学习搭档加入自己的项目中,下载搭档的Complex代码,加入不少于三个JUnit单元测试用例,测试成功后git add .; git commit -m "自己学号 添加内容";git push;
提交搭档项目中git log的截图,并加上学号水印信息。
搭档码云:[mao20169219](https://git.oschina.net/md2017/mao20169219/tree/master/exp/exp2/Tdd/test?dir=1&filepath=exp%2Fexp2%2FTdd%2Ftest&oid=47c4f414d82426dd3d8bb89cea748da4043d6554&sha=afebb3a9f4bc35a5ab12f00ddc073b9ddacd0146)
![](http://images2015.cnblogs.com/blog/1115797/201704/1115797-20170430010130037-1671425835.png)
![](http://images2015.cnblogs.com/blog/1115797/201704/1115797-20170430010142381-1016981052.png)
TDD并不是什么高深的理论,其涉及的方法和技巧其实很简单,大家都耳有所闻:面向对象设计、单元测试、重构。
TDD有三个核心原则:
1)没有测试之前不要写任何功能代码
2)只编写恰好能够体现一个失败情况的测试代码
3)只编写恰好能通过测试的功能代码
结对编程:结对编程是XP中的重要实践。在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起做单元测试,一起做集成测试,一起写文档等。

#实验三
结合[实验三 敏捷开发与XP实践](http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA)
完成重构内容的练习,下载搭档的代码,至少进行一项重构,提交重构后代码的截图,加上学号水印。
重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
![](http://images2015.cnblogs.com/blog/1115797/201704/1115797-20170430010906569-473813899.png)
Java代码的重构模式主要有三种:重命名方法重构模式、引入解释性变量重构模式、以查询取代临时变量重构模式
重命名方法重构模式建议执行如下的步骤来完成:
1.建立一个具有新名称的方法
2.将旧方法的方法体复制进新方法
3.讲旧方法的方法体修改为调用新方法
4.将所有引用旧方法的地方修改为引用新方法
5.删除旧方法

#补充课堂测试
1.命令行参数

for(int i=0;i<args.length;i++){
sum=sum+Integer.parseInt(args[i]);
}

2.递归

public class TestArgs {
public static int sum(int i, int[] arr) {
if (i < arr.length - 1)
return arr[i] + sum(i + 1, arr);
else return arr[i];
}
public static void main(String[] args) {
int[] arr = new int [20];
for(int i=0; i<args.length;i++)
{
arr[i]=Integer.parseInt(args[i], 10);
}
System.out.println(sum(0, arr));
}
}

总结:递归方法通俗的将就是自身调用自身。Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。
##遇到的问题
常见的代码覆盖率有下面几种:
语句覆盖(Statement Coverage):这是最常用也是最常见的一种覆盖方式,就是度量被测代码中每个可执行语句是否被执行到了。
判定覆盖(Desicion Coverage):它度量程序中每一个判定的分支是否都被测试到了。
条件覆盖(Condition Coverage):它度量判定中的每个子表达式结果true和false是否被测试到了。
路径覆盖(Path Coverage):它度量了是否函数的每一个分支都被执行了。
前三种覆盖率大家可以查看下面的引用的第3篇 文章 ,这里就不再多说。我们通过一个例子,来看看路径覆盖。比如下面的测试代码中有两个判定分支
代码覆盖率高不能保证安全,真正的安全需要用测试用例覆盖逻辑

##码云截图和链接
链接:https://git.oschina.net/sunxing27/java-besti-is-sx/tree/master/experiment3?dir=1&filepath=experiment3&oid=f91f4a1fe919aa1f7b10bf682166257a4931b92e&sha=2bd9535024965afe93b89e3449c15678a7e131aa
截图:
![](http://images2015.cnblogs.com/blog/1115797/201704/1115797-20170430011549522-404967954.png)

##参考资料
[重构](http://www.jianshu.com/p/ab298b46bf50)
[实验三](http://www.cnblogs.com/rocedu/p/4795776.html)
[20个IntelliJ IDEA重构功能](http://blog.csdn.net/woshilcg/article/details/56012368)

posted on 2017-04-30 00:40  20169221孙星  阅读(152)  评论(1编辑  收藏  举报

导航