11

似乎老铁是坚如磐石的软件。这是为什么?是不是因为软件太成熟了,所有的bug都解决了?还是因为人们已经习惯了这些错误,以至于他们甚至不认识它们并解决它们?软件规格是否从第一天开始就完美,一旦软件编写完成,一切都正常了吗?我试图了解我们是如何从大型机计算时代走过来的,现在每个人都认为这只是为了感觉 TDD 现在是要走的路。

4

11 回答 11

29

为什么你认为他们没有错误?

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

多年未接触的大型机软件肯定会被很好地理解(至少就其特性而言),并且可能已经修复或解决了许多错误。现在正在开发的所有新东西实际上都计划了从 GA(通用可用性)到至少 GA + 36 个月的一定数量的错误和补丁。事实上,我在 IBM 的一位前任老板曾经对被迫提供计划中的 bug 的数据而犹豫不决:“我们不打算有任何 bug”。

大型机支持的 ​​RAS 原则(可靠性、可用性和可维护性)超出了大多数桌面硬件和软件所追求的——当然这只是我的看法,但我是对的 :-)

这是因为 IBM 非常清楚,随着开发周期的推进,修复 bug 的成本会大大增加 - 在单元测试中修复 bug 比在生产中修复 bug 便宜得多,无论是在金钱方面声誉。

仅仅发布没有错误的软件需要花费大量的精力和成本,但即使他们也不是一直都做对了。

于 2009-10-01T13:34:47.827 回答
12

主机软件没有错误,只有功能。

于 2009-10-01T13:35:24.530 回答
6

大型机软件存在大量错误,只是由于受影响的开发人员相对较少,它们没有被公开。只需询问从事大型机开发的人他们每天看到多少异常异常!

于 2009-10-01T13:36:48.260 回答
6

我曾经从事大型机应用程序的工作。早期的应用程序没有很多错误,因为它们没有做太多事情。我们编写了数百行甚至数千行 FORTRAN 来完成您现在在 Excel 中使用几个公式所做的事情。但是,当我们从通过在卡片 1 的第 12-26 列中输入一个值、在卡片 2 的第 1-5 列中输入另一个值等方式获得输入的程序转变为从交互式 ISPF 屏幕或灯光中获取输入的程序时Calcomp 1012 绘图仪或 Tektronix 4107 终端上的笔和输出,错误计数上升。

于 2009-10-01T13:41:06.943 回答
3

我在大型机应用软件(相对于操作系统)方面的经验已经过时了,但我记得大多数应用程序都是批处理应用程序,从逻辑上讲,它们非常简单:

a) 读取输入文件
b) 处理每条记录(如果你敢于更新数据库)
c) 编写输出文件

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

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

于 2009-10-01T13:49:24.797 回答
2

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

然而,大型机架构是为在高压力下的稳定性而设计的(与非大型机系统相比),所以也许你可以说它们以这种方式更好。但是代码明智吗?不,错误仍然存​​在...

于 2009-10-01T13:39:46.990 回答
1

我自己从未开发过大型机软件,但我父亲在 1970 年代是一名 COBOL 程序员。

当你在那些日子里编写软件时,发现错误并不像编译你的源代码并查看编译器向你吐出的错误消息或运行你的程序并查看它做错了什么那么简单。打字员必须将程序打成穿孔卡片,然后将其读入计算机,然后打印出程序的结果。

我爸爸告诉我,有一天,有人推着满满一箱纸的手推车过来,把它们放在他工作的房间门口。他问“那是什么?!”,那家伙告诉他“那是你程序的输出”。我父亲犯了一个错误,导致程序在一堆可能用完一棵树的纸上打印出大量乱码。

这样你就能很快从错误中吸取教训……

于 2009-10-01T14:13:55.953 回答
0

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

于 2009-10-01T13:34:47.370 回答
0

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

此外,不要忘记像 Y2K 这样的惨败。人们偶然发现的所有错误都已解决,并且在 20 年内大多数情况可能都会发生。但每隔一段时间,就会出现一种新情况,甚至会导致 20 年前的旧软件停止工作。

(另一个有趣的例子是在 BSD Unix 中发现的错误。它是在大约一年前发现的,并且已经存在了 20 年,没有人遇到过它)。

于 2009-10-01T13:36:03.677 回答
0

我认为编程只是一个只有选定的工程师才能从事的高级领域。现在的编程世界要大得多,各个方面的准入门槛都更低。

于 2009-10-01T13:36:24.483 回答
0

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

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

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

成熟度绝对是一个因素。20 年前编写的 COBOL 信用卡处理程序经过反复改进以消除错误,与任何程序的 0.1 版本相比,出现问题的可能性更小。当然,有一个问题是,这些旧的无限次重写程序通常以意大利面条式的代码结尾,几乎无法维护。

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

于 2009-10-01T13:45:18.607 回答