acm-header
登录

ACM通信

资讯科技行业

戴夫·帕纳斯访谈


大卫Lorge Parnas将

有效的软件设计

David Lorge Parnas因其对如何最好地教授软件工程的见解而闻名。自1969年以来,Parnas一直在研究软件设计和开发,并因其贡献获得了超过25个奖项。2007年,他分享了IEEE计算机学会的60项排名th计算机先驱莫里斯·威尔克斯颁发的周年奖。他获得了卡耐基梅隆大学电气工程学士学位、硕士学位和博士学位。他发表了285多篇论文,其中许多被认为是经典著作。他设计了CEAB(加拿大工程认证委员会)认可的麦克马斯特大学软件工程项目,他现在是那里的荣誉教授。

他和七名同事明确提出了一种基于可操作能力而非概念的方法。通信专栏作家彼得·j·丹宁就这些观点与帕纳斯进行了对话。

彼得•丹宁:您长期以来一直对生产可靠、安全软件的方法感兴趣。1971年,您首次阐明了信息隐藏的原理。23.4为什么这一点仍然很重要?

大卫LORGE PARNAS将信息隐藏的概念是基于这样一种观察,即程序外部的变化(如其他程序的修订、硬件更改或需求更改)只会在显示程序正确性时必须使用的信息因更改而失效时才会影响该程序的正确性。因此,应该对软件进行组织,使对可能发生变化的信息的依赖限制在一个小范围内,明确指出,一组程序。应用这一原则可以使程序更容易理解、更容易维护,并且不太可能包含错误。

正如我在早期论文中所表达的,信息隐藏原则适用于任何编程语言中的所有程序。它可以作为软件开发人员和维护人员的指导方针。第一篇介绍了三篇论文的基本思想;第二篇论文用一个简单的系统说明了这一原理,第三篇论文用更复杂的系统说明了这一原理的惊人含义;这篇论文提出了一种软件结构,它与通常在这类系统中发现的软件结构非常不同。它还说明了如何记录该结构。

1968年和1969年,两次著名的北约会议讨论了一个新的领域——软件工程,以帮助我们实现可靠和值得信赖的软件系统。为什么?

参加这两次会议的大多数人都受过科学或数学方面的教育,但都投身于为他人开发程序(软件)。他们意识到,他们所受的教育教会了他们如何增加世界的知识,而不是如何制造产品。注意到传统的工程教育教授设计和构建可靠产品的方法,他们提出,软件开发应该被视为一门工程学科,而不是科学的一个分支。

各大学对这些会议有何反应?

会议结束后,软件工程被视为计算机科学中研究如何生产安全可靠产品的领域。有些包括项目管理在内的领域。

最初的反应是在计算机科学课程中增加一门名为“软件工程”的单学期课程。不清楚在这样的课程中应该教什么。当我被安排教授那门课程时,我问自己:“它应该包括什么内容?”唯一的回答是:“戴夫,你是工程师,你自己想办法。”

后来,随着软件变得越来越重要,计算机科学部门定义了软件工程“轨迹”,包括额外的必修课,如编译器、数据库系统和软件测试方法。重要的工程方面,如接口设计和容错很少被包括在内。

在许多场合,你对这些节目写了尖锐的批评。一个你批评的依据是什么?他们产生结果了吗?

我的第一个批判6抱怨了很多方面的“轨道”。我指出他们教授的是老师感兴趣的主题,而不是学生作为专业软件开发人员需要知道的内容。

我的第二个主要评论7是在我所在的麦克马斯特大学(McMaster)成立了一个新院系并开设了一个专门为工程学院而不是理学院教授的课程之后写的。它与以前的计算机科学专业没有共同的课程。学生们一年级的课程和所有其他工程专业的学生一样;只有在共同的第一年结束时,他们才能选择软件工程作为他们的课程。

这两篇论文的观点是,软件工程教育应该被视为专业教育(像建筑、医学、法律或工程),而不是建立在像物理或数学这样的“文科”模型之上。

