Programming.log - a place to keep my thoughts on programming品质在于构建过程吗?
今天在微博上看到几位敏捷爱好者探讨敏捷测试和质量保证问题我忍不住也加入了讨论Z先生我刚才看到一个大会演讲稿谈到敏捷测试六大指导原则1.仅靠测试人员不可能获得高质量的软件质量是整个研发团队的责任2. 场景是不可穷举的测试活动必须是风险驱动的关注于高风险的场景3.分层自动化测试是唯一出路;4.在正确的位置进行恰当的测试是自动化的关键【待续】S先生品质在于构建过程。检验贯穿构建过程提供及时反馈。我什么样的构建过程才能出Unix这样的品质呢迭代快速反馈TDD?S先生据说stroustrup听到重构时的反应是我们从七十年代就这样做了。推荐《UNIX编程环境》了解大师的编程方式。我您偷换了概念。不能说大师用了重构C和UNIX的品质就是靠重构或某种构建过程得来的。厨师做菜用到了勺子不等于菜好吃是因为勺子。S先生我没有概念。我们看到一个果就问因是什么。其实是泛因果无因果一切是机缘凑巧。我“品质在于构建过程”难道不是一个明白的因果描述吗S先生品质在于构建的人。我说话时没因果你看到了因果。我欢迎敏捷爱好者围观很高兴几个回合讨论下来S先生修正了先前“品质在于构建过程”的观点。什么重构、TDD、迭代、快速反馈等等构建过程都不是Unix品质的核心要素。我不但不认同“品质在于构建过程”、“测试是最好的设计方法”这类机械式的观点而且也不满意把软件优劣归结于“人是根本”的简单回答。我们需要探索一个既非机械式的也非简单地归结为某种理念的更深刻的答案。像Unix这样优秀的软件真正的核心要素到底是什么呢我的答案是模型即人心中的软件。在看得见、摸得着之前Unix的品质就已经存在于设计者的心中了他们不会在Unix诞生后惊讶“哇Unix的稳定性这么好7x24小时运行从来不蓝屏”。模型一定是设计者心中最美的东西为什么我们阅读操作系统源代码会像进入迷宫一般理不清头绪而作者自己却觉得头头是道呢因为作者早已“胸有成竹”我们以为他几十万行代码敲很辛苦实际上在他自己看来是按部就班一步步向目标靠近。模型是软件的灵魂存在于设计者的心中而软件的构建过程正是心中的世界向现实世界逐渐投影。模型可以是完美的而现实却非完美或许有时候我们很幸运地到达了或许有时候我们不得不向现实妥协改变心中的世界。试图制造灯泡的爱迪生可能会一时找不到熔点极高的发光金属而止步不前企图制造永动机的人则根本无法实现。在不完美的现实中我们明明想的是ab却敲成了a-b我们以为某个API可以很快返回没想到却等了5秒钟为了不阻塞用户不得不改成了异步。Review、测试等构建过程在一定程度上弥补了现实的不完美并对模型给予了反馈但它却无法决定软件的特质。如果设计者心中没有Unix即使每个实现环节都层层检验拥有光速般的反馈他有怎么能构建出Unix呢Windows NT内核和Windows 3.1内核的品质差别不在于微软采用了两种不同的构建过程而在于它们采用了不同的内核模型。灵魂与躯体的差别就在于此虽然对于普通的软件开发通常有不少成熟的模型供选择并不需要总是创造自己的模型但理解模型间的差异并在设计时选用恰当的模型仍然比采用某种构建过程更加重要。服务器架构采用Nginx似的异步IO模型还是采用Apache似的每个请求一个线程的模型远比开发是否采用了TDD更为重要。模型的产生是柔性的主要源于灵感过程的执行是刚性的主要源于逻辑。苹果砸在牛顿的脑袋上能砸出万有引力模型砸在我们脑袋上却只是“哎呦”一声但一个苹果3元钱两个苹果2*36元钱却在牛顿和我们面前是平等的。迷信灵感和迷信逻辑是两个错误的极端孔子讲“天下国家可均也爵禄可辞也白刃可蹈也中庸不可能也”任何一项技能的高级阶段都是关于“度”的艺术。如同光具有波粒二象性软件开发也具有艺术创作和工业生产的二象性它包含了柔性的设计和刚性的过程。越是不成熟的前沿领域越表现出柔性特征越是成熟的一般领域越表现出工业生产的特征。因此一个以新产品为主的创业型公司应当更注重设计更需要画家、诗人般的创造型人才而业务成熟产品稳定的大公司应当更注重过程更需要踏踏实实的生产线工人似的人才。但在当今这个瞬息万变的信息时代即使是世界500强的大公司也越来越不稳定越来越需要创新才能适应所以即使大公司也不可忽视软件开发的柔性特征。同时我们也不能迷信模型过程同样可以成为企业的核心竞争力比如富士康。虚虚实实实实虚虚其妙无穷。老外做Nike品牌虚我们做代工生产实高额利润被老外拿走了我们经营航空公司虚老外生产波音飞机实高价卖给我们高额利润又被老外拿走了。靠虚取胜还是靠实取胜这是个问题^_^或许我对于模型柔性的描述不太让人满意人们多习惯于有章可循的感觉即便不是死板的知识起码要找个“在某某思想的指导下”才觉得心里有着落。或许还有人说模型的确重要那么我们能不能有一个过程、模式或套路来推导出模型呢比如现在非常流行的从用户需求出发的分析模式即“分析需求抽象出共性共性是本质的本质是稳定的”这类模式的特点符合人们希望找到套路的心理一看就明白容易操作有成就感。我不否认这类模式的确可以得出可用的软件设计沿用成熟的模型也未尝不可。但我们应该明白心中的世界远比现实的世界更广大更美妙。世界是多元的用户需求、成熟模型等直接可见的东西只代表了某几个维度的视图设计者心中应当有更多的维度用户需要一个文本编辑器是设计者心中的世界决定了他交出的作品是Vi还是Emacs亦或是Notepad。亨利·福特说“如果你问用户需要什么他会告诉你一匹更快的马”。汽车源于福特心中的世界这是一个比只有马的世界更多彩的世界。乔布斯是一个不重视市场调研的人iPodiPhoneiPad都不是发个问卷做个市场调查看看用户需要什么的结果。Apple是乔布斯心中的世界在现实中的投影所以请打破“从用户需求出发”“从模式出发”的迷信释放你的想象力让自己心中的世界去包容现实的世界吧每个人心中都有一个属于自己的世界牛顿运动定律是牛顿心中的世界相对论是爱因斯坦心中的世界。哪一个才是本来的世界呢有没有本来的世界呢本来的世界是什么样子呢… 老子给我们启