出处:网界网
软件项目若要取得成果,好的发行管理必不可少,它可以确保当软件开发完成时,能成功地提供给希望使用它的人,能够让已有客户感到满意并有希望赢得新客户。
英国一家电信提供商曾遇到了一个问题。它需要部署一台关键业务供应商交换机,这要求它重新设计其计费和账户管理系统。这些系统必须在3个月内部署到位,否则该公司面临损失数亿英镑和股价下跌的风险。但是,这家电信提供商的开发过程不佳,其发行管理存在很多问题而且不一致。
该公司请我们帮助在规定的期限内提交该软件,扭转失败的发行管理过程。在3个月内,我们要发行重新改造过的应用的待发行的版本和两个计 划发行的版本。最重要的是,我们建立了一个通畅的、轻型的发行管理过程来确保未来的发行按时和符合所要求的质量。下面我们将告诉您我们是如何做的――包括 我们犯的错误。
1.了解发行管理的当前状况
在不了解纠正问题的对象是什么、它如何以及在何处出现了问题时,你不可能开始纠正问题。我们改进客户的发行管理系统的第一步是通盘掌握当前发行过程。我们从与涉及软件过程的关键人员的多次讨论入手。
通过这些讨论,我们确定我们的起点相当糟。当我们加入这个项目时,项目中有在完成两个月后仍在等待发行的软件。
测试环境受到限制并且缺少管理,因此它们一般都过时了,不能使用。更糟的是,启用新环境和更新已有环境需要相当长的时间。
当我们到达现场时,手工执行回归测试需要长达3个月的时间。它通常被放弃,从而大大降低要发行的软件的质量。
总体上讲,士气非常低。这些人在定期提供重要的软件上从未得到过帮助,而这消磨掉了他们的锐气。
2.建立定期的发行周期
一旦我们掌握了发行流程当前的状况,我们着手建立定期的发行周期。
如果工程团队是项目的心脏,那么发行周期则是它的心跳。在决定发行软件投入生产应用的频率时,我们必须了解我们需要做多少非功能测试以及它需要多长时间。这个项目需要回归、性能和集成测试。
建立发行周期至关重要,因为:
◆它提供讨论软件可能需要的非功能测试的机会。
◆它宣布有关人员何时可得到某个功能的时间表。如果知道这个功能将定期发布,他们可以在同意这将是什么功能上取得一致。
◆它建立一种各团队(包括营销和工程)可以遵守的程序。
◆它给予客户他们可以订购并得到某种东西的信心。
你的发行周期必须尽可能地准确,而不是你在午餐时臆想出来的虚幻的数字。在宣布发行周期之前,先检验它。对于失败的发行过程来说,没有什么比不现实的日期更糟的了!
我们从建议一个星期的周期开始。这个计划证明是不可行的;客户的数据库环境不能很快刷新。然后我们尝试两个星期的周期。这种作法没有受到参与者的直接反对,但前二次它没有取得成功!最后,当我们克服了环境周转瓶颈和自动完成一些测试之后,两星期成为可取得的周期。
最终,我们建立了一个每两个星期将来自工程团队的可投入生产应用的代码投入系统测试的周期。然后两周后,我们发行这段代码投入生产应用。
记住:你的发行周期与你的客户希望得到软件的时间无关。它是你何时可以在所需的质量水平上提供它的时间。我们的客户之所以支持我们的发行周期,是因为我们让他们参与决定这个周期。他们的意见只是决定发行周期的一个考虑因素。
3.采用轻量流程,及早测试和定期审查
如果有一种设计(或重新设计)过程的指导原则的话,这就是完成一点工作后,审查你的结果,然后再完成更多的工作。重复这种循序渐进的方式,直到得到你想要的结果。
轻型过程是那种不需要冗长的官僚主义审批或无休止的会议就能达成一致的过程。它们通常只需要最小的输入和输出的可接受水平。它们失去的是臃肿和官僚主义,得到的是对变化的反应和广泛的采用!
这种作法的基础是棘手的文档资料问题。你必须记录你做了什么、如何做的。否则,你去审查什么以及如何改进?
我们并不是说那种危害热带雨林和让读者昏昏欲睡的文档资料。我们是指人们(技术人员和其他人员)可以阅读并按照它采取行动的文档资料。
我们的工程团队选择了Confluence――一种商用工具――来协作记录他们的工作。他们利用这种软件创建记录他们每个工作周期同意 开发什么的最小但有效的文档资料。他们记录他们开发什么,他们如何开发以及让其运行需要什么。我们看到了这种方法的价值并把它(方法和工具)推广给参与软 件开发过程的每一个人。
最初,我们建议了发行我们从工程团队得到的软件的任务顺序。它覆盖我们如何从源代码控制管理系统拿到软件;软件包叫什么以及每个元素 (可执行代码、数据库脚本等等)将如何运行、运行在什么平台上。那么,我们利用每个元素的哑代码进行模拟使用。我们测试了我们的顺序,记录了我们模拟使用 时做了些什么。这些工作成为安装说明的基础。
下一步是让要部署真正版本的人只使用我们的文档资料进行另一次模拟使用。在他们模拟使用过程中,扩展、补充和改进我们的安装说明。由于每个人都为文档资料做出了贡献,因此这个过程变成人人参与的过程;由于他们成为其中的一分子,这个过程得到更广泛的采用并带来更好的质量。
在每一次发行后,我们都审查这个过程。我们研究文档资料,确定在发行过程中进行的修改。每一次我们都分析文档资料如何能够得到改进,并根据分析结果对发行过程进行改进。
4.及早建立发行基础设施
发行基础设施是部署软件和让用户能够使用它所需要的任何东西。你对客户的责任不只是你开发了伟大的软件,它还包括软件可供客户访问和使用。
建立好的发行过程的关键在于在工程团队完成软件开发前,确定你需要什么发行基础设施才能将软件提供给客户。
发行基础设施涉及硬件、存储、网络连接、带宽、软件许可证、用户配置文件和访问权限。人员服务和技能也是发行基础设施的组成部分。例如,如果你需要安装和配置专家软件,将这种技能可用性或获得它的成本排除在你的基础设施计划之外是不明智的。
尽早发现获得所需硬件中隐藏的瓶颈或缺少的技能(比如,配置安全的网络)至关重要。你必须在它们阻碍你提交软件之前解决它们。
这项工作份量并不轻。我们的项目刚一启动,我们就努力让我们的发行基础设施部署到位。甚至在6周的研制期后,我们仍在等待测试服务器所需的专用内存和硬盘。
5.尽可能自动化和标准化
自动化使你能够在不占用宝贵的人力资源的条件下,完成重复的任务。标准化确保你的自动化的输入和输出每一次都是一致的。
在我们参与项目前,工程团队手工制作可部署的软件包。新软件包当时不能保证与上一个软件包相同;事实上,甚至不能保证它是他们开发的软件,更不能保证它是否能运行!创建具有他们在一个可能部署的结果中提供的特性的软件包常常需要技术人员花很多天时间。
我们立即设计了一个部署工程团队将提交给我们的软件包的结果和接受标准,并帮助他们实现制作软件包的标准化。这触发了部署在每一次发行时的一致的结构中构建软件的自动化的过程。
发行软件打包突然不再是个问题。因为我们自动完成接受标准的检验――例如,这段代码必须在提交和测试之前进行单元测试,以确保它可以得到部署――因此我们保证了它的可执行性。因此,我们能够在非常短的时间内利用一条命令进行完成的代码的打包、确定版本以及测试和部署。
但是,自动化并不仅限于此。在每一个开发周期中,我们有更多的回归测试要做。已有的回归测试手工执行需要3个月时间;因此,发行的软件从没有得到完全的测试。
我们新建立的发行周期意味着在我们能够发行软件投入生产应用的两周内,软件必须完成回归、性能和集成测试。我们可以通过为每一类测试建立不同的环境来克服不同的测试类型(集成和性能)的问题。但我们怎样才能将3个月的回归测试压缩到两周的时间窗里呢?
首先,我们发起了一次确定优先重点的运动。客户确定了最高优先级的回归测试:他们接受的作为老功能仍在工作的证明的最小值。然后,我们着手自动化完成这些工作。随后的接受测试还实现了自动化,从而确保我们可以在几个小时而不是几天回归测试每一发行版本。
6.建立正面的预期
如果发行软件对于你十分重要的话,不要对它秘而不宣。当我们的团队知道这十分重要时,他们改进了提交软件版本的承诺。
我们通过确定指定的发行经理在团队同意软件准备就绪时预测软件准备就绪来支持这种重要性。我们让程序经理(实际上是我们的客户)向团队解释这个软件版本为什么重要的原因。(最终,这归结于损失数百万英镑!)
我们要求工程团队提交的软件符合标准(确定了版本、经过测试、提供文档资料和打包);我们确定我们将在每一个发行周期需要这种标准包。我们必须解释我们为什么以这种方式需要软件(它使我们的自动化过程变得更容易、更一致),并且我们将工程团队的反馈融入到发行工程中。
建立正面的预期是增加每个参与这个过程的人的动力的非常好的办法。我们没有被赋予任何行政权力,因此不害怕制裁或开除。相反,我们利用 正面预期的力量,让人们参与进来帮助我们改进发行过程。我们让个人做出关键决定(他们以前从未感到能这样做),因为“"Mike 和Tym周四前需要这个软件,我们说我们将提交它。”
7.向人员投资
不管我们在硬件、软件和神奇的过程上花了多少钱,没有团队成员的积极参与,你在发行软件上享受不到可持续的成功。更糟的是,你甚至最后不能发行任何软件!
你可能认为我们要谈的是找到合适的人员并重奖他们,或者认为我们要谈的是工程团队完成工作所需要的工具和技能。事实是,你知道你应当为 你的团队找到合适的人员(“合适”的定义对于不同行业是不同的),你应当恰如其分地根据他们提供的价值奖励他们,是的,你应当确保他们拥有他们所需的工具 和技能。
一个基本的前提是,人们本质上对做好的工作感兴趣。如果你想让团队成员关心你的产品,关心做好工作,你首先必须证明你关心什么对于他们 重要。从项目一开始,我们就在相互尊重和理解的基础上,与团队中的每个人建立了非常好的和谐关系。我们证明我们灵活处理个人面对的挑战,我们尽我们的可能 提供帮助。不管这是购买午餐、提供饮料、组织培训与整理建议、倾听问题或扮演辩论时的对立面,我们都去做各种让每个人都感到作为发行过程的关键部分的价值 所需要的事情。
当谈到项目时,我们发现一种普遍的冷漠感。一些长期的永久雇员只简单地等待冗余包;另一些人由于从来没有把事情做好而从不被要求做任何事情。让许多人回到关心向发行过程贡献他们的个人价值的状态,需要大量的人际关系建设和时间投入以及正面的肯定。
发行管理是任何软件项目非常重要的部分,但常常没有给与应得的重视。在我们理顺这个中型电信企业的软件发行过程的经验方面,我们还有很多很好的提示、建议和结论。但上面的7条是这个案例中对于我们最重要的7条经验,尽管我们期望它们成为应用于任何案例的好想法。
好的发行管理需要艰苦的工作、坚定的决心和通畅的交流勾通;但是,最伟大的技能是审查、学习和适应改进的能力。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14780914/viewspace-536455/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14780914/viewspace-536455/