企业软件是最难编写的软件

人们认为企业软件很容易。 思维过程类似于:“如何像编程图像识别或编写控制核电站的软件那样难以相加数字并生成报告

我了解到的一件事是,如果您听到程序员说
事情,他们从来没有写过一个现实的企业系统。

我曾经在一家航空航天公司工作。 我写了软件来计算
成像雷达卫星的确切天线位置。 这是由
计算从地面反射的数据中的多普勒频移。 卫星正下方的点是相对于卫星而言最慢的移动点,因此我们可以在这些多普勒频移中找到中点。 它比使用遥测数据更准确。 涉及到很多物理,所有这些都必须以一种软件来实现,并且必须能够以最精确的方式得出。 这听起来非常技术性和复杂性。 它背后的理论是,但是一旦所有方程式都开发完了,这并不是一项艰巨的编程任务。

我从事计算机仿真和数学优化的工作。 一世
还建立了计算机语言解析器,书面设备驱动程序,设计的通信协议,操作系统的书面部分,
并分析了音乐的和谐。 将所有与大量相结合
我写过的企业系统,这意味着我已经在
有各种各样的软件。

那么,最困难的软件是什么我会毫不犹豫地说企业软件。

软件程序员之间有很多傲慢自大的态度。 我们都认为自己是最好的,并且在计算机方面可以做任何事情。 以我的经验,没有什么比尝试编写一个企业系统来教程序员谦虚得多了。

但是为什么呢为了研究这个问题,我们可以将软件分为四个
不同种类。 这些是粗略的分类,因为很难固定软件。 任何分类方案总有反例。 但是,对于它的价值:

1.科学与工程软件

这涵盖了所有航空航天程序,例如火星着陆器或
卡西尼号任务。 它涵盖了电源中的所有过程控制系统
电厂和电网。 它包括设计桥梁,建筑物和大坝的所有工程分析。 我也在这里也投入了AI,机器人技术,3D打印和语音处理功能。 同样,所有操作系统都包含网络/通信和加密。

2.打包软件

打包软件最突出的例子是Microsoft Office
套房。 此类别还包括图形艺术程序,例如Adobe
Illustrator和Photoshop。 它包括所有商业软件,例如
QuickBooks,以及在某些商店中购买的许多其他程序
用户的方式。 这里的共同点是该软件位于
受到制造商“认证”的影响,因为他们将自己的品牌放在上面
因此,他们的声誉。

我也在此类别中包括一些所谓的“云解决方案”。 例如,Adobe Creative Suite(现在称为Creative Cloud)在浏览器中不起作用,但需要安装与云对话的程序。 这里的云这个词只是广告。 与其他任何打包软件一样,它是已安装的软件; 它恰好会大量访问云。 无论有没有用户许可,它都倾向于自我更新。

这种软件有时会按月收取费用,但这仅是计费方式,不会影响我们正在考虑的问题。

Microsoft Office 365与Adobe产品类似,它基本上是软件
会自动更新。 两种情况下都可以将数据存储在远程
服务器,但是从概念上讲,这与将其存储在服务器上没有什么不同
办公室中服务器上的本地硬盘驱动器或公司硬盘驱动器。

3.云软件

该软件可在浏览器中使用。 基本上我们在谈论HTTP
导致发送HTML,CSS和JavaScript包的请求
浏览器。 该软件是JavaScript上的组合
浏览器和在服务器上运行的后端代码。

4.企业系统

这是我们此处讨论的重点。 企业系统是软件
整合到组织的运作中
共同处理总帐,财务,应付账款和应收账款。

那么,为什么企业要比其他三个企业难得多 /em>

有三个因素极大地影响了软件开发的难度:

1.控制功能

对于功能,项目团队是否拥有最终决定权
变化他们是否必须咨询外部选区

2.通用或常数测试数据

您如何生成测试数据是否有很多现有的测试数据或
您必须尝试构建它如果要构造多少
您会产生覆盖率吗

3.随着时间的变化

该软件是否必须随时间改变其逻辑,但仍保留
现有信息在开发过程中有变化吗

让我们针对这些功能检查每种类型的软件。

科学与工程软件

当我为雷达成像系统编写软件时,我可以获取一些存档的卫星数据并运行我的软件并查看结果。 我可以
一直这样做,直到它给了我看似正确的答案。 然后我
可以处理图像并检查保真度。

我不必担心卫星数据更改的格式,
或物理定律在变化。 这是完全可重复和可预测的。

测试非常简单。 我可以抓住卫星的任何部分
我想要的数据并对其进行成像。 分析图像表明还有多少
天线定位的准确性提高了图像的分辨率。
这意味着我可以使用大量数据
测试一应俱全。

