一地鸡毛——软件项目中的人际困局

一地鸡毛——软件项目中的人际困局
作者结合切身经历,展示了他之前所在团队软件项目延期的种种原因,而其中印象最深刻的是各种人事纷扰乃至于勾心斗角。

  六年前,毕业未久的我在一家外企工作,我所在团队开发的软件项目在交付到集成测试组时因种种原因延期一周。这本身根本不是什么大事情,但其间各种人事纷扰乃至于勾心斗角却着实令我印象深刻。

  公司

  我的老东家是一家大型跨国电信设备开发商,曾具有辉煌的历史。我还记得在公司110周岁的生日庆典上,一位高管致辞说:“110年,这不是奇迹,是成绩”,令人不胜欷歔。遗憾的是,公司在.com泡沫中遭遇重创,一蹶不振。时任CEO为求摆脱困境,打起了人力成本的主意。当时,公司在美国雇用一名工程师的综合人力成本接近中国的2.5倍【注:工资只是其中一小部分】。至于法国,成本比美国还要略高一些,而且不要忘了,人家可是35小时工作周。大家都是聪明人,很快就看到端详:公司正在法国裁员,将项目转移到中国。

  令人尴尬的是,我所在的中国团队恰好就在与法国团队合作。这一项目最早完全在法国,此后几年时间,中国团队大规模扩张人手(我就是这样进来的),将项目模块逐一从法国团队手中接过来。刚开始,法国工程师将原先的模块移交中国之后,便转而从事其他项目或职位,谈不上什么个人损失,双方共事可谓融洽。后来可就不是这么回事了。有一次,两位中国工程师去巴黎接手一个项目,一位法国工程师负责培训,为时2~3个月。在这位法国老师兢兢业业的帮助下,两位中国工程师成功掌握整个模块,按期于圣诞节前夕归国。告别巴黎时,没有一个法国同事去跟他们寒暄话别—那位法国老师被裁掉了,他的最后一个工作日恰好就在两位中国工程师离开的同一天,法国同事都去送他了。

  到发生本文将要详述的交付延期之时,所有模块的开发工作都已从法国团队移交到中国团队,而集成测试虽然仍由法国团队负责,但从法国到中国的移交也已开始。不妨猜猜看,法国集成测试团队的工程师们此刻在想些什么。

  团队

  我很幸运,毕业后初入职场就遇到一位好经理H,坦率地说,她也是我到目前为止跟随过的几位经理中最好的一位。中国很多女经理都有一个共同的特点:没有私心。她们对于自己的晋升、提薪并无多大热情,更愿意把心思、时间和精力花在辅导和培养自己的团队上面。

  H因分娩而“暂时”离开我们团队。经过短暂的过渡,接任我们经理的是T,一位新近招聘的职业经理人。他的风格与H大为不同。仅举一例说明。当年向H请一天年假,她总是微笑着说:“没问题。不影响工作吧?”T则会端起架子:“不影响工作吧?没问题。”语序上的变化,加上语气的差别,虽然只是细微末节,却反映了态度的不同、对员工是否尊重。除此之外,更严重的是工作态度问题。现在我们知道,T在北京待了不到一年时间,买下两套房、一辆车,还办妥了到加拿大的移民和那边的工作—而在当时,我们这些员工仅仅只是知道,我们的经理不太在办公室出现。

  在团队内部,我所在的FM小组与另一个CM小组工作是紧密衔接的。但在CM小组的核心员工之间却存有罅隙:小组长B与技术骨干S矛盾日增。怎么说呢,这两位都是很好的同事,然而好人之间也会彼此鄙视的:S认为B不懂技术,瞎指挥;B认为S目空一切,难以共事。缺少一位好领导来调和,好员工也不能组成一个好团队。

  流程

  我们开发的是一个庞大的电信软件项目—3G接入网网管系统,采用的开发流程仍然是传统的瀑布式。简单来说,依时间顺序,一个软件工程师(首先是各小组的小组长)需要依次参与以下几个阶段。

  需求阶段:跟踪和审阅由系统架构师撰写的需求文档,必要时要求澄清,然后预估工作量,经理据此调整人员安排。

  设计阶段:分析需求文档,完成模块设计,据此撰写高层设计文档和底层设计文档,前者以定义模块接口为主,后者则涉及更多细节。

  编码阶段:根据两份设计文档完成实际编码工作。

  单元测试阶段:是的,你没有看错。根据本部门正式的、成文的流程,单元测试阶段在编码阶段之后安排时间进行。在实践中倒是没有这么僵化,大家尽可以测试先行,只要时间大致齐即可。

  各开发团队在完成各自负责的一或多个模块的单元测试之后,将代码提交到统一的代码库,打上标签,然后将这些标签连同其他注意事项写成文档保存到指定目录。其后,就是集成测试阶段了—集成测试团队收集所有团队的所有标签,从代码库提出相应的代码进行编译,编译成功后即按照事先准备的测试用例进行测试,给开发团队提Bug。

  我参与了前面几个版本3.X、4.0的开发,仅从技术角度而言,瀑布式开发流程工作得尚称流畅。但工程师是要领工资的,软件写出来是要卖钱的,一套经典的瀑布式流程走下来往往耗时几个月甚至年余,等到软件产品正式发布,用户需求已然发生变化,这怎么赶得上趟呢。公司不是没有意识到这一问题,但舍不得做伤筋动骨的巨变,只愿意在现有流程上做一些微调,效果甚微。

  有一个例子很能说明问题。当时,中国的销售部门向总部反映,我们在中国市场遭遇到本土厂商的强力阻击,要想争夺中国市场,就必须在定制化方面下更大工夫。在大中华区乃至总部高层的大力支持下,我们部门成立了一个“快速特性”开发小组,专门根据中国客户的需求为我们的产品添加相应的特性。有一个快速特性是这样的:本来,我们的网管系统会在电脑屏幕上显示一台虚拟的机器,如果某个部件坏了,代表该部件的绿灯就会变成红灯并开始闪烁,提醒操作员注意。中国客户看过演示后说不错,但光红灯闪烁还不够,还应该放点儿警报声出来,不然操作员离开座位了怎么办。我们的销售一口答应下来。猜猜这个特性我们做了多久才交付给客户?三个月!这就是瀑布式流程下的“快速特性”!(当然,中国的销售部门和开发部门分别向国外的上司汇报,由老外负责协调中国的事情,这也是造成拖延的一个同等重要的原因。)

  这样拖拖沓沓做出来的产品,其销路如何不问可知。公司应对的办法,就是一方面推新版本、新特性来吸引客户,另一方面强调开发速度的重要。很显然,这两者之间存在矛盾:新特性越多,开发时间就越长,客户不会买账;可是如果新特性太少,跟上一版本差异不大,客户同样不会买账。

