- 博客(61)
- 收藏
- 关注
为什么我的敏捷项目有如此多的问题?
OK,敏捷哈。不争论什么是敏捷。我们来看一些现象,然后你来告诉我,你有没有遇到过这些问题。没人提真正的Feedback每个迭代结束之后,我都会做Showcase。但是从Showcase上收集到最多的,就是UI的问题,字体太小之类的。每个Release发布之后,项目都会部署一个试用版本。但就是不见真正的用户来“试用”,就更别提Feedback了。敏捷不是强调Feedback吗?客户(Cust...
2010-03-10 10:22:00 146
提高程序员的准入门槛?
效仿敏捷宣言,有人也搞了一个软件工艺(Craftsmanship)宣言。在标题的下面是一行小字,提高准入门槛(Raising the bar)。UncleBob就这个Topic在世界各地发表演讲。他曾经把程序员与医生做比较:既然程序员与医生一样都是提供职业服务(Professional Service),那么他们就应该遵守类似的行为准则。医生在做手术之前需要洗手洗三遍以防止病人被细菌感染,而且...
2010-03-08 23:45:00 896
持续部署才是王道
原话是“Continuous Deployment is the holy grail”。在听到的这句话的时候,我的灯泡突然被点亮了。说得实在是太对了。有一句老话是“纲举目张”。意思是提起渔网上总绳,一个个网眼就会被张开。我们的很多实践,就像这渔网上的网眼,琳琅满目。我们缺乏的就是这样一个总绳来把所有的实践联系起来。No,No,No,你错了。你可能要说,我们有这样的一个总绳,它的名字叫Agile。...
2010-03-08 08:48:00 185
企业定制软件开发的两个核心问题
企业定制软件开发不是计算机科学,需要解决的不是编译原理也不是组合数学。那么,企业定制软件开发的核心问题是什么? 越来越感觉到,从事一个领域不需要有特别深刻的理解,但起码要知道做这个领域的事情,需要解决的核心问题是什么。比如说,开发C/S结构软件,状态同步(C/S状态同步以及窗口之间的状态同步)就是核心问题之一,而开发B/S结构的软件,状态同步就不是那么核心的问题。如果事先知道需要有这些核心...
2010-03-03 03:20:00 136
学习模式,不如先了解问题
从设计模式开始,已经有很多人尝试总结了各方个面的很多模式。不管是写的人多,读的人也多。甚至考的人也多。数年前去IBM面试实习生,Mentor问我的问题就是知道什么是Visitor模式不。但是模式为什么出现,这些牛人为什么花这么多时间精力去讨论,去总结,我还是最近才开始有所领悟。事情的起源是公司内部的一些讨论。我们公司(ThoughtWorks)是做敏捷咨询的。很多咨询师都是非常有经验的开发人员...
2010-02-20 20:58:00 116
原创 这是一个负载平衡的艺术
最近在读James Coplien的[url=http://www.amazon.com/Organizational-Patterns-Agile-Software-Development/dp/0131467409]组织模式[/url]。觉得最有意思的还是这张图。[img]http://dl.iteye.com/upload/attachment/206465/61f20318-3664-35...
2010-02-17 19:35:37 134
原创 回复 "度量随想"
[url]http://dreamhead.blogbus.com/logs/57388446.html[/url]那么我们经常说要重构,那么凭什么呢?有什么指标可以说明必须要重构了呢?Bad smell吗?那么Bad smell是不是某种度量呢?重构完成之后,你说质量变好了。那么又有什么根据呢?我觉得发现软件的Internal Quality。然后基于Evidence去做判断是非常重要的...
2010-02-17 12:23:39 121
原创 推荐 Organizational Patterns (更新了 Cutter Report)
当Agile已经变成一个贬义词的时候,我们是要把Lean变成下一个贬义词吗?还是脚踏实地去做一些改进?在这里,向大家推荐 James Coplien 的 Organizational Patterns。它不是一套新的过程,一上来弄十几个实践,也不知道为什么就开始结对开始 TDD 了。它也不是什么大师思想,只有大师才能领会。它更像一个中药柜,里面列了许多药方,更重要的是还告诉你了什么时候用什...
2010-02-11 15:27:12 394
Continuable.java
有这么一个函数:[code]public void increase(String key) { int val = storage.get(key); storage.put(key, val + 1);}[/code]我需要有一系列的key需要操作,那么就必须弄一个循环:[code]for (String key : keys) { increas...
2009-08-18 13:12:37 135
Bayberry - Complement Test Frameworks
http://taowen.github.com/bayberry/Goal of this project is to complement test frameworks for projects using Guice. It has three major features: 1. Dependency Injection 2. Data Injection...
2009-08-11 23:43:29 110
Guice这高级货
Guice在大部分时间都是很方便的,简单易用。Guice和Spring等其他容器的最大区别是,Guice相信注入大部分都是根据类型的,而不是根据名字的。Guice在使用上的方便,很大部分都来自于按类型注入。[b][size=large]Bind多个实现[/size][/b]但是,如果对于一个类型,我有多个实现怎么办?最常见的问题是,有两个数据库。[code="java"]b...
2009-06-15 15:17:08 297
再论领域模型的困境
距离[url=http://www.iteye.com/topic/281289]上次发帖[/url]讨论领域模型,已经有半年了。这么久没有炒,估计饭又冷了。我再来炒炒领域模型这锅冷饭吧。且不着急点回退按钮,最近领域驱动设计社区在Greg Young同学的带领下有不少新的发展。保证这一次不会是重复贫血充血的老调调。上回我们说到领域模型实践中的两个困境。一个是框架带来的Entity无法注入的问题...
2009-06-03 18:54:39 173
让AnnotationConfiguration支持自定义UserCollectionType
在Hibernate的Jira上,这个两个issue已经放了很久了:[url=http://opensource.atlassian.com/projects/hibernate/browse/ANN-141]Add annotation support for serCollectionType[/url][url=http://opensource.atlassian.com/proj...
2008-12-09 17:45:57 138
领域模型的价值与困境
很久以前大家就关于这个方面有很多讨论了。前两天我又挖了一个坑来集思广益,非常感谢没有把我的帖子投为新手帖的同志。我不是在装傻,只是想让大家跳出自己的立场,从根本的价值出发来考虑问题。之前有很多讨论,都是在讨论我又发明了一种新方法可以让领域模型充血啦,等等之类的。当提出一个解决方案的时候,一定要有明确的问题。那么领域模型的价值是什么?为什么没有被广泛应用,其困境在哪里? [size=x-la...
2008-11-27 23:23:30 161
证券研究行业简介
最近做的几个项目都是证券研究行业的。总结了一下,这个行业根本的一个目标是:“尽可能快的编写专业的研究报告,并分发给正确的人群”定义专业的的研究报告,有三个侧面:1、内容2、格式3、分类[b]内容[/b]质量从IT系统的角度,我们能提供的就是准确的数据。通过提供最新并且正确的数据,从而达到帮助分析员编写高质量的研究报告的目的。监管另外一个关...
2008-11-01 12:45:48 172
你所不知道的CommandBar
Office能够让你写插件。2003系列虽然已经远去,其CommandBar也被2007的Ribbon给替代。但是,你未必就完全了解了这个存在多年看似简单,实则狗屎的CommandBar。我们翻开手册(其实没有什么手册,在2007之前,office是没有提供给VBA程序员之外的文档的),发现Application对象上有一个CommandBars属性。我们可以调用其Add方法给它添加一个C...
2008-10-29 08:40:46 1249
原创 关于Estimation的随笔
Estimation有很多流派。从数字的选择上来看:有的人喜欢用1,2,3,4,5。有的人喜欢用2,4,8,16。有的人喜欢1,2,3,5,8。从单位的选择上来看:有的人喜欢用“点”。有的人喜欢用“Ideal Day”。有的人喜欢用“Ideal Hour”。我个人喜欢用2,3,4,5,单位喜欢用“Real Day”。喜欢2,3,4,5的原因是因为我相信,写得好的Story List...
2008-10-27 09:04:27 181
关于estimation的闲言碎语
[list][*] estimation只是一个开始,不是结束.好的estimation不是developer估的好,还要靠BA大人们来管理scope,不然就算developer牛成马了,estimation还是一坨.[*] 相对于给出一个精确的绝对值来说,维护内在的相对关系更重要,一致性为王.[*] story写得不好,再estimate也是枉费功夫.[*] 不要总是关注stor...
2008-07-11 09:06:25 274
let's placeBid
这个例子很老啦,在之前的Domain Model的争论中被广泛引用(参见:http://www.iteye.com/topic/11712)。我再来炒炒冷饭。这个Domain可以简化为这样:[code]public class Item { private Set bids = new HashSet();}[/code][code]public cl...
2008-05-12 10:11:13 336
贫血的Domain Model
好老的话题啦。拿出来炒炒冷饭。各位见谅。——————————————————————Domain Model贫血是说属于Domain Model的逻辑没有放在Domain Model中。那是哪些逻辑没有放到Domain Model中,从而导致贫血一说呢?原因有很多,但是我认为最主要是Service中的那些逻辑。而这些逻辑又有一个共同的特点就是依赖于DAO,或者说需要查询数据库。Robbin...
2008-05-09 00:18:47 148
图形界面自动化测试
WindowsWin32 API (pywinauto, autoit)MS Accessbility (?)UI Automation (eft, white)In CLR object model (Sharprobo)WEBIn browser DOM, Using frame (Selenium)In browser DOM, Using proxy (Sa...
2008-05-04 22:16:14 776
the paint points of xaml
Pain Point 1: XAML always create the controls by its default constructorThis means, you need to have a default constructor for you control, and the constructor will always be used by XAML. So, you...
2008-01-16 08:56:13 153
lessons we have learnt about office integration
Lesson 1: trust itEverything could cause problem. There is no API could be really stable. Even it is stable itself, the interop and version difference or mis-use could cause problems as well.L...
2008-01-16 08:54:09 104
Outlook MAPIOBJECT
Outlook的对象模型中,很多对象都有一个MAPIOBJECT属性。这个属性可以用来获得对应的MAPI对象。最简单的应用可能就是取得MailItem上的一些额外属性,比如取得Attachment的ContentId。要正确使用这个属性不容易。首先,不要在进程外取得属性的值,也就是说不能用Office Automation来启动Outlook,必须是在AddIn中取值。用伪代码,示例如下:...
2008-01-09 18:06:44 175
北京地铁二号线
早上送女友去上班,从东直门到宣武门。因为反正要返回东直门的,所以索性坐了完整一圈。早八点的二号线,真是相当的恐怖啊。观察出了一个最高峰的地铁段,从复兴门到阜成门。也许大家都住在一号线沿线,然后去金融街上班吧。东直门的人反而不是很多。...
2008-01-09 09:45:42 208
汉语编程,有搞头
汉语编程上CSDN首页了。不少骂傻逼的人,不少人说没搞头。我觉得,还是有搞头的。但是搞法,不是现在的这种搞法。不是用如果(真)替代if (true)这就没搞头,谁都知道输入中文慢,谁都知道大部分的API是英文的。这个层次太低!在实现这个层面,搞中文编程,没有多少实际意义。[b]提高层次是关键[/b]if,else这个层面,是面对程序员的。作为一个程序员,你会用中文编...
2007-11-12 15:19:56 89
Marshal.ReleaseComReference
someone told me, don't do that. Framework should free the com reference for you. but...if you are writing a AddIn for PowerPoint, you might have seen the same problem. That is, if you reference a ...
2007-10-29 22:46:43 162
How to make it real?
http://www.infoq.com/news/2007/10/next-gen-functional-testingpretty easy:UI automation testing is the key thingDistributed running tests in Virtualized environment is criticalBA's lo-fi prot...
2007-10-17 09:45:34 75
简化测试代码
问题场景:有一个方法类似于下面的状况:...if (condition1) {...}else {...}...if (condition2) {...}else {...}...那么你该写几个测试来覆盖这段代码呢?答案是四个。如果你有三个条件呢?答案是八个。那么更多呢?。。。解决办法:...do_first_...
2007-10-15 16:10:39 82
五个类,解析单双引号
[code="c#"] public interface IBlock { string Quote(); void Append(char c); bool ShouldAppendQuotedBlock(char c); }[/code][code="c#"] public abstrac...
2007-10-14 19:14:09 69
.NET Remoting Callback
有三个主要的障碍:1、服务器解析不到客户端的assembly,因为callback的代码在客户端的assembly中2、TypeFilterLevel默认不是Full3、普通callback代码不能访问客户端的变量,因为不是serializable的解决办法:1、利用AppDomain的AssemblyResolve事件,让自己来处理assembly的查找逻辑。并且让客户端...
2007-10-12 20:42:41 72
WPF/WCF/Outlook/Addin-Express的Bug
[b]WPF[/b][list][*] Drag drop not working when used in outlook[*] Topmost is not "topmost" when change screen resolution[*] Context menu overlapped by transparent window sometime[*] Click th...
2007-10-02 10:48:12 99
写C++代码时头脑中要有触发器
新建class时:考虑对象的拷贝语义(copyable?)新建member function时:如果不改变对象状态,在声明后面加const(和ruby的!开头的方法一样)新建function parameter时:如果是传值的,而且是复杂对象,尽量使用const ValueType &尽量把值放在shared_ptr中,然后把只传递指针(和C#与JAVA一样)...
2007-10-01 15:32:29 298
企业应用开发者使用WPF的三个理由
[b]让控件更灵活的Data Template[/b][code="c#"] GridViewColumn gvcName = new GridViewColumn(); gvcName.Header = "Name"; DataTemplate nameTemplate = new DataTemplate()...
2007-05-16 23:02:00 111
用UIAutomation做验收测试
这是被测的应用程序:[img]http://taowen.iteye.com/upload/picture/pic/3365/b3b4e70f-3a2d-45fb-9598-2200c704077d.png[/img][img]http://taowen.iteye.com/upload/picture/pic/3366/c6038ae3-566b-4f0f-a7a4-4e96c192...
2007-05-16 22:19:52 302
mock框架搞什么搞?
今天早上一时兴起,去网上下载下来JMock,EasyMock最新版本来玩玩。用来测试的行为很简单。就是有一个窗体,上面有一个文本框,一个按钮。如果点击按钮,就会把文本框的内容设置为“Hello”。应用MVP模式,这个行为应该在Presenter中,而View接口应该是这样的:[code="java"]public interface View { public void setTe...
2007-05-11 11:11:32 217
持久化框架烽烟再起
ADO.NET Entity FrameworkLinqActive RecordHibernate从传统到新贵,从框架到语言。RoR 和 C#3.0 以及传统的 Hibernate。持久化框架烽烟再起。
2007-05-10 21:44:51 94
主动重构 => 被动重构
[size=18]引言[/size]最近杂七杂八地思考了不少东西。但是很惊异地发现这三三两两的杂思竟然彼此互相联系。隐隐地道出了一个共同的主题。这个主题就是重构。修饰词是被动的。主动重构就是我们所熟悉的重构。比如说在Eclipse中按下Shift+Alt+R,出现一个对话框提示你输入新的名字,然后Eclipse把要改名的类或者方法本身改名,以及所有对这个名字的引用都改成新的。那么什...
2007-05-10 16:34:13 122
我的酒窝.NET
ajoo同学的[url="http://www.iteye.com/topic/38299"]酒窝[/url]有.NET版本啦!项目主页:[url]http://dotnet.dimple.googlepages.com/home[/url]存在意义:快速制作测试用的stub。手工继承,mock框架之外的第三种选择。简单使用:[code="c#"]publi...
2007-04-30 16:59:24 94
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人