在技术/工程软件中,变更决定几乎总是由项目团队决定。 例如,假设他们有一个数据输入屏幕。
收集的信息完全由团队决定
确保他们有足够的数据和选项来进行计算。
他们决定如何最好地布置该屏幕,以及应该使用哪些选项
在上面。 他们基于技术以及如何做出这些决定
应该受到控制。 这些是团队内部做出的决策,几乎没有外部来源的投入。

大多数此类软件一次只能用于一种情况。 你跑
对水坝或桥梁的分析,或者您执行一项太空任务。 它是
通常针对一种特定情况。 如果修改,则全新
版本已产生。 新版本可能需要不同格式的数据,但是很少需要能够处理旧数据。

当您将三个因素应用于科学/工程软件时,您会发现:

  • 科学/工程系统非常受项目团队的控制。
  • 测试数据通常很容易获得。
  • 他们不必处理更改,也不必处理以前的数据。

所有这些使科学/工程系统的难度比表面上看起来的要难。

打包软件

在1990年代,我是Paradigm Development Corporation的所有者/合伙人,Paradigm Development Corporation是一家合同软件公司,为微软以及其他大型软件公司做了大量工作。 我们为MS Word和Excel编写了文件格式转换器,并编写了其他实用程序和附加组件。

我们要做的一个项目是删除MS Word代码库中未使用的行。 在大型的高熵代码库(又称大型)中可能很难知道
技术债务)(如果实际使用了代码行)。 由于代码的某些部分可能会修改代码的其他部分,因此需要工程师仔细浏览代码以查看是否曾经使用过特定的代码块。 这些未使用的,废弃的代码块就像一个工厂,其工厂从未使用过并且会积聚灰尘,但是会妨碍正常运行。

MS Word代码库具有很高的熵。 鉴于这一点,这不足为奇
即使在1990年代中期,它也已经存在了至少十年,
不断变化的程序员群体。

您可能会想,“但是,MS Word效果很好。” 也许你用它
你自己 它很稳定,无需大量操作即可完成工作
计算机错误。

那么高熵代码库如何产生稳定的产品呢

这都是关于测试的。 MS拥有庞大的质量检查团队,他们坚持不懈地进行测试。 (好吧,他们曾经有过一定的经验。如今,MS上的测试质量已大大降低。Windows10各个版本中出现的所有问题都可以说明这一点。) 在整个开发周期中,质量检查人员正在测试和报告错误。 随着时间的流逝,这些臭虫会被一点一点地压扁,其余的臭虫被认为是很小的,可以随它们一起生活。

此时,代码已冻结,并完成了最后一轮测试。 如果
任何新事物出现,它都是固定的,软件完全
重新测试。 这是因为每个人都知道任何更改都可能导致
主要问题。 任何更改,无论多么微小,都应引起完整的质量检查重做。 这只是质量检查101。

这并不一定意味着它们已减少了代码的熵。
他们可能已经重写了一些特别糟糕的地方,但是在
通常,他们刚刚在系统稳定性的陡峭斜坡上找到了一个壁架。 通过敲击测试并确保所有成千上万的bug无关紧要或可管理,它们可以产生适合发布的版本。

打包软件有效,已通过认证。 我们信任来自Microsoft,Apple或Intuit等知名制造商的软件。 这是因为我们知道他们已经彻底测试了他们的软件。 虽然这不能保证您不会遇到任何问题,但它们可能很小,通常可以通过变通方法解决。

但是请注意,关于软件包测试的一件事确实使它变得更加容易。

以测试文字处理软件为例。 文件是
文献。 实际的字词并不重要,它们可能是
“ Lorem ipsum。 。 。 。” 测试重要的是软件如何
处理文档的一般文字处理特征,
诸如:很长的单词,占用一个页面以上的段落,
多列,分页和脚注。 实际的文字是
无关紧要的。

因此,测试软件包的难度并不像它那么困难。 微软
维护测试文档和文字处理操作的库。 这些
文档形成了一个非常丰富的测试数据集,可以使新的
针对他们之前记录的每个问题的软件版本,以及
一组特殊生成的极端条件样本。

办公套件是一组可供大量不同的工具使用的工具。
人们来创作内容,无论是演示平台还是
电子表格。 该软件中没有专门针对
特定用户-一切都是常规的,因此可以使用
通用测试集。

像MS Word这样的软件包的功能完全由
项目团队。 当然,营销会介入并介绍客户
需求和愿望,但是如果团队在截止日期之前完成任务,
那些功能请求被削减以获取产品的利益
发货。 这些决定由项目团队做出。 行销可能
反对,但是如果项目团队说他们不能按时完成,他们将赢得争论。 如果程序员说出于技术原因必须以某种方式实现功能,那么他们会赢得
也有争论。

