20155314 2016-2017-2 《Java程序设计》实验三 敏捷开发与XP实践

20155314 2016-2017-2 《Java程序设计》实验三 敏捷开发与XP实践

实验内容

  1. XP基础html

  2. XP核心实践java

  3. 相关工具git

实验知识点总结

(一)敏捷开发与XP

  • 软件工程:把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程
  • 软件工程包括如下领域:
    • 软件需求分析
    • 软件设计
    • 软件构建
    • 软件测试
    • 软件维护
  • 软件开发流程:人们在开发、运营、维护软件的过程当中有不少技术、作法、习惯和思想体系。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发流程”
  • 软件开发流程的目的:为了提升软件开发、运营、维护的效率,并提升软件的质量、用户满意度、可靠性和软件的可维护性
  • 常见公式:
    • 软件工程=开发流程+工具
    • 软件=程序+软件工程软件企业=软件+商业模式(邹欣老师给出)
  • 常见开发流程:
    • RUP(Rational Unified Process)
    • PSP(Personal Software Process )
    • TSP(Team Software Process )
    • Agile Process
    • ……
  • 敏捷开发(Agile Development):是一种以人为核心、迭代、按部就班的开发方法
  • 极限编程(eXtreme Programming,XP):是一种全新而快捷的软件开发方法。XP团队使用现场客户、特殊计划方法和持续测试来提供快速的反馈和全面的交流:
    • XP是以开发符合客户须要的软件为目标而产生的一种方法论
    • XP是一种以实践为基础的软件工程过程和思想
    • XP认为代码质量的重要程度超出人们通常所认为的程度
    • XP特别适合于小型的有责任心的、自觉自励的团队开发需求不肯定或者迅速变化的软件
  • XP软件开发是什么样的经过XP准则来表达:
    • 沟通 :XP认为项目成员之间的沟通是项目成功的关键,并把沟通看做项目中间协调与合做的主要推进因素。
    • 简单 :XP假定将来不能可靠地预测,在如今考虑它从经济上是不明智的,因此不该该过多考虑将来的问题而是应该集中力量解决燃眉之急。
    • 反馈 :XP认为系统自己及其代码是报告系统开发进度和状态的可靠依据。系统开发状态的反馈能够做为一种肯定系统开发进度和决定系统下一步开发方向的手段。
    • 勇气:表明了XP认为人是软件开发中最重要的一个方面的观点。在一个软件产品的开发中人的参与贯穿其整个生命周期,是人的勇气来排除困境,让团队把局部的最优抛之脑后,达到更重大的目标。代表了XP对“人让项目取得成功”的基本信任态度。
  • 一项实践在XP环境中成功使用的依据经过XP的法则呈现,包括:
    • 快速反馈
    • 假设简单性
    • 递增更改
    • 提倡更改
    • 优质工做
  • XP软件开发的基石是XP的活动,包括:
    • 编码
    • 测试
    • 倾听
    • 设计

(二)编码标准

  • 编写代码一个重要的认识是“程序大多时候是给人看的”,编程标准使代码更容易阅读和理解,甚至能够保证其中的错误更少。
  • 编程标准包含:
    • 具备说明性的名字
    • 清晰的表达式
    • 直截了当的控制流
    • 可读的代码和注释
    • 在追求这些内容时一致地使用某些规则和惯用法的重要性
  • 编码标准中的版式就是一个很好的例子,版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要因素。
  • Java中的通常的命名规则:
    • 要体现各自的含义
    • 包、类、变量用名词
    • 方法名用动宾
    • 包名所有小写,如:io,awt
    • 类名第一个字母要大写,如:HelloWorldApp
    • 变量名第一个字母要小写,如:userName
    • 方法名第一个字母要小写:setName
    • ...

(三)结对编程

结对编程是XP中的重要实践。在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工做。他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一块儿工做。他们一块儿分析,一块儿设计,一块儿写测试用例,一块儿编码,一块儿作单元测试,一块儿作集成测试,一块儿写文档等。程序员

  • 结对编程中有两个角色:
    • 驾驶员(Driver)是控制键盘输入的人。
    • 领航员(Navigator)起到领航、提醒的做用。
  • 如何结对编程:
    • 驾驶员:写设计文档,进行编码和单元测试等XP开发流程。
    • 领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否须要和如何重构;帮助驾驶员解决具体的技术问题。
    • 驾驶员和领航员不断轮换角色,不要连续工做超过一小时,每工做一小时休息15分钟。领航员要控制时间。
    • 主动参与。任何一个任务都首先是两我的的责任,也是全部人的责任。没有“个人代码”、“你的代码”或“他/她的代码”,只有“咱们的代码”。
    • 只有水平上的差距,没有级别上的差别。两人结对,尽管可能你们的级别资历不一样,但无论在分析、设计或编码上,双方都拥有平等的决策权利。
  • 结对编程中出现分歧,应对事不对人