作者结合切身经历,展示了他之前所在团队软件项目延期的种种原因,而其中印象最深刻的是各种人事纷扰乃至于勾心斗角。

  六年前,毕业未久的我在一家外企工作,我所在团队开发的软件项目在交付到集成测试组时因种种原因延期一周。这本身根本不是什么大事情,但其间各种人事纷扰乃至于勾心斗角却着实令我印象深刻。

  公司

  我的老东家是一家大型跨国电信设备开发商,曾具有辉煌的历史。我还记得在公司110周岁的生日庆典上,一位高管致辞说:“110年,这不是奇迹,是成绩”,令人不胜欷歔。遗憾的是,公司在.com泡沫中遭遇重创,一蹶不振。时任CEO为求摆脱困境,打起了人力成本的主意。当时,公司在美国雇用一名工程师的综合人力成本接近中国的2.5倍【注:工资只是其中一小部分】。至于法国,成本比美国还要略高一些,而且不要忘了,人家可是35小时工作周。大家都是聪明人,很快就看到端详:公司正在法国裁员,将项目转移到中国。

  令人尴尬的是,我所在的中国团队恰好就在与法国团队合作。这一项目最早完全在法国,此后几年时间,中国团队大规模扩张人手(我就是这样进来的),将项目模块逐一从法国团队手中接过来。刚开始,法国工程师将原先的模块移交中国之后,便转而从事其他项目或职位,谈不上什么个人损失,双方共事可谓融洽。后来可就不是这么回事了。有一次,两位中国工程师去巴黎接手一个项目,一位法国工程师负责培训,为时2~3个月。在这位法国老师兢兢业业的帮助下,两位中国工程师成功掌握整个模块,按期于圣诞节前夕归国。告别巴黎时,没有一个法国同事去跟他们寒暄话别—那位法国老师被裁掉了,他的最后一个工作日恰好就在两位中国工程师离开的同一天,法国同事都去送他了。

  到发生本文将要详述的交付延期之时,所有模块的开发工作都已从法国团队移交到中国团队,而集成测试虽然仍由法国团队负责,但从法国到中国的移交也已开始。不妨猜猜看,法国集成测试团队的工程师们此刻在想些什么。

  团队

  我很幸运,毕业后初入职场就遇到一位好经理H,坦率地说,她也是我到目前为止跟随过的几位经理中最好的一位。中国很多女经理都有一个共同的特点:没有私心。她们对于自己的晋升、提薪并无多大热情,更愿意把心思、时间和精力花在辅导和培养自己的团队上面。

  H因分娩而“暂时”离开我们团队。经过短暂的过渡,接任我们经理的是T,一位新近招聘的职业经理人。他的风格与H大为不同。仅举一例说明。当年向H请一天年假,她总是微笑着说:“没问题。不影响工作吧?”T则会端起架子:“不影响工作吧?没问题。”语序上的变化,加上语气的差别,虽然只是细微末节,却反映了态度的不同、对员工是否尊重。除此之外,更严重的是工作态度问题。现在我们知道,T在北京待了不到一年时间,买下两套房、一辆车,还办妥了到加拿大的移民和那边的工作—而在当时,我们这些员工仅仅只是知道,我们的经理不太在办公室出现。

  在团队内部,我所在的FM小组与另一个CM小组工作是紧密衔接的。但在CM小组的核心员工之间却存有罅隙:小组长B与技术骨干S矛盾日增。怎么说呢,这两位都是很好的同事,然而好人之间也会彼此鄙视的:S认为B不懂技术,瞎指挥;B认为S目空一切,难以共事。缺少一位好领导来调和,好员工也不能组成一个好团队。

  流程

  我们开发的是一个庞大的电信软件项目—3G接入网网管系统,采用的开发流程仍然是传统的瀑布式。简单来说,依时间顺序,一个软件工程师(首先是各小组的小组长)需要依次参与以下几个阶段。

  需求阶段:跟踪和审阅由系统架构师撰写的需求文档,必要时要求澄清,然后预估工作量,经理据此调整人员安排。

  设计阶段:分析需求文档,完成模块设计,据此撰写高层设计文档和底层设计文档,前者以定义模块接口为主,后者则涉及更多细节。

  编码阶段:根据两份设计文档完成实际编码工作。

  单元测试阶段:是的,你没有看错。根据本部门正式的、成文的流程,单元测试阶段在编码阶段之后安排时间进行。在实践中倒是没有这么僵化,大家尽可以测试先行,只要时间大致齐即可。

  各开发团队在完成各自负责的一或多个模块的单元测试之后,将代码提交到统一的代码库,打上标签,然后将这些标签连同其他注意事项写成文档保存到指定目录。其后,就是集成测试阶段了—集成测试团队收集所有团队的所有标签,从代码库提出相应的代码进行编译,编译成功后即按照事先准备的测试用例进行测试,给开发团队提Bug。

  我参与了前面几个版本3.X、4.0的开发,仅从技术角度而言,瀑布式开发流程工作得尚称流畅。但工程师是要领工资的,软件写出来是要卖钱的,一套经典的瀑布式流程走下来往往耗时几个月甚至年余,等到软件产品正式发布,用户需求已然发生变化,这怎么赶得上趟呢。公司不是没有意识到这一问题,但舍不得做伤筋动骨的巨变,只愿意在现有流程上做一些微调,效果甚微。

  有一个例子很能说明问题。当时,中国的销售部门向总部反映,我们在中国市场遭遇到本土厂商的强力阻击,要想争夺中国市场,就必须在定制化方面下更大工夫。在大中华区乃至总部高层的大力支持下,我们部门成立了一个“快速特性”开发小组,专门根据中国客户的需求为我们的产品添加相应的特性。有一个快速特性是这样的:本来,我们的网管系统会在电脑屏幕上显示一台虚拟的机器,如果某个部件坏了,代表该部件的绿灯就会变成红灯并开始闪烁,提醒操作员注意。中国客户看过演示后说不错,但光红灯闪烁还不够,还应该放点儿警报声出来,不然操作员离开座位了怎么办。我们的销售一口答应下来。猜猜这个特性我们做了多久才交付给客户?三个月!这就是瀑布式流程下的“快速特性”!(当然,中国的销售部门和开发部门分别向国外的上司汇报,由老外负责协调中国的事情,这也是造成拖延的一个同等重要的原因。)

  这样拖拖沓沓做出来的产品,其销路如何不问可知。公司应对的办法,就是一方面推新版本、新特性来吸引客户,另一方面强调开发速度的重要。很显然,这两者之间存在矛盾:新特性越多,开发时间就越长,客户不会买账;可是如果新特性太少,跟上一版本差异不大,客户同样不会买账。

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-29 01:01:14