打包软件附带了一组清晰的功能。 这些不
更改直到下一个版本。 这意味着可以完成新功能
在两次发布之间的时间。 数据可能不兼容
释放给另一个人,因此可能需要导入程序才能移动
从旧版本到新版本。 但是没有要求
新功能代码适用于新旧数据。

当您查看应用于软件包的三个因素时:

  • 项目团队决定功能。 营销总是有投入,但团队拥有最终决定权。
  • 由于可以拥有大型测试套件,因此使测试变得更加容易。
  • 新功能不必使用旧数据。

云软件

在这种软件交付模型中,供应商运行的服务器
可通过Internet(“云”)进行访问,并且客户端运行软件,
浏览器或应用程序,在其本地计算机(可能是电话)上
在屏幕上显示信息并允许输入。

显然,此模型的特征之一是该软件可以
持续更新(有人可能将其描述为云软件的
最大优点和最大缺点)。 但是,目前
这样做的方法是开发最低可行产品(MVP)。 这个
表示仍具有最少功能的软件
足够的价值来吸引大量客户。

有关功能的所有决定均由项目团队做出。 这是一个
正在尝试开发所需功能的集中式服务
受到最多客户的欢迎。 这意味着功能由市场营销驱动
原因,当然不是任何外部团体。

如果有错误,请尽快修复,并使用新代码
被放置在网站上。 此后登录的所有客户端都将使用新代码。 由于这种快速的固定和部署周期,因此倾向于将客户用作质量检查部门。 没有哪个客户如此重要,因此,如果给某个特定客户带来不便,那就不是主要问题。 因此,测试很容易,因为没有做太多的事情。 这些服务的早期用户路途艰难,因此所提供的服务必须具有足够的吸引力,以使客户能够忍受(MVP的可行部分),这一点至关重要。

当您查看应用于云软件的三个因素时:

  • 云软件公司拥有完全集中的控制权,他们控制着有关软件的所有决策。
  • 他们会生成一些测试数据以开始使用,但很大程度上他们会使用其客户进行测试。 如果某些功能有问题,它只会影响一部分客户。
  • 需要保持客户端使用的旧数据可操作
    尽管增加了新功能。 最终成为专业
    可能会导致大量问题的困难。 希望是
    当您到达那里时,您将有足够的钱来解决它们。

这可能是第二大困难的软件。 看起来很容易上手
但是当客户群很大时,可能会变得非常困难。
这些应用程序中的一些也是企业应用程序。 然而,
它们是强制客户适应的通用应用程序
在很大程度上,服务具有有限的定制性。 这意味着
尽管是企业,但对功能的控制属于
编程团队,这使事情变得容易得多。

企业系统软件

最后,我们来到企业软件,那里的工作要困难得多。

有一次,我正在为一个大型工会建立一个系统。 那时我仍然相信方法论,并且有一份设计文档。 我想非常清楚地说明系统的功能。 有一个明显列出的功能,是该系统所没有的大字体。 所有管理人员都同意了该设计。 当该系统开始可操作使用时,一位工作人员来找我,说如果没有该功能,她将无法完成自己的工作。 这是该组织的一项基本操作。 参与评审的人都没有意识到该功能是必不可少的。

现在我该怎么办

我本可以采取强硬立场,说那不在
可交付成果,但企业系统是关于拥有一个可为特定组织使用的系统的系统。 我没有真正的选择。 如果系统无法处理工会的操作,则可能会被拒绝。 我必须添加功能。 显然,我对功能没有完全控制。

对变更的控制主要取决于用户群。 企业
系统必须允许人们完成工作并处理信息。 如果一个
缺少该功能可能意味着某人没有他们需要的信息,或者他们将不得不进行一项耗时的活动才能以其他方式(通常使用电子表格)生成该信息。

然后有变化。 如果以某级别引入税收变化
政府,该组织别无选择,只能做出回应。 如果
高级管理层要求进行一些组织变革,系统必须做出响应。 企业中的变化无时无刻不在发生
需要更改系统以支持新的工作方式。

在诸如薪资软件之类的系统中,您必须具有以下测试用例:
涵盖了很大一部分可能性。 想想所有
考虑到工作的所有组合和排列,根据工会合同工作的人可能会产生的可能性:法定假日,一天中超过八个小时,午夜后轮班,午餐权利,预定的薪水假,被拘留者等。

让我们假设有20种可能的薪资事件
对于一个员工。 每个开关都打开或关闭,因此可能性是20位二进制数,这意味着有一百万个二进制数。 当然,并非所有组合都是有效的,某些事件由于具有参数而更加复杂。

如果您不想淹没在组合爆炸中,则必须
在所有这些因素之间保持严格的正交性(独立性)。

