【IT168 分析评论】
之所以有兴趣写这一系列文章,很大程度上是因为前些日子阅读了Murray Cantor同学所著的《软件领导》一书,就如同一个人喜欢读诗,读着读着就会有想写诗的冲动,因此我的这些文字权当是一种读后感,即结合书里的一些观点,用自已的语言再加上自已的经验来重述一遍,说心里话,我自已是没多大能耐的,因此无法做到令每个人都满意,写文章就好象生活一样,有时需要一种平衡或取舍。
通常我们得到对软件产品的抱怨大多来自于测试工程师以及软件用户,测试工程师是温和派,他们按规定办事,尽管如此,他们与软件工程师始终都是死对头,也经常性地展开激烈的争论与冲突,国内大多IT公司的测试工程师的地位都略低于软件开发员,所以有时他们发现的BUG总不能及时有效地解决,有时会闹到项目经理那里理论一番。软件用户是激进派,发现的小问题往往被无限放大,甚至将你的软件产品贬得一文不值,而且用户最喜欢向软件公司的领导们投诉,这可害苦了程序员与测试员。
《软件领导》中写到:若要成为一名成功的软件领导者,就必须理解软件质量的构成要素。
以上所讲的都是与软件产品紧密联系的人员:软件开发者,产品测试者,产品最终用户,我们往往容易忽略另外两个与软件产品密不可分的角色,即客户(购买并拥有软件许可证的客户)与投资者(提供开发经费并拥有知识产权的投资者),在《软件领导》中将用户、客户与投资者称为产品的利害关系人,软件产品的最终目标是满足所有利害关系人需求的高质量软件。
每一种角色对软件产品的要求并不一样,这是让软件工程师与测试工程师极为头痛的事情。用户是直接使用软件产品的角色,用户通过使用软件产品来提高工作效率,给工作或生活带来方便与快乐,因此用户主要从功能性、健壮性、性能、使用简便、可靠性五个方面来评价软件产品的质量。作为软件产品的最终使用者,通常会参与软件开发与测试的整个过程,特别是需求分析阶段,用户起的作用是相当大的。
客户购买软件,客户一般并不是用户,用户关心的质量问题客户也关心,除了用户关心的五个方面,客户还关心以下因素:成本(购买成本,维护成本,升级成本,培训成本等等)、可支持性(补丁程序与升级版本)、可用性(是指系统实际在线,可由用户使用的工作时间比例)、可配置性(软件可定制的程度)。作为软件领导者,在进行软件项目或产品的开发过程中,不仅仅要考虑用户关心的问题,还要考虑客户关心的问题。
投资者是提供开发资金的个人和企业。投资者都希望得到投资回报,回报可以是利润或者是提高企业的生产效率,因此投资者所关心的问题有别于用户与客户,主要是:用户与客户对软件的可接受性,维护成本(它的增加会抵消掉利润),知识产权的价值。作为软件领导者,也需要从投资者的角度来思考问题,但我们往往十分关心开发成本,而对维修成本不太关心,一个软件刚做完的时候是赚钱的,大伙高兴得去挥霍庆祝,实际上,经过一两年的维护后,再去计算,就亏本得令人晕倒。
这世上应不存在完美无瑕的事物,软件也一样,不可能十全十美,作为软件人,我们可以追求完美,精益求精,但需要有一个底线,否则是自讨苦吃。那么,如何才能确保开发出高质量的软件产品呢?《软件领导》中列出了四点:
(1)在整个开发过程中让用户代表参与到项目中。
我相信很多开发团队是可以做到这一点的,我参与的很多项目就是这样做的,用户会与我们讨论需求分析,体系结构,用户界面等等,到测试阶段,也让用户参与产品的测试工作,可以说,自始至终用户都参与了,但结果还是不理想,因为用户太多了,这个用户满意了,并不代表所有的用户都满意,而实际上我们不可能让所有的用户都参与,所谓用户代表,就如同人民代表大会一样,代表人民的部分家伙事实上并不能真的说出人民的心声,他所说的大都是自已的想法,这是管理上的问题,在软件终验时,苦命的软件人在不同的用户之间纠缠不清劳碌奔波,幻想有一日能有更好的方法解决这些问题。
(2)在创造和维护系统体系结构方面进行投资。
软件质量是一个设计问题。在软件开发项目中,体系结构几乎是所有东西的基础。作为软件领导,必须理解系统的体系结构,必须让开发小组对合理的体系结构达成一致的意见,必须在体系结构的设计方面投入较大的精力与时间。
(3)确定质量优先次序并与团队针对这些优先次序进行交流。
这就如同MICROSOFT的软件,比如WINODWS,OFFICE等,都存在很多的BUG,但微软绝不会等到所有的BUG都解决了才发布与销售软件,这里面就涉及到质量优先次序的问题,怎么样等级的质量问题必须先解决了才能发布,怎么样等级的质量问题可以在发布之后去修打补丁,这也是软件领导所要慎重考虑的事情。
(4)询问团队在体系结构中如何处理不同的方面,并一定要理解问题的答案并对这些答案感到满意。
这是交流沟通的问题,不同的开发团队具有自已的方式,一个体系结构的确定是需要经过反反复复的讨论与审查的。
软件领导在很大程度上决定软件的质量,软件领导在软件项目开发的过程中有着关键问题的决定权,而这些问题以及软件领导的判断往往决定着软件产品的质量,因此作为一名软件领导,必须透彻理解软件质量的方方面面,作任何决定之前,必须考虑所有产品利害关系人的不同需求。