Agile java 笔记和测试

1,用uml用例图来表示 一个类依赖另一个类,是用直接加箭头的方式表示的。其实另一种方式的描述 :类A发送消息给类B;

2,jdk java devolepment  kit  编译器,转化成字节码;jre java runtime  ** java 运行时环境,只要有jre 就可以运行java程序。 jvm  java 虚拟机, 包含再jre中。

再windows dos 下面通常要配合变量。 path : 这是个命令, bin 下面。 classpath 是指定要引用到的jar包的路径,可以是绝对的也可以是相对路径;

3,windows和linux 下都可以用批处理执行path 下的命令。 有相关的脚本语法;

4,局部变量申明的地址,即生命周期与方法相同。

5,关于java 的基本类型。很重要,包括 定义一个变量时通常会自动赋值,

内存地址用十六进制表示。

6,记住例如 : Student  s = new Student();  

       String name= s.getName(); ---这句话是这么理解的:student的引用向student对象

请求姓名。

7,用名词来为成员变量赋值。名字要能够描述该成员变量被用作什么或者表示什么,而不是如何实现。代表成员变量类型的前缀或者后缀

是不必要的,应该避免。

    如: firstNameString ,trim   。好的命名成员变量的例子有 firstName  ,trimmer, description,name mediacontroller 以及lastOrderPlaced

   方法通常是动作或者查询,您发送消息告诉对象做什么事情。或者您向对象请求获取某些信息。您应该使用动词命令动作方法。

8,对于好的面向对象设计您会发现设计影响命名的能力。一个设计良好的类处理一件重要的事情。并且仅仅处理这一件事情。类通常不用来处理多个事情。例如

如果有个类被用来切割支票,打印支票报表、计算不同部门的退款、那么提出一个名字来简洁地描述这个类是非常困难的。相反,应该把这个类分开成三个独立的类

。CheckWriter、PayrollSummaryReport 和ChargebackCalculator。

9,避免缩写。

 

10,注意 :“测试驱动开发”。 而不是传统的  编码-执行-观察

11,本书建议:学习java的困难部分在于需要 “循序渐进”。

12,在您学完第一课后,会发现有大量的测试,好像这些代码是一起喝成的,可事实上并不是这样。每个测试都是由逐个断言构建而成,采用了比这本书所能忍受的还要小的

增量一点一点完成的。请您一定要记住。使用TDD编写代码的时候,最重要的是采用尽量小的步伐并得到经常地反馈。当我说 “小”的时候,我的意思是非常小。如果您认为

在采用小的步伐,请尝试采用更小的步伐。

 

13,代码就是设计,不好理解。 一旦uml被用来描述那些通过阅读源码就很容易理解的信息,uml就变成了沉重的负担,变成了昂贵的需要去维护的史前古董。因此,uml展现的不是设计,而是设计的模型。代码就是设计。???

14,TDD是一种简单、快速循环的机制,在编程的每一天,您都需要重复这种机制,一次循环包含如下的步骤:

      1、用代码写一个规格说明,要符合单元测试的形式;

      2、描述测试失败

     3,、编写代码,实现这个规格说明;

     4、 测试通过,重构。

 

15,对系统有积极正面的驱动:

     1、质量:促使您解耦,使类与类之间不再高度的互相依赖;

     2、文档:一个测试用例定义了一个类的正确方法;

     3、可扩展性:

     4:、匀速前进。由于TDD的每个循环非常短,所以很快得到反馈。

     TDD 的另一个好处是它帮助展示本书中的例子,您可以很快学到如何把规格说明变成测试代码,已经怎样把测试代码变成实际的j2se5.0代码。

 16,关于第84页中重构。测试代码中testEnrollStudents 的代码没有必要这么长。该方法包含了太多的跟踪学生人数的断言,总的来说,这个方法稍微有点不好理解。

  首先、不要将整个列表都暴露给客户代码(处理CourseSession 对象的代码),可以让CourseSession 以指定索引的方式返回student 对象,这样您就不需求整个students

列表,从而可以删除getAllStudents方法。这也意味着您不再需求去测试getAllStudnets返回的ArrayList的尺寸。 此次重构的另一个好处是隐藏了CourseSession中不必要