我们的课程旨在通过加拿大工程教育委员会的认证。在我们第一批学生毕业的那一年,另外两所加拿大大学也获得了认证并毕业了学生。

两篇论文都引发了大量讨论。1998年论文中描述的方案7深受学生及雇主欢迎。与计算机科学专业的毕业生不同,我们的法学专业毕业生在通过通常的法律和道德考试后,可以获得专业工程师的执照。

2017年,你主持了一个委员会,写了一份关于软件开发项目的报告。1最终的论文采用基于能力的方法来指定软件开发中专业程序的目标。这种方法与更常见的方法有何不同?

以前规定CS和SE课程内容的努力是基于“知识体系”的概念。他们规定了学生毕业时应该知道什么。

注意到这些都是专业课程,我们选择明确说明毕业生毕业时应该能做什么。我们的目标是允许各个院校选择将教授的知识和方法,前提是它们给予毕业生所需的能力。读过2017年论文的人会发现,这一方法与早期的课程规范方法截然不同。它强调软件开发能力,而不是课程的名称和内容。

2017年的论文强调了CS程序和专业软件开发程序之间的区别,你的方法基于Brian Randell(1968年和1969年会议报告的作者)和Fred Brooks(非常受欢迎的书的作者)非常古老的观察神话中的男人月。他们说什么吸引了你?

Randell将软件工程描述为“多版本程序的多人开发”。Brooks说,除了编写代码,软件工程还需要将单独编写的程序结合起来,并将它们“产品化”,也就是说,使它们适合于没有编写过它们的人使用。在传统的编程课程中,这些话题通常很少或根本不被重视。

我们能够确定一组完成Randell和Brooks所确定的将软件开发与基础编程区分开来的事情所需的能力。随附的表格列出了这些功能,但读者真的应该阅读论文来了解其含义。他们会找到详细的、具体的理由、定义和指导方针。

ut1.jpg
表格的功能列表。

你们用“软件系统工程”来表示所讨论的程序的类别。这类课程包括专业课程和一般软件工程课程。您列出了应授予软件系统工程师的12种能力。它们都是工程能力。这应该如何使用呢?

毕业生能力列表旨在作为那些教授软件开发的检查清单。他们应该问:“我们的毕业生有这些能力吗?”答案应该是:“是的,所有的。”如果不是,院校应该重新设计它们的课程,以便它们能回答“是!”

你是否主张把理科教育和计算机教育分开会更好?

这两者就像物理和机械工程一样截然不同。两个项目所教授的物理课程将重叠,但工程师将学习如何使用这种材料制造可靠的产品,而物理专业的学生将学习如何增加构成科学的知识体系。

专业项目往往比科学项目受到更严格的约束,因为专业人员必须知道很多事情才能获得许可证并被允许进行实践。理科生通常可以做出更多的选择,成为一名专家。

在一个系同时开设这两种课程是很困难的(尽管不是不可能)。

你曾说过,专业的软件工程课程会吸引那些想要学习如何构建供他人使用的东西的学生。计算机科学系是否与大多数学生格格不入?

我访问过的计算机科学系的学生种类繁多。一些人想成为开发人员,而另一些人想成为科学家。许多院系提供的折衷方案对这两类人都不理想。这就是为什么我更喜欢两个截然不同的课程,由不同(尽管不一定互不相干)的教员教授。

1985年,您对美国的战略防御计划(SDI)采取了强硬立场,5承诺建立自动弹道导弹防御系统(BMD),允许美国放弃其洲际弹道导弹(ICBMs)。你坚持认为该软件不够可信,美国无法消除其导弹。我们今天有BMD系统,你错了吗?

一点也不!SDI的支持者预测,该导弹将在6年内准备就绪,并有能力拦截和摧毁复杂的导弹,包括通过采取规避措施击败BMD系统的新设计。里根总统所描述的系统是不可能在现实条件下进行测试的。如今(33年后)使用的BMD系统甚至在面对不复杂的火箭时也不可靠。没有拆除洲际弹道导弹系统,因为弹道导弹系统不可信。