一地鸡毛——软件项目中的人际困局的相关文章

CMM可重复级在特殊软件项目中的应用

引言 由 SEI 在 1991 年 8 月发布的软件能力成熟度模型( SW-CMM ),用来评估软件企业的 成熟度级别,使软件企业了解自己的优势和不足之处,从而持续地改进企业的软件开发过程,提高管理水 平,降低管理成本,保证软件开发效率和软件质量. 然而, CMM 是针对大型项目和企业制定的. 小项目和中小企业由于受到相应条件的限制,如组织结构.角色和关系.过程模式定义等,生搬硬套 CMM 框架只能给自己带来沉重的负担.可取的做法是把 CMM 作为一个参考,从 CMM 评估体系中汲取适合于自 身

软件项目中的文档管理(上)

文档管理,有些公司也称为知识库管理,本文还是以文档作为称呼吧. 1.先说说文档管理的历史背景和演化史吧 一般情况下,文档可以包含很多方面的内容,一个Excel表格,一个需求设计文件,一个Bug的解决方案,一个功能的描述甚至是一个有用的图片都可以成为一个文档.所以对文档的标准解释就是文档是软件开发,使用和维护中的必备资料.它能提高软件开发的效率,保证软件的质量,而且在软件的使用过程中有指导,帮助,解惑的作用,尤其在维护工作中,文档是不可或缺的资料. 当然文档不仅仅是在软件开发中需要使用,其实是在任

