随笔分类 -  荒谬过程,减少浪费

过程本身的作用是违反过程本身的目的的。 软件开发过程中充满着浪费,如果能够消除这些浪费,会提高效率。
摘要:你的启蒙老师应该也是这样教你的吧? 考试的时候要慢慢得答,不要图快。不仅你的启蒙老师会这样,你初次步入职场的时候也会有经验者来这样教导你。 慢工出细活。如果你已经根深蒂固的接受这个观点超过25年,那么基本上你一定认为这是正确的。而很难通过一篇博文就让你转变看法。并且在这期间,你一定尝到很多甜头——并因此对减慢速度求稳坚信不疑。先抛出结论告诉你这是一种误导,会误导你直接跟我争吵,尽管你在读了标题之后会知道我这篇博客想要表达的意思。我还是喜欢用归纳法,一步一步的解释为什么这个是一种误导。首先,慢就会提高质量吗?如果前面的观点“快会导致质量下降”,那么它的反面就是,“慢可以提升质量”。这两种说法一样 阅读全文
posted @ 2013-02-23 16:28 史蒂芬.王 阅读(364) 评论(4) 推荐(1) 编辑
摘要:前面我们曾经讲过《你的项目统计这些数据吗?》,这里我们在补充一些内容。1. bug原因分类 bug产生的原因只有一种,那就是代码编写错误,没有什么设计错误还是需求错误之类的荒谬分析。如果牵强的分类会发生什么情况,程序员为了减轻自己的责任,将问题尽量的归结为: 设计不充分 —— 设计人员的问题 需求不明确 —— 需求分析人员的问题 测试用例不足 —— 管理人员的问题——他没给我足够的时间用来测试。然而这些统统都不是问题的真正原因,bug产生的原因就只有一种:代码书写错误。 比如那个二分法查找的著名bug: mid = (left + right) / 2;会导致当left + right > 阅读全文
posted @ 2012-12-05 21:30 史蒂芬.王 阅读(396) 评论(0) 推荐(0) 编辑
摘要:CVS全称叫做:Concurrent Version System。并发版本系统。经常出现命令运行错误且不易修复。有Eclipse插件Visual Source Safe官方提醒需要经常备份数据。和Visual Studio结合的很好。需要用锁来工作,一旦锁定别人无法打开。会造成死锁文件问题。SVN全称叫做Subversion。常用的免费工具,许多开源工程用的就是Subversion有Eclipse插件保存修改履历git分布式版本管理工具免费工具有Eclipse插件能进行变更跟踪运行速度快采用分布式存储,数据更加稳定和Linux结合的更好。Android采用的就是git管理的代码。 阅读全文
posted @ 2012-11-23 10:32 史蒂芬.王 阅读(382) 评论(0) 推荐(0) 编辑
摘要:配置管理(Configuration Management)是为了确保软件开发过程中的产品的一致性、稳定性、可追溯性、回滚性等一系列目的而采取的技术上和管理上的手段的总称。往往由于软件开发过程当中重心放在了“开发”本身,配置管理往往被当成了不重要的环节而被忽略了。提起配置管理,很多人都会认为把文档和代码放在版本管理工具里就叫做配置管理了。顶多是做做目录划分,权限设置,签入签出规则设定等。做到上述这些只是做到了版本管理(Version Control),而不是配置管理。除了上述这些之外,配置管理还要求能够保证灵活性、时效性等目的。另外,做好配置管理的一个重要的作用是高效快速而稳定的发布系统。在开 阅读全文
posted @ 2012-11-21 16:44 史蒂芬.王 阅读(1872) 评论(0) 推荐(0) 编辑
摘要:加班费本来是保护劳动者的制度。但是实际操作中,它却沦为赏恶罚善的工具,促使着企业朝着更差的方向发展。我并不是要反对加班费制度,毕竟这种对于劳动者的保护制度应该拥护。但是,如果研究加班的产生原因以及结果,就不难发现加班费其实滋长了加班,并降低了开发效率。这是一个行为模式的问题:加班 -> 加班费(经济补偿) -> 没有人约束 -> 继续加班 -> 得到更多经济补偿 -> 故意降低效率。如果降低效率可以拿到加班费,并且,如果长期降低效率的话,可以拿到很多加班费。当问题第一次发生的时候,那是问题。当问题第二次发生的时候,那叫重复问题。当问题连续三次发生的时候,那就应该叫 阅读全文
posted @ 2012-11-19 14:18 史蒂芬.王 阅读(648) 评论(3) 推荐(2) 编辑
摘要:软件开发的行业标准是按照工时收费。企业一般按照下列公式来计算收费、成本和毛利润的。 收费额度 = 估算的开发工时 x 工时单价直接成本 = 开发工时 x 工时平均成本 毛利润 =收费额度 - 直接成本 如果开发投入工时和估算的工时相等的情况下,毛利润 = (工时单价 - 平均成本) x 投入工时那么,企业在某个人身上全年的收益按照如下公式计算收益 = 单价 x有工作的工时- 成本价 x 全年的时间 所以,开发企业为了提高收益率,往往会关注一个指标:稼动率(即:工作饱满度) 稼动率 = 有工作的时间/全年的时间 全年的时间是个固定值,所以雇主会尽量的增加员工的有工作时间,以保持利润水平。当然,降 阅读全文
posted @ 2012-11-19 12:48 史蒂芬.王 阅读(12126) 评论(41) 推荐(6) 编辑
摘要:RumtimeException是一种UncheckedException。UncheckException是一种不需要在方法签名中声明的异常类型。广为知道的RuntimeException的子类有NullPointerException,StringOutOfBoundsException。ArrayIndexOutOfBoundsException之类的。在代码运行的过程中由于变量为空或者数组越界等情况就会发生这种异常。当异常发生的时候,由于没有try-catch会产生程序意外退出的情况。为了避免发生这种异常而导致应用程序意外退出,需要对代码进行try-catch或者是在调用前进行非空判定 阅读全文
posted @ 2012-11-18 21:38 史蒂芬.王 阅读(1608) 评论(1) 推荐(0) 编辑
摘要:详细设计是V模型或者瀑布开发中的一个重要的环节。这个阶段负责把概要设计进行细化,并为代码书写作出指导。可以说是一个承上启下的重要环节。但是现实的情况真的如此吗?我们来反思一下:(1)详细设计和代码的吻合程度有多高? 假设在项目中,代码在测试后修改完毕提交后,并不修改详细设计,则详细设计和代码之间并不吻合,并且很大程度上,吻合度会非常低。 如果详细设计和最终的代码并不吻合,那么这样的详细设计并不能给将来的维护带来任何帮助。 如果详细设计并不能给后续带来帮助,为什么要书写它呢?因为——详细设计是用来指导代码书写的。(2)详细设计对代码的指导意义有多大? 详细设计的类图是用来定义类框架之间的关系的; 阅读全文
posted @ 2012-11-12 23:23 史蒂芬.王 阅读(6807) 评论(4) 推荐(2) 编辑
摘要:软件开发业的人常喜欢用生产制造业来比喻软件开发业的事情。由于对生产制造业的不熟悉,而是根据臆断和推测来进行的比喻,常常出现错误的结论。为此本文特地就生产制造业的情况和软件行业的类似于不同进行说明。1. Working Cell 提起生产制造业,第一印象往往都是生产线。但是生产线已经是在软件业出现之前的事情,如今的生产制造业早已经不是以前那种生产线的时代了。生产制造业以前是采用生产线的方式进行生产,生产线把生产工序分成各个阶段(熟悉吧?),每个阶段生产的产物都是下个阶段的输入。 生产制造业目前采用的方法叫做Working Cell。Working Cell是把生产人员分成各个工作小组,每个小组. 阅读全文
posted @ 2012-11-11 23:23 史蒂芬.王 阅读(348) 评论(0) 推荐(0) 编辑
摘要:和其他工业一样,从经济角度上来说,软件开发注重三个重要的指标Quality 质量Cost 成本Delivery 交货期Q-C-D三个指标综合起来考虑软件项目是否成功。质量 按照bug数量来测量成本 按照投入的工时来测量(以后还会讨论《软件开发按工时收费的荒谬之处》)交货期 按照交货时间来测量一般企业在改进的时候总是困扰于一件事情:QCD三个指标无论如何都无法改进。过去人们在用油纸伞,后来人们用折叠伞。因为折叠伞在:质量成本交货期方面都比油纸伞有优势。在其他的生产制造行业也有同样的例子,比如:电灯和蜡烛,打火机和火柴,等等,不一而足。那么在软件行业也有这样的改进方式吗?答案是肯定的。在软件的几十 阅读全文
posted @ 2012-11-11 20:27 史蒂芬.王 阅读(464) 评论(0) 推荐(0) 编辑
摘要:为了能够减少二次Bug率,一般组织都有一套Bug跟踪流程用来确保Bug修改的正确性。下面是一个典型的Bug跟踪流程。登记Bug -> 原因分析 -> 修改方案 -> 影响性分析 -> 修改 -> 测试 -> 测试组再测试这个Bug跟踪流程基本上会有一个较高的Bug率,我的经验显示,这个流程的二次Bug率在20%左右,即每修改10个Bug,其中有2个可能没修改完全或者是引起新的Bug。于是,一个改进的Bug跟踪流程出现了。登记Bug -> 原因分析 -> 修改方案 -> 方案确认 -> 影响性分析 -> 修改 -> 修改代码 阅读全文
posted @ 2012-11-08 23:18 史蒂芬.王 阅读(449) 评论(2) 推荐(0) 编辑
摘要:等待在软件开发过程中的浪费比例应该是最大的。下面这些种等待,在你的项目中是否也发生过呢?(1)等待客户确认(2)等待上司命令(3)等待环境构筑(4)等待前一个阶段的成果物(5)等待Bug修改完毕(6)等待测试结果(7)等待UI设计图(8)等待不知道什么——莫名其妙的等待其实大可不必发生这些等待。首先,要弄明白发生等待的原因,只有这样才能够找到根本去消除一些不必要的等待。等待是怎么发生的呢?第一种等待工序定义错误造成的。为什么两个工序之间需要空闲时间呢?因为这两个工序是由不同的人来完成的。一个人工作的时候另外一个人必须等待。---------------比如:以Bug修改为例,测试人员登记Bug 阅读全文
posted @ 2012-11-08 22:59 史蒂芬.王 阅读(357) 评论(0) 推荐(0) 编辑
摘要:SQA是Software Quality Assurance的缩写,意为:软件质量保证。通过了CMMI认证的组织往往会设置有专职的SQA人员。有时,他们也有另外一个名称:PPQAProcess and Product Quality Assurance。过程与产品质量保证。这个角色是通过对组织中的各个开发团队的开发过程进行跟踪,统计和总结,来提出全盘改进企业开发能力成熟度的。但是实际上他们并没有起到这个作用。他们的作用恰好相反,是用来拉低企业开发和管理水平的。这就是搅混水的SQA/PPQA的题目由来。我跟踪过一些组织的SQA的工作方式,事实说明他们是拉低企业的开发和管理水平的。那么为什么会产生 阅读全文
posted @ 2012-11-07 21:46 史蒂芬.王 阅读(1168) 评论(0) 推荐(0) 编辑
摘要:一般软件开发组织,在软件项目结束时会进行项目总结会,利用项目中的统计数据对项目中发生的成败得失进行总结分析,然后制定出改进计划,以希望在下次项目可以做的更好。然而,多年过去之后,对比一下现在的数据和当初的数据,基本上可以得出一个结论:这么多年没有丝毫改进,甚至还有退步的迹象。这是发生在很多地方的现象。为什么会发生这种现象呢?本人就那些无用的项目总结会以及无用的过程改进建议进行原因分析以及提出解决对策。 项目总结会的原意是遵照戴明环(P-D-C-A)进行改进的一种方式。它通过对项目发生的成败得失进行总结,并且制定详细具体的行动方案,以达到团队能力成熟度提升的目的。 项目总结会要由以下要素构成: 阅读全文
posted @ 2012-11-07 21:23 史蒂芬.王 阅读(415) 评论(0) 推荐(0) 编辑
摘要:前一讲我们提到了一些广为统计,但是实际上却可能没有指导意义的数据。那么这一讲,我们将来阐述那些需要统计并对项目产生积极影响的数据。一般来说,软件项目最关心的就是Quality (质量)、Cost (成本)、 Delivery(交货期)。管理者希望以不同的角度,不同的形式通过数据形式将这些属性展示出来。那么我们所统计的数据也就是围绕着三方面的。而同时,我们也要关系这些数据将为未来的改进提供什么样的帮助。1.圈复杂度 圈复杂度无疑是衡量软件质量的一个指标。圈复杂度有现成的工具来统计。C#.Net的NUnit,Java的Google Code Pro*,Matrix等都可以统计这个数据。圈复杂度的推 阅读全文
posted @ 2012-10-24 23:03 史蒂芬.王 阅读(2342) 评论(0) 推荐(0) 编辑
摘要:为了能够更好地改进软件项目,开发团队往往会统计一些数据,用以分析总结,并作为下次开发改进的依据。那么在软件开发中,你的团队会统计哪些数据呢?这些数据又如何为下次项目改进提出帮助呢?本文通过对软件开发过程中统计的一些数据进行分析,让读者能够从本质上重新理解统计数据的方法和意义。1. 生产率 统计生产率是为了能够了解开发团队的生产效率在整个行业中处于何种水平。长期统计之后可以为下次工时估算提供依据。 单位:每人月可以生产的千行代码数,KLOC/MM 统计了生产率对改进工作有什么样的帮助呢?支持统计这个数据的人说,统计生产率是为了和社会平均生产效率进行对比,从而分析改进方案。当自己的团队远远高于社会 阅读全文
posted @ 2012-10-19 22:22 史蒂芬.王 阅读(3234) 评论(3) 推荐(3) 编辑

点击右上角即可分享
微信分享提示