• 20155212 实验三 敏捷开发与XP实践


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

    实验内容

    1. XP基础

    2. XP核心实践

    3. 相关工具

    实验要求

    1. 没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程。

    2. 完成实验、撰写实验报告,实验报告以博客方式发表在博客园。

    3. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

    实验步骤

    (一)敏捷开发与XP

    • 敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。
    • 极限编程(eXtreme Programming,XP)是一种全新而快捷的软件开发方法。

    (二)编码标准

    • 编写代码一个重要的认识是“程序大多时候是给人看的”,编程标准使代码更容易阅读和理解,甚至可以保证其中的错误更少。
    • 编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。
    • 实验

      IDEA中code中有许多好用的功能,我选择的是Folding->Collapse这个功能是将不需要看的代码折叠起来,当读长代码的时候这个功能有很大帮助。

    (三) 结对编程

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

    (四)版本控制

    • XP的集体所有制意味着每个人都对所有的代码负责;这一点,反过来又意味着每个人都可以更改代码的任意部分。
    • 版本控制提供项目级的 undo(撤销) 功能: 没有什么事情是终结版本, 任何错误必须很容易回滚。 假设你在使用世界上最复杂的文字处理系统。 它具备了所有的能想到的功能,就是没有支持 DELETE(删除) 键。想象你打字的时候得多么的谨慎和缓慢吧, 特别是一篇超大的文档的快临近末尾的时候, 一个不小心就要重头再来(试想你选中所有的文字, 不小心按了 DELETE 键, 因为没有撤销功能,只好重新录入)。编辑文字和版本控制相同,任何时候都需要回滚,无论是一个小时, 一天, 还是一周, 这让你的团队工作自由快速的工作, 而且对于修正错误也非常自信。
      版本控制允许多人在同一代码上工作, 只要遵守一定的控制原则就行。 再也不会发生诸如一个人覆盖了另一个人编辑的代码,导致那个人的修改无效这样的情况。
    • 版本控制系统保存了过去所作的修改的历史记录。如果你遭遇到一些惊讶的代码,通过- 版本控制系统可以很容易找出是谁干的, 修改了什么, 修改的时间, 如果幸运的话,还能找出原因。
    • 版本控制系统还支持在主线上开发的同时发布多个软件版本。在软件发布的时候也不需要整个团队的停止工作,不需要冻结代码。
    • 版本控制也是项目级的时间机器,你可以选择任何一个时间,精确地查看项目在当时的情况。 这对研究非常有用, 也是重现以前某个有问题的发布版本的基础。
    • 流行的版本控制工具有CVS,SVN,Git等,更多的可以参考这里。Git是Linus除了Linux操作系统外的另外一个重要发明。
    • 20155117码云

    (五)重构

    • 重构的概念

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

    • 重构中一个非常关键的前提就是“不改变软件外部行为”,它保证了我们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。如何保证不改变软件外部行为?重构后的代码要能通过单元测试。如何使其更加易于阅读、易于维护和易于变更 ?设计模式给出了重构的目标。
    • e.g

    码云链接

    重构前

    
    class Clothes {
        String color;
        char size;
        Clothes(String color, char size) {
            this.color = color;
            this.size = size;
        }
    }
    
    public class shall {
        public static void main(String[] args) {
            Clothes[] c1 = {new Clothes("red", 'L'), new Clothes("blue", 'M')};
            Clothes[] c2 = new Clothes[c1.length];
            for(int i = 0; i < c1.length; i++) {
                c2[i] = c1[i];
            }
            c1[0].color = "yellow";
            System.out.println(c2[0].color);
        }
    }
    

    重构后

    
    class Clothes {
        private String color;
        private char size;
        Clothes(String color, char size) {
            this.setColor(color);
            this.setSize(size);
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    
        public char getSize() {
            return size;
        }
    
        public void setSize(char size) {
            this.size = size;
        }
    }
    
    public class TestBy20155212 {
        public static void main(String[] args) {
            Clothes[] c1 = {new Clothes("red", 'L'), new Clothes("blue", 'M')};
            Clothes[] c2 = new Clothes[c1.length];
            for(int i = 0; i < c1.length; i++) {
                c2[i] = c1[i];
            }
            c1[0].setColor("yellow");
            System.out.println(toString(c2[0]));
        }
    
        public static String toString(Clothes clothes) {
            return clothes.getColor();
        }
    }
    

    (六)实践项目

    实验问题

    • 不知道如何加入别人的项目
    • 解决办法见我的博客
  • 相关阅读:
    MySQL之ORM
    MySQL之索引补充
    MySQL存储过程
    c primer plus 7编程练习
    c语言中统计单词数目程序
    c语言统计输入字符数及行数
    c语言中getchar()、putchar()函数例子
    c primer plus 6编程练习
    c语言 %c 一次输出多个字符 (特殊程序)
    c语言 复合赋值运算符的优先级低于算术运算符
  • 原文地址:https://www.cnblogs.com/dky20155212/p/6821436.html
Copyright © 2020-2023  润新知