论平庸
《美国独立宣言》说“人人生而平等”。这是非常正确的,但我们并不是都保持平等。或者,转述一下动物农场猪拿破仑,所有人都是平等的,但有些人比其他人更平等。 我在这里不是在谈论政治,尽管这可能是一个有趣的话题。我说的是人们生产产品能力的差异。更具...
《美国独立宣言》说“人人生而平等”。这是非常正确的,但我们并不是都保持平等。或者,转述一下动物农场猪拿破仑,所有人都是平等的,但有些人比其他人更平等。
我在这里不是在谈论政治,尽管这可能是一个有趣的话题。我说的是人们生产产品能力的差异。更具体地说,是一种高质量的软件产品。
这些年来,我认识了很多软件人——有些好,有些坏,有些平庸。我认识一些人,他们表现得非常好,几乎达到了《暮光之城》类的鼓舞人心的程度。我见过一些当出租车司机可能会更好的人。
不,等等。这是对出租车司机的侮辱。
这些年来,我看到了很多软件——有些好,有些坏,有些丑。大部分充其量也只是平平无奇。
不,等等。根据国防部20世纪70年代的研究,大多数软件从未交付,或者交付但从未工作过。这是大多数交付的、可工作的软件都很平庸。
今天摆在面前的问题是:人和他们的产品之间有相关性吗?高质量的软件来自高质量的人吗?或者你能从平庸的人那里得到高质量的产品吗?今天有专家自信地断言,只要我们制定足够的程序和方法,你就能做到。
我不太确定。。他们这么说已经40年了,但我没有看到太多证据。
什么是高质量的软件?
在我们进一步讨论软件和构建软件的人之间的关系之前,我们最好定义一下我们所说的高质量软件的含义。
多年前,时任《计算机语言杂志,邀请我在杂志的会议上发表论文。这篇论文应该讨论软件质量以及如何获得它。
这是一个及时的话题;这个词当时被广泛使用。就像用户友好性、模块性或灵活性一样,每个人都声称他们的软件拥有它,但很少有人愿意定义它或支持他们的说法。
这对我来说是熟悉的地方。稍早,我和同事Joe Philipose就“用户友好型软件.” (“迈向友好环境”,Proc。第二届凤凰城年会,IEEE计算机学会出版社,马里兰州银泉,1983年3月14日至16日,第527-533页.
我们注意到,“友好”这个形容词通常只用于人际交往。因此,我们推断,用户友好的软件应该给我们留下与友好人类相同的感觉。把它想象成终极的图灵测试。
我在定义软件质量时也采取了类似的方法。我问自己,我们在其他更有形的产品中看到了什么属性,导致我们认为它们具有被称为质量的难以捉摸的属性?我看了看汽车、钢琴、小提琴、相机和立体声设备等。
想想劳斯莱斯、梅赛德斯-奔驰、施坦威钢琴、斯特拉迪瓦里。没有人会说这些产品散发出质量,尽管我确实记得有一位观众因为我没有包括她的凯美瑞而受到了口头上的冒犯。
从美学角度来说,我应该注意到她有一个正确的观点。毫无疑问,劳斯莱斯是一款高质量的产品。它也非常昂贵。她的凯美瑞在豪华感方面可能没有太大的回报,但它以合理的价格提供了质量。这很重要。
有些人有时尖锐地宣称,高质量的软件就是满足其需求规范的软件。这显然是一个不充分的定义。汽车的规格可能会说,“在300英里的距离内运送一名司机和三名乘客。”但福特Model a轿车可以做到这一点。一个King Midget(谷歌搜索)可以携带两个。
仅仅要求一辆汽车能够以规定的最高安全速度通过一条三叶草高速公路是不够的。如果你超过这个速度,我们也应该预料到这一点。轮子不会飞出。事实上,任何质量的定义都应该包括产品在远远超出设计极限时的行为。轮胎吱吱作响没问题。转弯乌龟不行。
长寿是消费品的一个问题。梅赛德斯拥有它,20世纪30年代的梅赛德斯拍卖价格经常超过100万美元。所以,很明显,施坦威和斯特拉德也是如此。
最后,我提出了一些属性,对我来说,这些属性定义了一个高质量的产品。其中包括
*大大超过规定的性能限制
*当压力远远超过这些极限时,要做出理性的回应
*永远不会失败,即使输入不正确
*最后。
这显然不是一个详尽的列表,但你可以了解情况。
继续我的论文,下一个问题是,如何打造高质量的产品?
当我思考所有的类比——汽车、钢琴等——我意识到这与建造这座建筑的人以及他们对它的感受有很大关系。当你在施坦威的下面看时,你会看到这些精致的木制接头,它们是由最高质量的木材制成的。我不知道这是事实,但我强烈怀疑,即使在客户完全看不见的地方,你也会发现同样种类的精致接头。
为什么这些关节在那里,而且建造得如此小心?我认为,他们之所以在那里,是因为制作接头的人不仅仅是一名流水线工人,在工会规模下工作。他是一个工匠,一个手工艺人。一个工匠不会创造一个漂亮的关节来打动买家,甚至他的老板。他创造它是因为这是正确的做法。他为自己的工作感到自豪,并从正确的做法中获得工作满意度。
你打算怎么做那个在需求规范中?
软件危机
除非你已经50多岁了,否则你可能不记得70年代震撼美国国防部的软件危机。这是基于两种趋势。
首先,有人研究了在国防部武器系统中使用软件的趋势,并对其增长速度感到震惊。他们说,到1980年,软件采购将占国防部整个采购预算的90%。
还有人研究了国防部现有项目中软件的质量,感到震惊。国防部采购的软件中有50%以上从未交付。又交付了一大块,但没有成功。还有一块有效,但很难使用,因此被放弃了。
最终,只有约3%的国防部采购软件实际交付、运行并投入日常使用。
软件危机硬币的另一面是可用人才库。有了更多的软件,你需要更多的人来构建它。而大学的产量远远不够满足需求。
更糟糕的是,正如我之前提到的,并不是所有的程序员都是平等的。统计分布就是这样,大多数新程序员很有可能不会成为超级明星。大多数都是平庸的。对节目制作人的更大需求可能意味着雇佣更多平庸的人。
简而言之,这就是软件危机:国防部将需要越来越多的软件,质量比目前高得多。为了生产这种软件,它需要更多的程序员——比大学所能生产的还要多。由于他们将不得不耗尽劳动力来获得这些人,因此这些人的素质很可能会下降,而不是上升。
软件危机似乎只有一个解决方案:你必须从平庸的人那里获得高质量的软件。
这可能吗?是的,这就是问题所在。
方法论
学术界和工业界的许多团体都研究了这个问题,并进行了旨在提高软件生产力和质量的研究。他们宣称,解决方案是方法论 更具体地说,他们的方法。
“方法论”一词是“方法”的10美元单词。当你说出来的时候,它会让你听起来更权威。这个想法只是定义一套实践,如果遵循这些实践,即使人们充其量也很平庸,也能给你更好的机会实现所谓的质量。与装配线一样,使构建软件的过程如此严格,如此严格地控制,以至于任何白痴都可以遵循它并提高生产力。
许多团体获得了研究资助,以开发和完善他们的特定方法。一些试点项目显示,软件生产率确实有了显著提高,错误率也降低了——提高了10:1。
不幸的是,这些性能在被他人使用时并不总是能够实现。似乎参与试点项目的人——通常是研究生——都是该方法的热心支持者,所以他们往往比普通的平庸程序员更努力,更有创造力。
即便如此,大多数组织还是采用了这样或那样的方法,并将其用于软件程序中。直到今天,我们一直在使用这样的方法。
一位软件大师是这样说的:想象一下,你在一家新公司开始工作,你的老板走过来,把一份500页的文件扔在你的桌子上。他说:“这是我们公司的方法。阅读并研究它;这是我们将在这个项目中使用的方法。”
回想一下软件方法论的目的是从平庸的人身上获得高质量的软件,经理的信息是什么?难道他不认为你是一个平庸的人吗?
现在,别误会我的意思。我并不是在反对方法论。我绝不主张我们回到过去的糟糕日子,即临时开发,程序员是坚定的个人主义者,流程完全杂乱无章。我只是在问一个问题:即使是最好的、最精心制作的、最虔诚遵循的方法,也能从平庸的人身上生产出高质量的软件吗?
我断言它不能。我进一步断言,我们越严格地执行方法,就越有可能得到一个平庸的产品。
这样可以吗?“足够好”足够好吗?也许是这样。但它仍然是平庸的。
质量保证
许多组织都有独立的部门负责软件质量保证(SQA)。我和他们中的一些人合作过。我主持过不少设计评审,还管理过一个SQA部门。一个独立的SQA部门是合理的,以减轻软件开发人员的利益冲突。
大多数软件开发人员希望他们的软件比平庸的要好,但他们也面临着日程安排紧张、规范定义松散和管理人员挑剔的问题。最终,他们可能更专注于留住老板,而不是确保质量。一个独立的QA小组可以更好地脱离生产计划。
我从QA那里得到了喜忧参半的结果。在一家公司(霍尼韦尔),质量保证小组非常出色。他们不止一次救了我的面包。首先,他们是阅读和理解各种规范的专家,以及我们必须做的事情,以按时满足合同要求。
更重要的是,他们本身就是优秀的软件工程师。他们实际上对我们软件的每一行都进行了桌面检查,并指出了团队成员遗漏的许多错误。团队成员并不总是欣赏他们眼中的“窥探”他们的软件,但我确实很欣赏。
并不是所有的SQA小组都这么有帮助。在太多的情况下,QA负责人更多的是官僚主义,而不是工程师,而且通常甚至不知道编程。他更专注于勾选问卷中的复选框。你按时复习了吗?有人问过以下问题吗?所有的行动项目都完成了吗?如果他能对所有这些问题说“是”,他就可以勾选小方框,并宣布软件有质量。
它真正拥有的,充其量只是平庸。在我的下一篇专栏文章中了解更多信息。。
(杰克·克伦肖是一名系统工程师,著有 实时编程数学工具包他拥有奥本大学物理学博士学位。给他发电子邮件jcrens@earthlink.net。有关Jack的更多信息单击此处)