- 博客(61)
- 收藏
- 关注
为什么我的敏捷项目有如此多的问题?
OK,敏捷哈。不争论什么是敏捷。我们来看一些现象,然后你来告诉我,你有没有遇到过这些问题。 没人提真正的Feedback 每个迭代结束之后,我都会做Showcase。但是从Showcase上收集到最多的,就是UI的问题,字体太小之类的。每个Release发布之后,项目都会部署一个试用版本。但就是不见真正的用户来“试用”,就更别提Feedback了。敏捷不是强调Feedback吗?客户(Cust...
2010-03-10 10:22:00
166
提高程序员的准入门槛?
效仿敏捷宣言,有人也搞了一个软件工艺(Craftsmanship)宣言。在标题的下面是一行小字,提高准入门槛(Raising the bar)。 UncleBob就这个Topic在世界各地发表演讲。他曾经把程序员与医生做比较:既然程序员与医生一样都是提供职业服务(Professional Service),那么他们就应该遵守类似的行为准则。医生在做手术之前需要洗手洗三遍以防止病人被细菌感染,而且...
2010-03-08 23:45:00
919
持续部署才是王道
原话是“Continuous Deployment is the holy grail”。在听到的这句话的时候,我的灯泡突然被点亮了。说得实在是太对了。有一句老话是“纲举目张”。意思是提起渔网上总绳,一个个网眼就会被张开。我们的很多实践,就像这渔网上的网眼,琳琅满目。我们缺乏的就是这样一个总绳来把所有的实践联系起来。No,No,No,你错了。你可能要说,我们有这样的一个总绳,它的名字叫Agile。...
2010-03-08 08:48:00
205
企业定制软件开发的两个核心问题
企业定制软件开发不是计算机科学,需要解决的不是编译原理也不是组合数学。那么,企业定制软件开发的核心问题是什么? 越来越感觉到,从事一个领域不需要有特别深刻的理解,但起码要知道做这个领域的事情,需要解决的核心问题是什么。比如说,开发C/S结构软件,状态同步(C/S状态同步以及窗口之间的状态同步)就是核心问题之一,而开发B/S结构的软件,状态同步就不是那么核心的问题。如果事先知道需要有这些核心...
2010-03-03 03:20:00
152
学习模式,不如先了解问题
从设计模式开始,已经有很多人尝试总结了各方个面的很多模式。不管是写的人多,读的人也多。甚至考的人也多。数年前去IBM面试实习生,Mentor问我的问题就是知道什么是Visitor模式不。但是模式为什么出现,这些牛人为什么花这么多时间精力去讨论,去总结,我还是最近才开始有所领悟。 事情的起源是公司内部的一些讨论。我们公司(ThoughtWorks)是做敏捷咨询的。很多咨询师都是非常有经验的开发人员...
2010-02-20 20:58:00
125
原创 这是一个负载平衡的艺术
最近在读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
140
原创 回复 "度量随想"
[url]http://dreamhead.blogbus.com/logs/57388446.html[/url] 那么我们经常说要重构,那么凭什么呢?有什么指标可以说明必须要重构了呢?Bad smell吗?那么Bad smell是不是某种度量呢?重构完成之后,你说质量变好了。那么又有什么根据呢?我觉得发现软件的Internal Quality。然后基于Evidence去做判断是非常重要的...
2010-02-17 12:23:39
136
原创 推荐 Organizational Patterns (更新了 Cutter Report)
当Agile已经变成一个贬义词的时候,我们是要把Lean变成下一个贬义词吗?还是脚踏实地去做一些改进? 在这里,向大家推荐 James Coplien 的 Organizational Patterns。它不是一套新的过程,一上来弄十几个实践,也不知道为什么就开始结对开始 TDD 了。它也不是什么大师思想,只有大师才能领会。它更像一个中药柜,里面列了许多药方,更重要的是还告诉你了什么时候用什...
2010-02-11 15:27:12
425
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
148
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
121
Guice这高级货
Guice在大部分时间都是很方便的,简单易用。Guice和Spring等其他容器的最大区别是,Guice相信注入大部分都是根据类型的,而不是根据名字的。Guice在使用上的方便,很大部分都来自于按类型注入。 [b][size=large]Bind多个实现[/size][/b] 但是,如果对于一个类型,我有多个实现怎么办?最常见的问题是,有两个数据库。 [code="java"] b...
2009-06-15 15:17:08
318
再论领域模型的困境
距离[url=http://www.iteye.com/topic/281289]上次发帖[/url]讨论领域模型,已经有半年了。这么久没有炒,估计饭又冷了。我再来炒炒领域模型这锅冷饭吧。且不着急点回退按钮,最近领域驱动设计社区在Greg Young同学的带领下有不少新的发展。保证这一次不会是重复贫血充血的老调调。 上回我们说到领域模型实践中的两个困境。一个是框架带来的Entity无法注入的问题...
2009-06-03 18:54:39
192
让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
155
领域模型的价值与困境
很久以前大家就关于这个方面有很多讨论了。前两天我又挖了一个坑来集思广益,非常感谢没有把我的帖子投为新手帖的同志。我不是在装傻,只是想让大家跳出自己的立场,从根本的价值出发来考虑问题。之前有很多讨论,都是在讨论我又发明了一种新方法可以让领域模型充血啦,等等之类的。当提出一个解决方案的时候,一定要有明确的问题。那么领域模型的价值是什么?为什么没有被广泛应用,其困境在哪里? [size=x-la...
2008-11-27 23:23:30
188
证券研究行业简介
最近做的几个项目都是证券研究行业的。总结了一下,这个行业根本的一个目标是: “尽可能快的编写专业的研究报告,并分发给正确的人群” 定义专业的的研究报告,有三个侧面: 1、内容 2、格式 3、分类 [b]内容[/b] 质量 从IT系统的角度,我们能提供的就是准确的数据。通过提供最新并且正确的数据,从而达到帮助分析员编写高质量的研究报告的目的。 监管 另外一个关...
2008-11-01 12:45:48
186
你所不知道的CommandBar
Office能够让你写插件。2003系列虽然已经远去,其CommandBar也被2007的Ribbon给替代。但是,你未必就完全了解了这个存在多年看似简单,实则狗屎的CommandBar。 我们翻开手册(其实没有什么手册,在2007之前,office是没有提供给VBA程序员之外的文档的),发现Application对象上有一个CommandBars属性。我们可以调用其Add方法给它添加一个C...
2008-10-29 08:40:46
1284
原创 关于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
201
关于estimation的闲言碎语
[list] [*] estimation只是一个开始,不是结束.好的estimation不是developer估的好,还要靠BA大人们来管理scope,不然就算developer牛成马了,estimation还是一坨. [*] 相对于给出一个精确的绝对值来说,维护内在的相对关系更重要,一致性为王. [*] story写得不好,再estimate也是枉费功夫. [*] 不要总是关注stor...
2008-07-11 09:06:25
304
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
362
贫血的Domain Model
好老的话题啦。拿出来炒炒冷饭。各位见谅。 —————————————————————— Domain Model贫血是说属于Domain Model的逻辑没有放在Domain Model中。那是哪些逻辑没有放到Domain Model中,从而导致贫血一说呢?原因有很多,但是我认为最主要是Service中的那些逻辑。而这些逻辑又有一个共同的特点就是依赖于DAO,或者说需要查询数据库。Robbin...
2008-05-09 00:18:47
169
图形界面自动化测试
Windows Win32 API (pywinauto, autoit) MS Accessbility (?) UI Automation (eft, white) In CLR object model (Sharprobo) WEB In browser DOM, Using frame (Selenium) In browser DOM, Using proxy (Sa...
2008-05-04 22:16:14
800
the paint points of xaml
Pain Point 1: XAML always create the controls by its default constructor This 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
173
lessons we have learnt about office integration
Lesson 1: trust it Everything 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
122
Outlook MAPIOBJECT
Outlook的对象模型中,很多对象都有一个MAPIOBJECT属性。这个属性可以用来获得对应的MAPI对象。最简单的应用可能就是取得MailItem上的一些额外属性,比如取得Attachment的ContentId。 要正确使用这个属性不容易。首先,不要在进程外取得属性的值,也就是说不能用Office Automation来启动Outlook,必须是在AddIn中取值。用伪代码,示例如下: ...
2008-01-09 18:06:44
189
北京地铁二号线
早上送女友去上班,从东直门到宣武门。因为反正要返回东直门的,所以索性坐了完整一圈。早八点的二号线,真是相当的恐怖啊。观察出了一个最高峰的地铁段,从复兴门到阜成门。也许大家都住在一号线沿线,然后去金融街上班吧。东直门的人反而不是很多。...
2008-01-09 09:45:42
224
汉语编程,有搞头
汉语编程上优快云首页了。不少骂傻逼的人,不少人说没搞头。我觉得,还是有搞头的。但是搞法,不是现在的这种搞法。不是用 如果(真) 替代 if (true) 这就没搞头,谁都知道输入中文慢,谁都知道大部分的API是英文的。这个层次太低!在实现这个层面,搞中文编程,没有多少实际意义。 [b]提高层次是关键[/b] if,else这个层面,是面对程序员的。作为一个程序员,你会用中文编...
2007-11-12 15:19:56
99
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
182
How to make it real?
http://www.infoq.com/news/2007/10/next-gen-functional-testing pretty easy: UI automation testing is the key thing Distributed running tests in Virtualized environment is critical BA's lo-fi prot...
2007-10-17 09:45:34
86
简化测试代码
问题场景: 有一个方法类似于下面的状况: ... if (condition1) { ... } else { ... } ... if (condition2) { ... } else { ... } ... 那么你该写几个测试来覆盖这段代码呢?答案是四个。 如果你有三个条件呢?答案是八个。 那么更多呢?。。。 解决办法: ... do_first_...
2007-10-15 16:10:39
102
五个类,解析单双引号
[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
77
.NET Remoting Callback
有三个主要的障碍: 1、服务器解析不到客户端的assembly,因为callback的代码在客户端的assembly中 2、TypeFilterLevel默认不是Full 3、普通callback代码不能访问客户端的变量,因为不是serializable的 解决办法: 1、利用AppDomain的AssemblyResolve事件,让自己来处理assembly的查找逻辑。并且让客户端...
2007-10-12 20:42:41
88
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
112
写C++代码时头脑中要有触发器
新建class时: 考虑对象的拷贝语义(copyable?) 新建member function时: 如果不改变对象状态,在声明后面加const(和ruby的!开头的方法一样) 新建function parameter时: 如果是传值的,而且是复杂对象,尽量使用const ValueType & 尽量把值放在shared_ptr中,然后把只传递指针(和C#与JAVA一样) ...
2007-10-01 15:32:29
318
企业应用开发者使用WPF的三个理由
[b]让控件更灵活的Data Template[/b] [code="c#"] GridViewColumn gvcName = new GridViewColumn(); gvcName.Header = "Name"; DataTemplate nameTemplate = new DataTemplate()...
2007-05-16 23:02:00
134
用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
327
mock框架搞什么搞?
今天早上一时兴起,去网上下载下来JMock,EasyMock最新版本来玩玩。用来测试的行为很简单。就是有一个窗体,上面有一个文本框,一个按钮。如果点击按钮,就会把文本框的内容设置为“Hello”。应用MVP模式,这个行为应该在Presenter中,而View接口应该是这样的: [code="java"] public interface View { public void setTe...
2007-05-11 11:11:32
230
持久化框架烽烟再起
ADO.NET Entity Framework Linq Active Record Hibernate 从传统到新贵,从框架到语言。RoR 和 C#3.0 以及传统的 Hibernate。持久化框架烽烟再起。
2007-05-10 21:44:51
100
主动重构 => 被动重构
[size=18]引言[/size] 最近杂七杂八地思考了不少东西。但是很惊异地发现这三三两两的杂思竟然彼此互相联系。隐隐地道出了一个共同的主题。这个主题就是重构。修饰词是被动的。 主动重构就是我们所熟悉的重构。比如说在Eclipse中按下Shift+Alt+R,出现一个对话框提示你输入新的名字,然后Eclipse把要改名的类或者方法本身改名,以及所有对这个名字的引用都改成新的。那么什...
2007-05-10 16:34:13
143
我的酒窝.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
106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人