由于这些都是专业课程,我们选择具体说明毕业生在毕业时应能从事什么工作。


你认为在20世纪80年代的BMD主张和今天的人工智能主张之间有关系吗?

这两个领域的特点是夸张的说法、过于乐观的预测和缺乏精确的定义。两者都会产生不可信任的系统。9

2007年,你发表了一篇短文8该报告批评了通过发表论文数量来评价研究人员的做法。是什么促使你发表了这样一篇论文?

我曾在许多评估教员晋升的委员会任职,也在许多其他评估研究提案的委员会任职。我常常失望地发现,我的大多数委员都没有读过申请人的任何一篇论文。他们只是统计了论文数量,(有时)估计了期刊和会议的选择性。有两次,当我开始讨论应聘者论文(我已经看过了)中的问题时,同事们都在抱怨。他们说,这些论文的审稿人已经读过了,也通过了,所以我没有权利评价它们。实际上,他们说我在阅读论文和评价他们的贡献方面“出格了”。最后一根稻草是,有人发布了一个计算机程序,通过计算论文和计算分数来完成委员会的工作。这样简单的程序往往会得到与委员会相同的结果,这表明委员会成员没有做好他们的工作。例如,一篇论文的审稿人无法检测出一个作者使用不同的标题和措辞多次发表了相同的结果。我们在评估委员会中有科学家,正是因为他们有阅读论文和评估作者贡献的专业知识。 If they don't do that, we don't need them. Sometimes a single paper is a far more important contribution than a dozen shallow or repetitive papers. Simply counting papers is not enough.

我观察到,人们在接受任命或拨款评估时,会学会如何“玩游戏”。如果他们看到评估他们的人不会读论文,只会数论文,他们就知道如何在不实际提高贡献的情况下提高自己的分数。我2007年的论文讨论了一些研究人员用来让自己看起来比实际更好的技术。

回到顶部

参考文献

1.Landwehr, C., Ludewig, J., Meersman, R., Parnas, d.l., Shoval, P., Wand, Y., Weiss, D.和Weyuker, E.软件系统工程计划:一种能力方法。系统与软件科学j,(2017), 354364。

2.设计方法的信息分布方面。在IFIP大会会议记录1971年,小册子TA-3, 1971, 2630。

3.关于用于将系统分解为模块的标准。Commun。ACM 15(1972年12月),10531058。

4.帕纳斯,d.l.,克莱门茨,p.c.和魏斯,D.M.复杂系统的模块化结构。IEEE软件工程汇刊SE-11(1985年3月),259266。

5.战略防御系统的软件方面。Commun。ACM 28(1985年12月),13261335。

6.为计算机专业人员提供的教育。IEEE计算机23, 1(1990年1月),1722。

7.软件工程程序不是计算机科学程序。软件工程年鉴6(1998), 1937。转载的IEEE软件(11月/ 12月。1999), 1930。

8.帕纳斯,D.L.,别玩数字游戏了。Commun。ACM 50, 11(2007年11月),1921。

9.人工智能的真正风险。Commun。ACM 60, 10(2017年10月),2731。

回到顶部

作者

Peter j .丹宁pjd@nps.edu)是计算机科学特聘教授,也是位于加州蒙特利的海军研究生院Cebrowski信息创新研究所所长ACM无处不在他是ACM的前任总裁。作者在此表达的观点不一定代表其雇主或美国联邦政府的观点。

回到顶部

脚注

一个。“program”在这次采访的语境中用来指大学里的一门课程,以区别于软件程序。


版权归作者所有。
向所有者/作者请求(重新)发布权限

数字图书馆是由计算机协会出版的。版权所有©2018 ACM, Inc.


评论


鲁道夫Olah

如果引用链接到ACM数字图书馆的DOI,那就太棒了。试图找出哪些论文在这里被引用,以便我可以阅读它们是有点乏味的(值得但乏味)。


显示1评论

登录为完全访问
»忘记密码? »创建ACM Web帐号
文章内容:
Baidu
map