java实验三 敏捷开发与XP实践
实验内容
-
XP基础
-
XP核心实践
-
相关工具
实验要求
1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程
2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导
- 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。
实验步骤
(一)敏捷开发与XP
1、软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
2、软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。
3、人们在开发、运营、维护软件的过程中有很多技术、做法、习惯和思想体系。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发流程”。
软件开发流程的目的:为了提高软件开发、运营、维护的效率,并提高软件的质量、用户满意度、可靠性和软件的可维护性。
4、编程:Java中单元测试要和JUnit的应用结合起来,建模要和Umbrello或StarUML的应用结合起来。
5、①软件工程=开发流程+工具 ②软件=程序+软件工程 ③软件企业=软件+商业模式
6、常见的开发流程有:
•RUP(Rational Unified Process)
•PSP(Personal Software Process )
•TSP(Team Software Process )
•Agile Process
•……
7、敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。敏捷开发宣言:
①个体交互胜过过程和工具。
②可以工作的软件胜过面面俱到的文档。
③客户合作胜过合同谈判。
④响应变化胜过遵循计划。
8、极限编程(eXtreme Programming,XP)是:
①XP是以开发符合客户需要的软件为目标而产生的一种方法论
②XP是一种以实践为基础的软件工程过程和思想
③XP认为代码质量的重要程度超出人们一般所认为的程度
④XP特别适合于小型的有责任心的、自觉自励的团队开发需求不确定或者迅速变化的软件
9、XP准则:
①沟通 :成员之间的沟通。②简单 :集中力量解决燃眉之急。③反馈 ④勇气:人让项目取得成功。
10、一项实践在XP环境中成功使用的依据通过XP的法则呈现,包括:快速反馈、假设简单性、递增更改、提倡更改、优质工作。
11、XP软件开发的基石是XP的活动,包括:编码、测试、倾听、设计。
(二)编码标准
1、重要的认识:“程序大多时候是给人看的”
2、编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。程序的版式追求清晰、美观,是程序风格的重要因素。
常见代码
带有缩进
带有空格
3、java中给包、类、变量、方法等标识符命名的一般规则有:
①要体现各自的含义
②包、类、变量用名词
③方法名用动宾
④包名全部小写,如:io,awt
⑤类名第一个字母要大写,如:HelloWorldApp
⑥变量名第一个字母要小写,如:userName
⑦方法名第一个字母要小写:setName
例如:
①标识符名字应当直观且可以拼读,可望文知意,不必进行“解码”,一般采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名,用词要准确例如“当前值”应该起名currentValue,写成nowValue就不准确了,但还凑合,写成dqz(dang qian zhi 首字母)就是笑话了。
②标识符的长度“min-length && max-information”的原则,比如:maxVal 比 maxValueUntilOverflow要好些,可以通过去元音法把变量名变短,如returnValue->rtnVal ,message->msg;一般全局变量用具有说明性的名字,局部变量用短名字:单字符的名字,常见的如i,j,k等用作局部变量。
4、代码标准,可以遵循以下原则:
①不要预先花费太多时间。
②目标应该是团队中没有人辨认各自的代码。
③以团队为单位对某一标准达成协议,然后遵循这一标准。
④不是事无巨细的规则标准列表,而是确保代码可交流的指导方针。
⑤代码标准开始时应很简单,然后根据团队经验逐步进化。
⑥创建能够工作的最简单标准,然后逐步发展。
⑦只制定适合本团队的。
(三)结对编程
1、结对编程是XP中的重要实践。在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起做单元测试,一起做集成测试,一起写文档等。
结对编程中有两个角色:
①驾驶员(Driver)是控制键盘输入的人。写设计文档,进行编码和单元测试等XP开发流程。
②领航员(Navigator)起到领航、提醒的作用。审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题。领航员要控制时间。每工作一小时休息15分钟。
2、主动参与。①我们的代码。②只有水平上的差距,没有级别上的差异。两人结对,尽管可能大家的级别资历不同,但不管在分析、设计或编码上,双方都拥有平等的决策权利。
团队精神是好多地方都强调的一个精神,最小的团队就是一对一的二人团队了,培养团队精神从结对编程开始吧。社会生活中人与人相处最重要的是诚信,有同理心,互利。结对编程中大家会出现分歧,如何更有效地合作要做到对事不对人,掌握这些是可以终生受益的,如何影响小伙伴,大家参考一下两人合作:要会做汉堡包。
结对编程小组成员博客20145324王嘉澜:http://www.cnblogs.com/SJZGM10/p/5422303.html
1、下载她上传好的代码
2、自己做修改
3、重新上传
(四)版本控制
1、XP的集体所有制意味着每个人都对所有的代码负责,每个人都可以更改代码的任意部分。
2、结对编程对这一实践贡献良多:借由在不同的结对中工作,所有的程序员都能看到完全的代码。集体所有制的一个主要优势是提升了开发程序的速度,因为一旦代码中出现错误,任何程序员都能修正它。这意味着代码要放到一个大家都能方便获取的地方,我们叫代码仓库。这引出另外一个话题叫版本控制(Version Control)。
3、版本控制的特点和功能:
①版本控制提供项目级的 undo(撤销) 功能: 没有什么事情是终结版本,任何错误必须很容易回滚。这让你的团队工作自由快速的工作, 而且对于修正错误也非常自信。
②版本控制允许多人在同一代码上工作, 只要遵守一定的控制原则就行。 再也不会发生诸如一个人覆盖了另一个人编辑的代码,导致那个人的修改无效这样的情况。
③版本控制系统保存了过去所作的修改的历史记录。如果你遭遇到一些惊讶的代码,通过版本控制系统可以很容易找出是谁干的, 修改了什么, 修改的时间,如果幸运的话,还能找出原因。
④版本控制系统还支持在主线上开发的同时发布多个软件版本。在软件发布的时候也不需要整个团队的停止工作,不需要冻结代码。
⑤版本控制也是项目级的时间机器,你可以选择任何一个时间, 精确地查看项目在当时的情况。 这对研究非常有用, 也是重现以前某个有问题的发布版本的基础。
4、流行的版本控制工具有CVS,SVN,Git等,更多的可以参考这里。Git是Linus除了Linux操作系统外的另外一个重要发明。
(五)重构
1、重构(Refactor):就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。
2、不改变软件外部行为,它保证了我们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。
如何保证不改变软件外部行为?
重构后的代码要能通过单元测试。如何使其更加易于阅读、易于维护和易于变更 ?
重构重要吗?重构几乎是现代IDE的标配了。
3、重构的第一项功能就是Rename,可以给类、包、方法、变量改名字。
如下例:
重构类名:
重构变量名:
!
重构name:
封装id:
封装age:
4、一个完整的重构流程包括:
①从版本控制系统代码库中Check out code
③发现bad smell
④Refactoring
⑤运行所有的Unit Tests
⑥往代码库中Check in code