时间:2024-05-04
斯琴巴图
(1.内蒙古师范大学科学技术史研究院,呼和浩特010022;2.内蒙古妇女干部学校,呼和浩特010051)
软件的质量对于航空航天、军工、医疗卫生、自动驾驶等大型系统和实时系统可谓极其重要。例如1978年哈特福德体育馆倒塌,1996 年阿利亚纳五号火箭发射失败,2000 年Therac-25 医疗放射治疗装置让患者暴露在过量辐射中的事故,2018 年10 月印尼狮航和2019 年3 月埃塞俄比亚航空公司的两起波音737MAX飞机导致的空难都与软件缺陷有关。运用今天的软件工程技术能否生产出高质量的软件,能否具有高可靠性?答案是肯定的!而且这种技术早在上世纪80 年代已经被开发出来,但由于对软件开发人员技术门槛的要求过高,经济方面投入较大,以及软件产业界普遍的共识——软件通过维护升级可以不断完善,没必要第一次就生产出完美无缺的软件的理念等因素限制了这种技术的推广普及。这种技术被称为形式化方法,净室软件工程(Cleanroom Software Engineering)便是形式化方法的一种变种,其可操作性比纯形式化方法更强。净室技术通过在IBM、爱立信、美国国家航空航天局(NASA)、美国国防部(DoD)及大量其他机构的成功实践证明了其自身的强大。1996 年DoD 软件数据与分析中心在其所作的软件方法比较分析中,报告净室具有真实的价值和质量优势[1]。
美国计算机科学家、数学家、IBM 院士米尔斯(Harlan D. Mills)博士在IBM 联邦系统部工作期间创立了净室软件工程,一种基于数学理论的以经济的方式生产高可靠性软件的工程技术。这种技术从萌芽到成熟经历了近20 年的时间,米尔斯在其形成的过程中做了大量的工作,从而被称为净室软件工程创始人。本文将通过展示米尔斯在净室软件工程方面的具体工作,讨论其贡献,同时梳理净室作为一种成熟方法的形成历史过程。
米尔斯(1919-1996)是净室软件工程创始人,首席程序员团队方法的创始人,软件工程思想领袖。他是IBM Fellow(IBM 院士),IBM 联邦系统部门的软件工程和技术主管和IBM 公司技术委员会的成员。他是1975 年召开的第一届软件工程全国(美国)大会的主席。1975 年到1981 年,他担任IEEE 软件工程学报的编辑;从1980 年到1983 年,他担任IEEE 计算机学会的主管;1981 年,他是IEEE Fall CompCon 的主席。1985 年,他获得了DPMA 杰出信息科学奖,1987 年获得了J. D. Warnier 奖。在米尔斯去世之后,为了纪念他,在1999 年,IEEE 计算机学会设立了Harlan D.Mills奖,主要奖励在软件工程理论与实践领域做出贡献的学者。
米尔斯于1952 年在爱荷华州立大学获得数学博士学位。从1954 年到1957 年,他在通用电气的管理咨询服务公司工作,1958 年创立了公司Mathematica,后来由Martin Marietta 收购。1964 年至1987 年,米尔斯在IBM 公司联邦系统部工作。于1996 年去世时,米尔斯博士是佛罗里达理工学院(Florida Institute of Technology)的计算机科学教授,也是软件工程技术公司(Vero Beach,FL and Knoxville,TN)的创始人,图1 为米尔斯博士。
图1 米尔斯(Harlan D.Mills)
净室软件工程是一种应用数学和统计学理论以经济的方式生产高质量软件的工程技术。“净室”一词来源于半导体工业的生产硬件的净室[1]。半导体工业的净室在生产产品的过程中,将预防缺陷产生作为最重要的事情,而不是之后排除故障。使用“净室”命名,显示了净室软件工程也将缺陷预防放在绝对重要的首位,其目标是开发零缺陷的软件产品。净室具有坚实的理论基础,并由①统计质量控制下的增量开发技术;②基于函数的规格、设计和验证技术(盒式结构方法);③统计测试和软件认证技术等三大关键技术有机整合而成。它以净室小组作为工作基本单元采用多人共同工作的方式生产、测试软件产品。所以,它的工作成果都归集体(净室小组),当然出现问题时,也由集体承担责任。
米尔斯在净室方面最重要的一篇文章是1987 年9份发表在《IEEE Software》上的“净室软件工程”。该文章中首次提出“净室软件工程”的概念,并介绍了采用净室软件工程方法开发的三个成功案例,统计式质量控制在管理方面的好处,软件统计属性从何而来,如何衡量一个软件的质量,功能验证的优点和代替排错的原因、统计测试、增量开发、软件认证等。该文中未提及盒式结构方法,但提到了精确的规格说明书,而盒式结构中的黑盒正是精确描述软件需求规格的工具。从米尔斯在1990 年发表的文章“统计质量控制下的工程软件”中可以探知盒式结构方法已被纳入净室[2]。
1968 年10 月,NATO(北大西洋公约组织)在当时的联邦德国召开了“软件工程”国际学术会议。会议正式提出了“软件危机”和“软件工程”,并说明通过“软件工程”解决当时的“软件危机”。会议的发起人慕尼黑工业大学的计算机科学家Fritz Bauer 教授认为,软件工程是建立和使用一套合理的工程原则,以便经济地获得可靠的、可以在实际机器上高效运行的软件[3]。其中,“工程原则”的意思包含了软件工程除了要有方法、工具等技术措施以外,还应该有必要的组织管理措施。会议上还提出了要建立软件开发和生产的数学基础。之后在1969 年的软件工程会议上,将软件的正确性问题和概念作为主题之一进行了讨论。这促使软件的数学基础和软件正确性问题成为软件工程基础的重要组成部分[4]。这种背景也是净室基于数学理论,重视组织管理,并且将正确性证明作为重要方法的主要原因。
净室软件工程的理论基础来自于数学,具体为其软件开发方法基于数学的函数理论,其测试方法基于统计学。米尔斯意识到一个特定的程序像函数一样有定义域到值域的映射,从而将程序看作是一个数学函数规则,致使函数理论和应用成为软件开发和验证的基础[5]。也正是基于该理论,后续才有了基于函数理论的程序正确性验证技术、增量开发技术和盒式结构方法。米尔斯的“大型系统中的自顶向下编程”(1970 年发表)、“结构化程序设计的数学基础”(1972 年发表)、“计算机程序设计新数学”(1975 年发表)和“如何正确编写和认识程序”(1975 年发表)等文章奠定了净室方法的函数理论基础。米尔斯与林格(R. C. Linger)、维特(B.I.Witt)三人合著的《结构化编程:理论与实践》是上世纪70、80 年代最有影响力的结构化编程方面的著作之一,书中还提出了后来净室方法中采用的一项重要技术——基于函数理论的程序正确性验证技术(功能验证)。
米尔斯的另一个观点——软件测试只是从无限的可能的软件使用情况中抽取的样本,奠定了净室统计测试方法和质量认证的基础。他于1970 年发表的论文“关于计算机程序的统计验证”将统计推断技术引入到程序正确性问题中[6],从而将统计学应用于软件认证。此外,他在1970 年提出了饱受争议的“首席程序员团队”技术,虽然饱受争议,但首席程序员团队技术为软件团队成员之间的沟通渠道问题提供了原创解决方案[7],而且早在1971 年中期,由IBM 交付《纽约时报》使用的在线存储和检索系统项目中成功运用了该技术[8]。净室小组工作法可以说是在某种程度上继承了首席程序员团队技术。
一种成熟的理论基础对于工程方法(技术)极其重要,它起到的指引作用是其他任何事物无法代替的。米尔斯对软件数学理论基础的解释——“程序是一个数学函数规则”对计算机科学产生了重要影响,使得大量数学函数的理论和应用成为软件开发和验证的基础。也正是因为有了坚实的数学理论基础,才会有后来的基于函数理论的程序正确性验证技术、增量开发技术和盒式结构方法。由于净室方法将统计学作为测试的理论基础,其统计抽样测试技术才得以稳固的发展。
增量开发的思想是先开发出一个能够运行,只有基本架构的增量(软件),这个增量也许只有界面,没有实现其他任何功能。之后,逐步添加功能,生成第二个、第三个、……、第N 个增量,最终得到完整功能的软件。统计质量控制之下的增量开发技术实际上是将制造业中的统计质量控制引入到软件开发过程中,预防和控制软件开发过程中的每一项任务的质量,从而生产出高质量的软件。
该技术早在1970 年已经有了初步方案。米尔斯在其著名文章“大型系统中的自顶向下编程”中,通过“中间系统序列”和“骨架程序”等概念,首次展示了增量开发的思想。这种思想的产生有三个前提,即①米尔斯将程序看作是数学函数;②结构化编程;③程序正确性证明。将程序看作一个数学函数后,可以通过不断将函数逐步推导扩展成多个更简单的函数和连接词,直至可以使用程序语句表示为止。在1968 年和1969 年,荷兰计算机科学家迪杰斯特拉(E.W.Dijkstra)发表了多篇有影响力的结构化编程的文章,提倡去除程序里的GOTO 语句,使用顺序、选择和循环三种结构编写程序。结构化编程的出现,让自顶向下编程成为可能,改变了之前在纸上先做设计,然后自底向上的编程习惯。程序正确性证明技术也在1969 年前后发展了起来,它的发展为函数推导过程的正确性证明提供了理论依据和技术手段。也是1970 年,第一个软件生命周期模型——瀑布模型出现,之后软件产业界迅速接受了该模型。但由于意识到瀑布模型的线性开发的缺点,米尔斯继续发展了增量开发技术(增量开发模型)。直至上世纪80 年代,米尔斯将统计质量控制技术引入软件开发,与增量开发技术结合后形成了统计质量控制下的增量开发技术。
净室的基于函数的规格、设计和验证技术也被称为盒式结构方法。盒式结构(box structures)方法用于描述软件规格,并通过逐步求精的扩展方法实现软件规格。盒式结构包括黑盒、状态盒和明盒等三类盒子。黑盒描述用户的外部行为,状态盒是黑盒的扩展,明盒是状态盒的扩展,明盒基本上是一段伪代码算法或是程序。1986 年,米尔斯和林格、赫夫纳(A. R.Hevner)合著的《信息系统分析与设计原理》(Principles of Information Systems Analysis and Design)提出了一种简化分析和设计的数学方法——盒式结构方法。开发该方法的原因是由于当时系统分析使用的数据流图工具在描绘复杂的商业业务时线条显得纷乱复杂,不仅不利于分析,且容易使人犯错。而盒式结构里的黑盒可以很好的解决该问题,简化系统分析工作。系统设计工作是在不断的将黑盒扩展为状态盒,将状态盒扩展为明盒的过程中实现的,且在每一步扩展过程中都会有严格的正确性验证,确保最终软件产品满足用户当初的所有需求。
净室的统计测试技术理论依据来自统计学的抽样理论。净室测试与传统测试方法不同,在传统测试方法中,测试人员一开始就假定软件中肯定存在错误,在这种心理前提下尽可能找出设计和编码的错误,且错误越多越好,而且如果找到并修复了足够多的错误,则认为软件质量会提高。净室软件测试(认证)是为了认证软件的可靠性,而不是传统意义上的测试软件,即不是为了找出错误。在净室测试中,测试人员和开发人员不是敌对的关系,这一点也与传统测试不同。
早在1970 年,米尔斯就注意到了可以将统计学中的概念引入到软件编程。1983 年,米尔斯与戴尔(M.Dyer)开发了净室的统计测试与软件认证技术。在当时,传统的测试方法是程序员只使用有代表性的用户操作软件的手法和输入测试软件。这种测试方法只能保证软件在测试用例上是正确的,但不能保证其他情况下也是正确的。米尔斯在其1987 年发表的论文“净室软件工程”中曾解释软件本身并没有统计属性,但是用户使用(操作)软件情况是可以被统计的,所以软件的统计属性来自于用户对软件的可能使用情况。根据用户的使用情况分布概率,随机生成测试用例,之后通过测试用例测试软件的正确性。
净室的三大关键技术可以合起来使用,也可以独立分开使用。当合起来作为净室技术使用时,其效果已经在多个大型项目中得以展示,并被包括NASA 和DoD 等对软件要求极高的多家机构所认同。净室的增量开发技术通过智力控制解决软件复杂性问题方面给出了一种解决方案。这是因为可以让开发者在某一时间段将精力集中在某一个增量上,而不用时刻考虑更多的问题。增量技术通过快速交付增量,得到用户反馈,改进需求和生产过程,再交付增量,……的循环过程方式,为软件生产方和用户方的积极沟通提供了方案,避免了最终软件产品并非用户所需的严重问题。盒式结构方法为人们提供了一种简化了的系统分析和设计的数学方法。这种方法不仅可以用于结构化分析和设计,还可以用于面向对象分析和设计。它解决了系统分析时使用数据流图工具在描述复杂系统业务时的线条混乱的问题,为系统分析和设计提供了一种独特的工具。统计测试和软件认证技术在人员关系层面解决了开发人员和测试人员的敌对关系,将其关系从对立转为合作。它在技术层面通过抽样测试用例推进了测试技术的发展,将当时只用几种典型用例测试软件的方式往前推进了一大步。
米尔斯博士是净室软件工程创始人。1970 年至1990 年的20 年间,他奠定了净室的理论基础与IBM同事一起开发并实践了三大关键技术,让净室从一粒种子长成一棵参天大树。米尔斯的成就除了其自身的天分和知识储备以外,也与当时软件工程的提出,各种软件技术被开发应用的大环境有关,还与当时美国政府重视软件工程的发展,米尔斯所在的IBM 联邦系统部能够承接美国政府和军方的大型项目,从而有机会研究和实践高可靠性软件理论和技术有关。当然,也与米尔斯一同开发实践净室的团队成员有很大关系。
由于经济成本较高,对开发人员的技术门槛和用户代表的信息素养要求较高,适合于开发大型高可靠性软件项目等因素,净室在我国并没有得到足够的重视和发展。但随着不断的有大型软件项目的启动,对软件高可靠性的强烈要求,净室软件工程必定在我国会得到更多的关注。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!