皇家方舟

工作总结

      三个月来,一直都在学习杨博的编程思想,也阅读了他推荐的几本好书,通过这一段时间的学习,觉得自己确实在编程方面有了比较大的提高,对编程中最为重要的两个环节(单元测试、重构)也都有了一定的了解;另外一个收获是作为一个团队的成员,应该如何与队友进行交流并表达自己的想法。
      现在,谈谈如何进行团队合作。首先,应该为自己定位,自己在团队中处于什么位置,应该做哪些事情?其次,当自己有什么新的想法(不管是否正确)时,一定要与团队成员进行交流。如果自己的想法是正确的,那团队就很可能采用自己的新想法;当然有的时候想法也不一定正确,但是却肯定会引起大家的讨论,也许就可能从新的想法中得到其它的什么提示,而产生另外的好的想法也不一定。
       接着,讲讲自己在这段时间的学习成果吧!虽然不多,但却非常有用。首先,学习了使用TDD(测试驱动开发)模式进行软件开发;其次,学习如何写好注释;另外,还学习了怎样嗅出代码中的臭味,并进行重构。
      

posted on 2006-12-07 08:57 阿辉 阅读(237) 评论(4)  编辑  收藏 所属分类: 学习日志

Feedback

# 学习测试(TDD) 2006-12-07 12:47 阿辉

在编程的过程中肯定会用到外部包的方法(即除自己写的程序以外的程序,可以是团队中其他同事编写的,也可以是jdk的,等等),在自己并不是非常清楚该方法的功能之前,应该为它编写一个小测试,通过测试了解该方法的功能。在确定该方法符合自己的要求后再去使用它。当然,该测试并不需要放置到我们的单元测试代码中,在我们确定它符合我们的要求之后,必须将它从单元测试代码中删除。同时也可以把该测试存放到自己的学习文件夹中,用这个文件夹在专业存放一些对外部包方法的小测试程序,因此当你第二次再使用某个方法而忘了怎么使用时就可以从该文件夹中找到该方法对应的测试程序,也许再看一次测试的注释并将它运行一下就可以明白了该方法的用法。如果再不明白的话,则需要另外编写自己需要的功能对应的单元测试,并加入到该文件夹中。  回复  更多评论   

# 数值对象 2006-12-08 14:16 阿辉

数值对象一经创建,其状态永不改变。即类中没有set方法,只能通过构造方法赋值,必须实现equals(),且对它的操作均必须返回一个新的对象。  回复  更多评论   

# 谈重构之“以查询取代临时变量” 2006-12-08 14:48 阿辉

这种重构方法是最近学习的,感觉实用性比较大,而且想起自己常常在程序代码中到处出现的if-else没法处理。学习些项重构后,可以将程序中很多的类似的条件判断代码去除掉,使代码更为优美。下面举个例子说明该项重构的好处:方法getMessage()的功能是得到类名和异常信息组成的字符串。其中有两个对null的判断。由于该方法中的空值判断只有两个,所做的重构并没有体现出其特别的价值,但是当在你的程序中出现很多这种代码时,你就会觉得心里不舒服,并且会发现这样重构是非常值去做的,最重要的是它提高了程序的可读性。
注:该例子并不会在实际编程中存在,仅用它来说明这项重构而已。
public String getMessage(Object object,Exception e)
{
String className;
if(object != null)
{
className = object.getClass().getName();
}
else
{
className = "the object is null";
}
String exceptionMessage;
if(e != null)
{
exceptionMessage = e.toString();
}
else
{
exceptionMessage = "there is no exception";
}
String message = className + exceptionMessage;
return message ;
}

重构后的代码如下:

public String getMessage(Object object,Exception e)
{
String message = getClassName(object) + getExceptionMessage(e);
return message;

/**
* 获得对象的类名。
*/
private String getClassName(Object object)
{
return object != null ? object.getClass().getName() : "the object is null";
}
/**
* 获得异常的信息。
*/

private String getExceptionMessage(Exception e)
{
return e!= null ? e.toString() : "there is no exception";
}

从上面可以看到临时变量message只使用了一次,因此其没有存在的必要了,我们可以将其内联。
最终代码如下:
public String getMessage(Object object,Exception e)
{
return getClassName(object) + getExceptionMessage(e);


很明显,重构后的代码比最初的代码要清晰许多,而且可读性也要强出不少。  回复  更多评论   

# 创建对象时注意set方法的使用顺序 2006-12-08 17:36 阿辉

在单元测试中,很多时候需要对一个对象进行初始化,且该初始化对象会在多个测试中使用到。因此这个工作不能很随便,在初始化该对象时一定要注意一些细节上的问题,我个人认为最好是按照该类中字段的定义顺序来初始化,这样不容易漏掉,但是在实际中常常是没有按一定的顺序来设置字段值的,不仅容易漏掉,而且可能会导致同一个set方法使用多次(在程序中我就见过这种情况),致使前面的set方法设置的字段值无效。因此就可能导致在后面的测试出错时无法定位错误,检查测试数据时要是只看到第一个set方法,并将其修改,但事实上该对象中的字段并未改变,因为后面误用了set方法,其值实际上为最后一个使用set方法的地方赋值的。
按顺序初始化对象还有另外一个好处,让阅读的人看得清晰,以及为该类增加方法时需要用到该测试数据时也易读,可以很好的使用该对象。  回复  更多评论   



只有注册用户登录后才能发表评论。


网站导航:
 

My Links

Blog Stats

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