第一部分:一千个二进制文件的旅程——软件依赖的类型

你需要知道的关于软件依赖的一切,软件依赖是我们软件的关键部分,以及它们在整个软件开发过程中的重要性

《一千个双星之旅

博士TL;

我们将软件依赖关系作为日常工作的一部分。在本系列的第一部分中,我们将研究什么是依赖关系,为什么要使用它们,以及我们可以使用哪些工具来管理它们,并在我们的软件供应链中获得信任。

软件依赖关系

依赖关系是使应用程序能够显示、执行或向几种类型的消费者(从最终用户到第三方开发人员或应用程序)交付功能的工件。最终用户应用程序通常不需要“资源”来为其用户提供完整的体验或行为。2022世界杯阿根廷预选赛赛程2022世界杯阿根廷预选赛赛程图标、图片、pdf、文本和富文本文件、图形内容等资源与库和框架一样重要!应用程序依赖于特定的版本才能正常工作!

例如,一个SPA(单页应用程序)大多数时候是使用框架作为基础编写的,添加库来合并来自其他站点的小部件/组件,定义一组样式表来显示很酷的界面或主题,并支持i18n。所有这些工件:图像、图标、音乐、css文件、文本翻译、库、模块、框架都是依赖关系(二进制和非二进制),它们将在开发周期的不同阶段使用。

很少有应用程序不依赖于外部或内部工件,但对于其余的应用程序和系统,我们需要考虑依赖关系。依赖管理(或缺乏依赖管理)不仅仅是开发人员的问题,软件开发周期中的所有涉众都将受到性能、安全性、许可和兼容性问题的影响。

二进制文件二进制文件(又名软件包、工件、容器、映像……)已经成为现代软件供应链的重心。

文件格式:二进制和文本

计算机中的所有文件都被编码为二进制或文本。虽然所有文件(无论其格式)都包含以比特序列(1和0的二进制值)存储的数据,但在文本文件中,比特表示字符,而二进制文件中的比特表示自定义数据。例如,如果您要使用一个简单的文本编辑器来打开一个Word文档,虽然可以识别其中的一些内容,但您也会发现一些您看不清的信息。

依赖关系可以在二进制格式zip、jar、rpm、nuGet等文件或css等文本格式文件或纯文本文件。为了简单起见,我将在以后的引用中使用二进制依赖项或非二进制依赖项。

为什么要使用依赖关系?

我们在应用程序中添加内部或外部依赖关系有几个原因,最引人注目的是:

  1. 加快发展
  2. 增加的功能
  3. 完成组织的要求和规范

1.通过重用代码来加速开发

许多应用程序必须处理一些常见的任务,例如与I/O设备、大型存储单元、网络资源和用户界面的接口。2022世界杯阿根廷预选赛赛程在这个常见场景中,我们希望以安全、高效或满足特殊考虑的方式重用处理上述任务的组件。如果我们在创建库、组件、模块或框架上投入资源,而这些库、组件、模块或框架在大多数2022世界杯阿根廷预选赛赛程情况下提供了我们从头开始寻找的功能的超集,那么我们几乎没有什么收获。在最坏的情况下,我们可能不会考虑所有可能的用例或大量测试我们需要的功能。

我们站在巨人的肩膀上,利用过去软件开发人员的辛勤工作和经验教训。

2.通过添加专门的库或模块来增加功能

我记得几年前,开发中的应用程序的某个特定部分需要一个简化的状态机。我们的几个初级开发人员的回答是:是的!一些高级开发人员有点谨慎,因为我们知道已经有非常好的测试,抽象和功能齐全的库用例。我们没有遭受“这里没有开发”综合症的严重情况,而是明白,通过使用编写良好、经过测试、文档化、安全和性能良好的库,我们将减少担忧,而不是获得更多。

3.完成组织的要求和规范。

根据我们的组织或消费者,我们可能需要满足严格定义的安全性、许可和最小提供的功能需求,满足这些需求的最典型方法之一是添加临时模块。

特殊需求的例子包括自定义http报头和或cookie、安全认证协议和日志格式。

更仔细地查看依赖项

依赖关系是我们软件的内部部分,它们可以在开发生命周期的不同阶段使用:开发、运行时执行和测试。依赖关系并不都是一样的!

软件依赖关系可以是…

  • 包含二进制文件的集合高质量的测试提供重要功能的代码专业知识来培养。
  • 一行npm模块。像NPM这样的依赖管理器使之成为可能微不足道的功能可以打包并发布为可消费的二进制文件。

软件依赖的类型

依赖项的大小没有限制。依赖关系可以是数千行代码,就像一个成熟的框架,也可以是一行代码。有一系列不同类型的软件依赖关系。

依赖类型依赖类型:框架、库、包、模块和资源。2022世界杯阿根廷预选赛赛程

2022世界杯阿根廷预选赛赛程-文件的集合,例如模板、媒体(音频、视频或图像)、纯文本文件或blob,应用程序需要包含这些文件才能正确执行。

模块-提供自包含功能的方法和函数集。模块通常有一个接口,该接口指定了它所提供的功能以及它所依赖的功能。

-通常具有相同功能目的的模块集合。通常是一个包含描述包元数据的文件的目录。

图书馆定义在几个包中的相关功能的集合,本质上是一组你可以调用的函数,每个调用都做一些工作,并将控制权返回给执行函数的客户端或应用程序。

框架框架体现了一些抽象的设计,内置了更多的行为。为了使用它,你需要将你的行为插入到框架的不同位置。框架的代码然后在这些点调用您的代码。

依赖程度

既然我们已经确定了依赖项类型,我们就有了一个更清晰的画面。下一步是确定哪些依赖关系对我们自己的项目来说是关键的、重要的、装饰性的、容易交换的或多余的。

这两条信息帮助我们决定每个依赖项的更新、迁移成本或清理工作的节奏,并确定资源的优先级!2022世界杯阿根廷预选赛赛程

接下来会发生什么

在本系列文章的第二部分中,我们将更多地了解最著名的依赖关系灾难;讨论添加任何依赖项的隐藏“成本”;我们如何“客观地判断”依赖关系。

今天你能做什么

同时,如果你热衷于提高你的软件的安全性和质量,你可以使用扫描你的二进制文件和开源依赖Frogbot.这个工具会自动保护你的git项目不受安全漏洞的影响,甚至在发布之前。如果您希望在开发环境中包含所有这些信息,可以使用以下方法免费插件/扩展适用于多种ide (VS Code, IntelliJ IDEA, Visual Studio等)。您正在构建Docker映像吗?扫描您的容器,以防止管道漏洞与我们的Docker桌面扩展

如果你想了解更多关于之前建议的工具,JFrog平台,软件依赖和DevOps,那么我鼓励你参加我们的下一次研讨会。

编码快乐!