这个工具可以清除软件代码项目中的硬编码密钥

本文讲的是这个工具可以清除软件代码项目中的硬编码密钥,Truffle Hog可以在源代码存储库内找到20个字符或以上的访问令牌和密钥 安全研究人员开发了一种新工具,这一工具可以自动检测软件项目中已被硬编码的敏感访问密钥. 这种名为Truffle Hog( https://github.com/dxa4481/truffleHog )的工具由美国研究员迪伦·艾雷用Python语言开发.它可以通过扫描源代码库里包含20以上字符的高熵值的字符串来搜寻硬编码的访问密钥.高香农熵,即我们通常所说的信息熵,

软件开发中的同行评审

在<浪潮之巅>这本书中,吴军老师描述了在Google早期的工作方式,其中有一段是这么写的:我一般会在吃完晚饭后把代码修改的清单发给克雷格做代码审核,他一般晚上10点左右会回复我,给我修改意见,详细到某一行多了一个空格.吴军老师所描述的内容,其实就是软件开发过程中的同行评审流程. 对于同行评审,我有相当的体会.之前在某大公司工作的时候,我参与了多个软件版本的维护工作,发现不同版本程序质量差别很大.究竟是什么原因造成的?细究之后才发现,程序质量高的项目组在最终提交版本之前,无一例外都做了一件事情,

Palo Alto研究员称 未知攻击者使用恶意程序Dimnie攻击Github开发者 企图在开源项目中注入后门

过去几个月间,在GitHub网站上发布代码的开发者陆续遭到攻击,这些攻击都使用了一种鲜为人知却切实有效的网络间谍软件.攻击始于1月份,通过精心构造的恶意邮件吸引开发者注意,如请求他们为开发项目提供帮助或邀请他们参与有偿定制编程工作. 恶意邮件诱骗开发者下载恶意程序Dimnie 邮件中的.gz附件包含Word文档,其中嵌入了恶意宏代码.运行后,宏代码会执行PowerShell脚本,连接远程服务器,下载恶意程序Dimnie.根据Palo Alto Networks(PAN)研究员所说,Dimnie至

软件项目“免坑”指南

"谁也无法改变现状,唯有无数程序员血洒大地,才能使项目重建天日."这一点也不夸张,软件项目做烂了就是个坑,参与者也不过是填坑的.就像是在魔兽世界战场遇到国家队一样,你赢也赢不了,出也出不去. 一.坑有多深? 当我们进入一个项目时,通过不断观察我们可以发现我们的项目到底是不是一个坑.造坑的项目,往往具有某些"臭味",以下是我的一些认识,这些"臭味"即是项目健康状态不佳的明显标志: ● 编码规范形同废纸,代码质量低下.每个项目都有编码规范,但真正严格

软件项目,什么叫坑爹!大家注意了

"谁也无法改变现状,唯有无数程序员血洒大地,才能使项目重建天日."这一点也不夸张,软件项目做烂了就是个坑,参与者也不过是填坑的.就像是在魔兽世界战场遇到国家队一样,你赢也赢不了,出也出不去. 一 坑有多深? 当我们进入一个项目时,通过不断观察我们可以发现我们的项目到底是不是一个坑.造坑的项目,往往具有某些"臭味",以下是我的一些认识,这些"臭味"即是项目健康状态不佳的明显标志: ◆  编码规范形同废纸,代码质量低下 每个项目都有编码规范,但真正严

《挖掘管理价值:企业软件项目管理实战》一1.2 软件项目特点和意义

1.2 软件项目特点和意义 挖掘管理价值:企业软件项目管理实战为什么对软件项目要提出专门的管理要求呢?软件自身的特点决定了它有别于一般的工程项目,这些特点反映在以下3个方面. 1.无形性软件不像大桥.房子.高速公路,它没有具体的.物理的实体,仅仅是存在于计算机系统中的代码和屏幕上的图形.因此软件项目也没有可见的.可触摸的实体,其管理过程就是将无形的软件构造过程可视化.具体化.可操作化和可控化. 2.多变性如果一座跨江大桥建到一半的时候,想把桥的一端换一个地方是不可能的,除非把大桥拆了重建.但是软

Google 在 47 个开源项目中发现了 1000 多个 bug

在过去五个月中,Google 的 OSS-Fuzz 计划已经在 47 个开源软件项目中发掘了超过 1000 个 bug . OSS-Fuzz 是 Google 在去年12月推出的一个开源安全计划,针对开源软件进行持续的模糊测试,利用更新的模糊测试技术与可拓展的分布式执行相结合,提高一般软件基础架构的安全性与稳定性.项目结合了多种模糊测试技术/漏洞捕捉技术(即原来的libfuzzer)与清洗技术(即原来的 AddressSanitizer),并且通过 ClusterFuzz 为大规模可分布式执行提