暴露的细节。您封装了students集合,只可以用get ,add 和size 方法来处理该集合。 封装提供了两个重要的优点。首先,目前您在ArrayList中保存student列表。Arraylist

是有着特定用法和性能指标的一种数据结构。如果您讲该列表直接暴露哥客户代码,客户代码将依赖于用ArrayList存储studnets的事实。这种依赖意味着你无法轻易地改变

studnets的存储形式。第二,暴露完整的集合意味着其他类可以操作该集合-------加入新的studnet对象,删除student对象。诸如此类。---------而且CourseSession 类无法意识

到这些改变。Coursesession对象的完整性将遭到破坏。

17, 多数方法的代码量在一行到六行之间。有些方法在六行到是十二行左右。如果方法的代码行数超过这个长或者更长一些,您就应该着手重构它们,最主要的目标是保证

方法能够被快速理解和维护。 如果方法足够短,我们就容易提供有意义的、简短的名字来命名这个方法。如果您发现为方法命名很困难,请考虑将其拆为几个更小的方法,每个方法只做一件简单、可以命名的事情。

18,工厂方法的作用是封装了混淆。

19,用更有表现力的代码替代注释。

  //weeks * days per week - 3 days


  final int sessionLength = 16;
  final int dayInWeek= 7 ;
  final int daysFromFridayToMonday = 3;

 20, 以较小的步伐,增量构建系统的测试和代码,如果发现问题,放弃导致问题的增量代码,以更小的步伐重新开始。

21,尽可能保护您的代码。只在必要的时候,放开访问控制。

 22,对象是行为和属性的组合。属性和对象本身有着相同的生命周期,在任何给定的时间点,对象有着特定的状态,状态是类的全部实例变量所组合而成的快照。

因为这个原因,有时候实例也被称为状态变量。行为方法操作或者改变对象的属性。换句话,行为方法可以改变对象的状态。查询方法返回对象状态的某个片段。

 23,把方法设计成:要么改变对象的状态,要么返回信息。不要两件事情都做。

24,测试驱动开发提供了一种持续渐增的开发的技术。您学习如何渐进地编写代码,每分每秒都得到反馈以确认您进行再正确的方向上,测试与信心相关。

      测试驱动开发也会影响设计。这是深思熟虑的结论:测试驱动开发教会您如何构建易于测试的系统。很少生产系统具有易测试的特点。使用测试驱动开发,您

将学会在与系统中其他类隔离的情况下,如何测试某个类。这样将生产一个类与类之间松耦合的系统。松耦合是判断面向对象系统设计是否优秀的主要指标。

  最后,测试可以看做是功能文档,完成编码后,您应该能够通过阅读测试,来理解某个类是什么,以及这个类是怎么工作的。第一,您应该能够通过查看测试的名字,

来理解某个类所支持的所有功能。第二,每个测试都应该像文档一样,具有良好的可读性。

25,测试跟信心有关系。代码越复杂或信心越小,你就应该编写越多测试代码。

26,测试缺少作为文档的能力。问题部分在于,作为开发者您非常了解自己如何编写实现了某个功能,这个背景知识可以帮助其他程序员去正确阅读测试中的业务逻辑

以及限制条件。如果其他程序员不理解这些背景知识,那么回过头看这些测试,就仿佛您在这里编写了隐藏的代码,测试是否告诉您如何使用某个类?测试是否展示了不同

的场景?是否指出了约束和限制---或许被忽略了。

 27,由于某些原因无法对异常进行控制,所以把异常传递到上一级调用者,但是,最好有一种方法能够阻止异常扩散。

28,检查异常和非检查异常 ;区别是,检查异常必须捕获或往上抛,而非检查异常,可以不用捕获或继续抛出或不处理;二检查异常

则有两种方式,1 继续捕获,消极的方法。2,用try{}catch() 。注意,对于检查的异常必须处理,或者捕获或者必须抛出

 29,确保跟踪到异常根源,可以用throwable 做参数,获取堆栈信息。

 30,String.format  。格式化字符串。

 31,创建一个自定义的序列化格式,在创建类时,你会为之定义若干属性来表示这个类每个对象实例的逻辑状态。除了那些属性之外,你可能需要一些数据结构或其它

变量来缓存动态计算信息。序列化这类动态计算的数据可能非常慢,而且空间的使用效率很低。

32,在引入mock之前,确认你有依赖的问题。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值