(四)版本控制(Version Control)

  • 代码仓库
  • 版本控制的好处:
    • 版本控制提供项目级的 undo(撤销) 功能: 没有什么事情是终结版本, 任何错误必须很容易回滚。 假设你在使用世界上最复杂的文字处理系统。 它具有了全部的能想到的功能,就是没有支持 DELETE(删除) 键。想象你打字的时候得多么的谨慎和缓慢吧, 特别是一篇超大的文档的快临近末尾的时候, 一个不当心就要重头再来(试想你选中全部的文字, 不当心按了 DELETE 键, 由于没有撤销功能,只好从新录入)。编辑文字和版本控制相同,任什么时候候都须要回滚,不管是一个小时, 一天, 仍是一周, 这让你的团队工做自由快速的工做, 并且对于修正错误也很是自信。
    • 版本控制容许多人在同一代码上工做, 只要遵照必定的控制原则就行。 不再会发生诸如一我的覆盖了另外一我的编辑的代码,致使那我的的修改无效这样的状况。
    • 版本控制系统保存了过去所做的修改的历史记录。若是你遭遇到一些惊讶的代码,经过版本控制系统能够很容易找出是谁干的, 修改了什么, 修改的时间, 若是幸运的话,还能找出缘由。
    • 版本控制系统还支持在主线上开发的同时发布多个软件版本。在软件发布的时候也不须要整个团队的中止工做,不须要冻结代码。
    • 版本控制也是项目级的时间机器,你能够选择任何一个时间, 精确地查看项目在当时的状况。 这对研究很是有用, 也是重现之前某个有问题的发布版本的基础。

(五)重构

  • 重构的概念:算法

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

  • 重构中一个很是关键的前提就是“不改变软件外部行为”,它保证了咱们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。
    • 如何保证不改变软件外部行为:重构后的代码要能经过单元测试
    • 如何使其更加易于阅读、易于维护和易于变动设计模式给出了重构的目标。
  • 修改软件的四种动机:
    • 增长新功能
    • 原有功能有BUG
    • 改善原有程序的结构
    • 优化原有系统的性能
  • 须要重构的地方:有臭味道(Bad Smell)的代码——Duplicated Code(重复的代码)
    • 最单纯的Duplicated Code就是[同一个class内的两个方法含有相同表达式(expression)]。这时候你须要作的就是采用Extract Method提炼出重复的代码,而后让这两个地点都调用被提炼出来的那一段代码。
    • 另外一种常见状况就是[两个互为兄弟(sibling)的subclasses内含有相同表达式]。要避免这种状况,只须要对两个classes都使用Extract Method,而后再对被提炼出的代码使用Pull Up Method,将它推入superclass内。
    • 若是代码之间只是相似,并不是彻底相同,那么就得运用Extract Method将类似部分和差别部分割开,构成单独一个方法。而后你可能发现或许能够运用Form Template Method得到一个Template Method设计模式。
    • 若是有些方法以不一样的算法作相同的事,你能够择定其中较清晰的一个,并使用Substitute Algorithm将其它方法的算法替换掉。
    • 若是两个绝不相关的classes内出现Duplicaded Code,你应该考虑对其中一个使用Extract Class,将重复代码提炼到一个独立class中,而后在另外一个class内使用这个新class。可是,重复代码所在的方法也可能的确只应该属于某个class,另外一个class只能调用它,抑或这个方法可能属于第三个class,而另两个classes应该引用这第三个class。你必须决定这个方法放在哪儿最合适,并确保它被安置后就不会再在其它任何地方出现。
  • 一个完整的重构流程:
    1. 从版本控制系统代码库中Check out code
    2. 读懂代码(包括测试代码)
    3. 发现bad smell
    4. Refactoring
    5. 运行全部的Unit Tests
    6. 往代码库中Check in code
  • 在IDEA下重构实践以下图:












    编程

(六)实践项目

实验报告中统计本身的PSP(Personal Software Process)时间

步骤 耗时 百分比
需求分析 6min 6.5%
设计 20min 21.7%
代码实现 25min 27.2%
测试 11min 12.0%
分析总结 30min 32.6%

实验过程当中遇到的问题及解决

(1)关于git for windows中文乱码问题


尝试修改编码为UTF-8后仍不成功:




在改成GBK(Chinese)后终于解决:


终于全变成中文啦ヾ(๑╹◡╹)ノ"windows

(2)关于git push不成功的问题及解决

(3)关于git log乱码问题


解决:在option中将编码改为UTF-8便可~
设计模式

(4)关于git Bash崩溃的问题

git Bash忽然打不开了,很难过QAQ

解决:只好用git-cmd了(T ^ T)
安全

实验体会与总结

“本身动手,丰衣足食。”

本次Java实验让我更切身感觉到动手实践的重要性,避免眼高手低勤于动手、热衷实践才是学好一切的王道。

参考资料

工具

  1. JUnit
  2. umbrello
  3. StarUML
相关文章
相关标签/搜索