但是在实践中,其中某些可能性依赖于其他可能性,因此,有必要建立严格的正式体系结构。 这意味着您需要某种语言来描述操作和执行流程,以便可以容纳更改。 为了使事情变得更加困难,可以通过更改来修改这些因素之间的独立性。 例如,福利可以征税,因此与税收计算无关的事物不再适用。 因此,现在可以安全地独立于事物了,并且可以在代码中进行重大更改。

现在,如果这是一个航空航天项目,您可以生成并测试一百万
具有随机合法参数的基本组合。 你可以花一年的时间
或两个并为随机合法测试组合编写生成器,以及
花了数年时间运行数十亿个案例,直到它完美运行。 为了使事情变得更容易,在航空航天应用中,
与企业应用程序相对,项目之间的关系
不会改变。

这就是航空工程师进行的测试,因为他们有时间和预算。 没有人愿意花费数亿美元将某物发射到太空并使其失败。

但是对于持续不断地构建的企业系统
改变并试图为没有单一组织的组织结构建模
人完全了解,您没有那种时间和预算。

基本上,唯一的方法是以安装为幌子进行测试。

通常,安装的软件包充其量是beta软件的想法。 您所能做的就是一些简单的测试,然后将其放到现实生活中,并在出现问题时进行修复。

在这里说实话。 大多数情况下会发生这种情况。

您可以看到在所有其他软件类型中都指定了目标。 当我编写软件以帮助确定确切的
雷达天线指向的方向很明显是想要的。 我们
想要我们可以从数据中提取的最准确的角度,
因为这样可以提高图像质量。

在整个项目中,这从未改变。

如果您使用的是打包软件,则可以使用以下功能:
实行。 实际上,其中一些功能已被删除,而一些新功能
可以在构建过程中添加。 但这是团队真正的
确定。 由软件制造商决定
包括功能,不包括哪些功能。 它是软件
确定如何实现该功能的制造商
通过市场营销的投入做到这一点,他们认为他们了解什么
用户想要和发展,他们想要以一种
易于实施。

在企业计算中,所需的内容还不清楚。 它位于
操作人员的心智,他们不是系统人员,通常是
直到以后必须执行某些任务时,才记得他们需要的东西。

因此,正在建造的东西还不是很清楚,而建造者没有
控制想要的东西; 权力分散在
组织。

这很难控制。 最重要的是,业务逻辑可以
每月更改。 这可能是某些环境的结果
更改,例如政府法规,或者可能是由于
组织重组,政策变更或合同谈判。

因此,项目团队必须应对不断的变化。 在航空航天编程中不会发生这种情况-光速不会改变,土星不会突然决定以相反的方向绕太阳旋转。

在企业计算中,组织的运营需求决定了
特征。 作为IT人员,您可以抱怨自己喜欢的一切,但是当
用户说“没有该功能我将无法完成工作”,您有点高兴
靠在墙上。

在企业中,与其他类型的软件不同,您正在尝试构建新的
软件,不知道您可能需要实现哪些功能
在项目期间。 如果项目花费的时间超出您的估计(肯定不会发生!),那么新功能的数量将不可避免地增加,因为所有组织都会随着时间而变化。

查看应用于企业软件的三个因素时,您会发现
可以看到它们如何增加这些系统的难度:

  • 企业系统正在尝试了解对组织有效的内容。 直到使用系统后,所需的功能才真正知道。
  • 测试确实很困难,通常通常由用户开始使用系统时进行。 一旦组织切换到新系统,一切都是紧急情况。 这意味着设计正在进行中,如果已经存在大量熵,那么这些问题可能会使它变得无所适从。
  • 业务规则可能会因期间而异。 但是,所有旧数据必须与新数据结合以产生业务报告,才能保持可操作性。 这导致了其他软件所没有的复杂性。 就像在飞行中修理飞机一样。

摘要

企业系统具有其他软件根本不具备的某些属性。 对功能的控制并不仅仅存在于项目团队中。 团队受组织中那些试图传达他们所需要的东西的人的摆布,但是直到他们始终不知道那是什么
后来。 测试几乎总是在实时系统上完成。 一旦系统
在运行时,代码必须能够响应业务逻辑中的更改,并保留所有过去的结果。

作为程序员,使用其他类型的软件要容易得多。
尝试在与活动保持同步的同时开发软件
不断变化的组织是非常非常困难的。

如果您不相信我,请尝试编写其中之一。

企业软件是最难编写的软件。

这个故事改编自我的书《 避免IT灾难:关于企业系统的谬论以及如何超越它们》

先前发布在https://codeburst.io/enterprise-software-is-the-hardest-software-to-write-c76d59725f3

From: https://hackernoon.com/enterprise-software-is-the-hardest-software-to-write-7doh36r4

相关资源:iZotope Ozone VST (臭氧) V4.0.3.274 绿色汉化版.zip-制造工具类…

来源:dfsgwe1231

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年1月10日
下一篇 2020年1月10日

相关推荐