在航空网站的这问题中,F-35开发时间长的原因之一被引用为软件。800万行代码。从合同到在役的发展花了20年的时间,其中过去的10年主要是从2006年第一架生产飞机交付以来的系统。
然而,在我看来,军用软件就像消费者软件,因为它是在现有功能的基础上逐步构建的,开发可以划分给许多开发人员。这是否有任何限制,是否存在软件项目的音障?我不知道800万是否是一个过多的线,但这个大小本身是不是一个理由,以证明10年的开发时间?
有什么方法可以限制大型软件项目的开发时间?有亨利福特的软件吗?
发布于 2017-06-20 12:27:50
软件工程是一个年轻的学科,还在研究如何构建复杂的项目,而8 MLOC是一个非常庞大和复杂的项目。
软件工程还很年轻。很年轻。就像,比其他工程学科年轻两个数量级。软件工程始于1968年北约第一次软件工程会议,而土木工程、结构工程和机械工程则或多或少是随着大金字塔…的建立而开始的。这是60年和4600年的经验。
或者,直截了当地说:我们还没有搞清楚。
有几个因素使软件工程不同于其他工程学科,最重要的是软件可以免费复制和重用,软件可以抽象、参数化和推广。这意味着我们通常只建造以前没有人建造过的东西,因为如果有人以前建造过,我们可以免费复制这个解决方案。这与结构工程不同。你不能只是敲响你的手指,克隆一座桥,但你可以用软件做到这一点。
因此,其他工程学科有几十年、几个世纪、甚至几千年的经验,一次又一次地完善建筑(或多或少)相同的东西,而SE每一次都只有6年的经验构建全新的东西。
哦,别搞错了:如果你认为将F-35's软件系统与古代世界的奇迹之一进行比较,对古埃及人做出的巨大努力是不公平的,我会认为,构建像F-35's这样复杂先进的软件系统及其航空电子设备、传感器融合和虚拟现实环境(仅举几个例子)与建造大金字塔类似的复杂性是相当的。
F-35实际上不是一架飞机而是三架。F-35C有较大的机翼,因此它的空气动力学是不同的。F-35B实际上是一架完全不同的飞机,一架用机翼产生升力,一架用风扇和发动机喷嘴产生升力。虽然与开发和维护三架不同的飞机相比,这个项目节省了成本,降低了复杂性(至少有人这样说),但与假设没有选择“联合”概念的每一架飞机相比,它显然增加了复杂性。
此外,这是一个政府项目,你有许多潜在的利益冲突影响项目,实际上与项目的内在功能或甚至非功能需求没有任何关系。
8 MLOC是一个大型项目。想想Linux内核,它的总大小大致相同(我认为,目前是~10+ MLOC )。但是,大约90%的代码基是设备驱动程序(例如,对于几十个显卡、几十个SCSI控制器、晦涩的工业输入和输出设备,您从未听说过的…)。因此,实际的Linux内核只有大约一个MLOC。其中,90%是特定于体系结构的支持代码(用于20种系统架构,包括至少3种PC体系结构(x86 (32位)、amd64 (64位)和x32 (长模式下的amd64,但有32位指针以节省空间)到多个不同的ARM、PowerPC、MIPS体系结构到您从未听说过的CPU)。所以,真正的操作系统只有大约100 KLOC。现在,操作系统通常被认为是一个复杂的系统,而Linux被认为是一个大型的ish操作系统。那么,F-35's软件系统大概是这个系统的100倍大!
有什么方法可以限制大型软件项目的开发时间?
这就是软件工程的本质。
发布于 2017-06-20 18:27:39
对于这个特殊的例子,需要考虑的一点是,它不仅仅是代码库的大小或代码的复杂性。这里的一个重要因素是所涉及的风险。考虑20米横梁的宽度,平衡梁的设置不到一米以上的地面。大多数能走路的人都会认为穿过横梁是相当容易的。现在考虑同样的梁放置在20米以上的地面(在一个受控的环境,即没有风)。现在,大多数人会认为这是一个更困难的任务,并会采取更多的注意通过它。
在这两种情况下,走过横梁的行为并没有什么不同,但是,要求一个人在另一个横梁上行走显然是不一样的。不同之处在于错误的后果。你在这里选择的案例风险很大。1.据我所知,喷气式喷气式飞机是不稳定的,需要电脑系统来维持它的飞行。2.雷达、导航、隐身和瞄准系统是使其适合作战的关键,例如,如果计算机系统不能完美地发挥作用,它很容易被敌人摧毁。
大多数软件没有这样的成本。我们通常穿过低矮到地面的横梁。如果我们掉下来,它的影响是有限的。这个项目是一个人可能会死,战争可能会失去,如果它是愚蠢的。严格程度和审查程度几乎是最大的。
总的来说,我认为简单的答案是,今天的软件开发速度确实比过去快得多。我没有数据,但是我已经有足够长的时间注意到变化了。造成这种情况的原因有很多,包括但不限于:更好的编程语言、更好的开发过程、更好的标准和更好的项目管理。其中一个主要因素是行业放弃了不适合软件开发的管理模式。
发布于 2017-06-21 07:25:58
F-35's软件的尺寸不是很大,当与其他系统相比.
开发过程会产生巨大的变化。
简单地从瀑布和feature+integration分支切换到基于主干的开发 (有大量的测试自动化和良好的CI系统支持)可以显著减少大型/复杂软件开发项目的开发时间。
这种在电信设备软件(比F-35‘S大几倍)的转变缩短了几乎一半的开发时间。同时减少了总数的大约30% -节省了大量的资源,以前浪费在集成地狱和试图稳定这些分支,这并不是真正的什么,在最后。
https://softwareengineering.stackexchange.com/questions/351242
复制相似问题