为什么大型机应用程序没有错误?

时间:2009-10-01 13:31:29

标签: mainframe

老铁似乎是坚如磐石的软件。这是为什么?是因为软件是如此成熟,所有的错误都已经解决了?或者是因为人们已经习惯了他们甚至不认识他们并在他们周围工作的错误?从第一天起软件规格是否完美,一旦软件编写完成,一切正常吗?我试图了解我们是如何从大型机计算日来的,现在每个人都认为只是觉得TDD现在已经成为现实。

11 个答案:

答案 0 :(得分:28)

为什么地球上你认为他们没有虫子?

IBM拥有庞大的支持基础架构,用于错误报告和解决(PMR,APAR和PTF),这些基础设施被大量使用。

许多年未被触及的大型机软件肯定会被很好地理解(至少在其特性方面)并且很可能已经修复或解决了许多错误。现在开发的所有新东西实际上都计划从GA(一般可用性)到至少GA + 36个月的一定数量的错误和补丁。事实上,IBM的前任老板过去常常被迫提供计划错误的数据:“我们不是计划有任何错误”。

大型机支持RAS原则(可靠性,可用性和可维护性),超出大多数桌面硬件和软件所能实现的目标 - 当然这只是我的看法,但我是对的: - )

那是因为IBM非常了解修复错误的成本在开发周期中增加了很多 - 在单元测试中修复错误要比在生产环境中修复错误要便宜很多钱的声誉。

仅发布无错误的软件需要花费大量的精力和成本,但即便他们也不能一直使用它。

答案 1 :(得分:12)

主框架软件中没有错误,只有功能。

答案 2 :(得分:6)

我曾经在大型机应用上工作。早期的应用程序没有很多错误,因为它们没有做太多。我们写了数百条(如果不是数千条)FORTRAN来做你现在用Excel中的几个公式做的事情。但是,当我们通过将一个值放入卡1的第12-26列,以及卡2的第1-5列中的另一个值等来获取其输入的程序时,从那些从交互式ISPF屏幕或光源获取输入的程序在Calcomp 1012绘图仪或Tektronix 4107终端上输入笔和输出,错误计数上升。

答案 3 :(得分:5)

大型机软件上存在大量错误,由于相对较小的开发人员受到影响,因此它们并未公布。只要问一下那些进行大型机开发的人,他们每天都会看到多少ABENDS!

答案 4 :(得分:2)

我学会了使用调试器并分析大型铁主机上的核心转储。相信我,他们只是因为错误而来。你完全错了。

然而,大型机架构设计用于在高压力下稳定(与非大型机系统相比),所以也许你可以说它们在这方面更好。代码明智吗? Nah bug还在那里......

答案 5 :(得分:2)

我使用大型机应用程序软件(而不是操作系统)的经验已经过时了,但我的回忆是,大多数应用程序都是批处理应用程序,逻辑上非常简单:

a)读取输入文件
b)处理每条记录(如果你感觉很大胆,请更新数据库)
c)写一个输出文件

无需担心用户输入事件,一组合格的操作员在运行时监控作业,与外部系统的交互很少等等。

现在业务逻辑可能很复杂(特别是如果它是用COBOL 68编写的而且数据库不是关系型的),但如果你需要专注于这一点,那么制作可靠的软件会更容易。

答案 6 :(得分:1)

我自己从未使用大型机软件,但我父亲在1970年代是COBOL程序员。

当你在那些日子编写软件时,发现错误并不像编译源代码那样简单,只是查看编译器向你吐出的错误消息或者运行你的程序并查看它出错的地方。打字员必须将程序打入打卡,然后将其读入计算机,这将打印出程序的结果。

我父亲告诉我,有一天,有人带着装满纸盒的小车,把它们放在他正在工作的房间的门旁边。他问“那是什么?!”,那家伙告诉他“那是你节目的输出”。我父亲犯了一个错误,导致程序在一堆纸上打印出大量乱码,可能用完了整棵树。

你很快就从错误中吸取教训......

答案 7 :(得分:0)

哦,他们肯定有错误 - 请参阅thedailywtf.com了解一些更有趣的例子。也就是说,今天看到的大多数“大型机”应用程序都有30年的时间来解决所有问题,因此它们比过去几年创建的大多数应用程序都有一些优势。

答案 8 :(得分:0)

虽然我没有大型机的经验,但我猜这是你提出的第一点:软件已经存在了几十年。大多数剩余的错误都已经解决了。

此外,不要忘记像Y2K这样的惨败。人们偶然发现的所有错误都已经解决了,20年后大多数情况都可能发生。但每隔一段时间,一个新的情况确实设法出现,这使得即使是20岁的软件也会停止工作。

(另一个有趣的例子是我发现的错误,我相信,BSD Unix。它是在大约一年前发现的,它已经存在了20年,没有任何人遇到它。)

答案 9 :(得分:0)

我认为编程只是一个高级领域,只有选择的工程师才能在其中工作。现在编程的世界要大得多,各方面的准入门槛都会降低。

答案 10 :(得分:0)

我认为这是一些事情。首先,修复错误重新编译的循环通常在大型机中更加昂贵。这意味着程序员不能只是泄漏代码并“看看它是否有效”。通过进行头脑编译和运行时模拟,您可以发现更多错误,而不是让编译器捕获它们。

其次,每个人和他们的兄弟都不是“程序员”。他们通常是训练有素的专家。现在的节目来自坐在地下室的高中文凭。没有错!!!但它确实有更多的错误,工程师已经专业地做了20年。

第三,大型机程序与邻居的交互往往较少。例如,在Windows中,错误的应用程序可能会使其旁边的应用程序或整个系统崩溃。在大型机上,它们通常具有分段内存,因此它本身就可以崩溃。鉴于您的典型桌面系统上运行的各种各样的边缘可靠来源,它往往会使任何程序在某种程度上变得不稳定。

成熟绝对是一个因素。 20年前编写的COBOL信用卡处理程序,经过不断改进以消除错误,与任何程序的0.1版本相比,不太可能出现问题。当然,存在这样一个问题:这些旧的重写无限次程序通常会导致几乎无法维护的意大利面条代码。

与任何事情一样,它主要取决于程序员及其方法。他们做单元测试吗?他们是否记录并编写干净的代码?他们只是将代码丢弃到编译器中以查看是否存在任何错误(希望编译器可以捕获所有错误)?