实验内容

XP基础

XP核心实践

相关工具

敏捷开发与XP

1.敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。“敏捷流程”是一系列价值观和方法论的集合。

2.软件工程=开发流程+工具

3.常见的开发流程有:

·RUP(Rational Unified Process)
·PSP(Personal Software Process )
·TSP(Team Software Process )
·Agile Process
……
4.极限编程(eXtreme Programming,XP)是一种全新而快捷的软件开发方法:

·XP是以开发符合客户需要的软件为目标而产生的一种方法论
·XP是一种以实践为基础的软件工程过程和思想
·XP认为代码质量的重要程度超出人们一般所认为的程度
·XP特别适合于小型的有责任心的、自觉自励的团队开发需求不确定或者迅速变化的软件
5.XP准则:

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

6.XP软件开发的基石是XP的活动,包括:编码、测试、倾听、设计。

7.我们关注的XP实践:编码标准,结对编程,代码集体所有,测试,重构等。
编码标准

1.编程标准使代码更容易阅读和理解,保证其中的错误更少。

2.编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。

3.在记事本中编写java程序时,程序没有最基本的缩进,看起来很不方便:image
使用IDEA时,将原本没有缩进的代码直接粘贴至其编写代码的区域就会自动缩进,方便快捷、可读性强。

然后,再根据代码逻辑加入一些空行(例如,遇见for语句、if语句、print语句等),让程序更有逻辑性。

4.Java中的一般的命名规则:

·要体现各自的含义
·包、类、变量用名词
·方法名用动宾
·包名全部小写,如:io,awt
·类名第一个字母要大写,如:HelloWorldApp
·变量名第一个字母要小写,如:userName
·方法名第一个字母要小写:setName
...
5.标识符名字应当望文知意,一般采用英文单词或其组合。标识符的长度“min-length && max-information”的原则,可以通过去元音法把变量名变短;全局变量用具有说明性的名字,局部变量用短名字:单字符的名字,常见的如i,j,k等用作局部变量。

结对编程

1.结对编程中有两个角色:

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

1.XP的集体所有制意味着每个人都对所有的代码负责;这一点,反过来又意味着每个人都可以更改代码的任意部分。集体所有制的一个主要优势是提升了开发程序的速度,因为一旦代码中出现错误,任何程序员都能修正它。这意味着代码要放到一个大家都能方便获取的地方,我们叫代码仓库。

2.版本控制提供项目级的 undo(撤销)功能:没有什么事情是终结版本, 任何错误必须很容易回滚。

3.版本控制允许多人在同一代码上工作,只要遵守一定的控制原则就行。不会发生诸如一个人覆盖了另一个人编辑的代码,导致那个人的修改无效这样的情况。

4.版本控制系统保存了过去所作的修改的历史记录。如果你遭遇到一些惊讶的代码,通过版本控制系统可以很容易找出是谁干的,修改了什么,修改的时间,还能找出原因。

5.版本控制系统还支持在主线上开发的同时发布多个软件版本。在软件发布的时候也不需要整个团队的停止工作,不需要冻结代码。

重构

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

2.IDEA菜单中有个refactor菜单,可以帮助我们进行代码重构。

·功能1:Rename,可以给类、包、方法、变量改名字,使代码在没有注释的情况下也可以被了解基本信息。修改方法是选择IDEA中菜单中的Refactor->Rename。
image
封装。修改方法是选择菜单中的Refactor->Refactor this->Encapsulate Field...
imageimage

由于Java中所有的类都有个专门的toString方法,还可以使用IDEA中Code->Generate->toString()... 给Student类产生一个toString方法。

image

故最后生成的代码

class Student{
    private String name;
    private int age;
    private int id;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", id=" + id +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}


public class StudentTest {
    public static void main(String[] args) {
        Student s= new Student();
        s.setName("zhangsan");
        s.setAge(19);
        s.setId(201552219);
        System.out.println("学生信息:姓名:"+ s.getName() +"年龄:"+ s.getAge() +"学号:"+ s.getId());
    }
}

以结对的方式完成Java密码学相关内容的学习

上周已经学习了部分Java密码学的一些内容,本周又同搭档20155224一起学习了一下凯撒密码,DES及AES等内容,其中以学习了一以DES算法为学习范例截图如下:
image

PSP(Personal Software Process)时间

步骤 耗时 百分比
需求分析 15min 12.5%
设计 15min 12.5%
代码实现 60min 50.0%
测试 15min 12.5%
分析总结 15min 12.5%

参考资料