0

我一直在寻找方法来了解管理软件项目的正确方法,并且偶然发现了以下博客文章。我已经学到了一些很难提到的东西,其他的很有意义,还有一些我仍然不清楚。

总而言之,作者列出了一个项目的一堆特性,以及这些特性对项目的“糟糕”贡献了多少,因为没有更好的术语。你可以在这里找到完整的文章:http: //spot.livejournal.com/308370.html

特别是,我不理解作者关于将依赖项与您的项目捆绑在一起的立场。这些是:

== 捆绑 ==

  • 您的源代码仅附带它所依赖的其他代码项目 [+20 points of FAIL]

    为什么这是一个问题,特别是考虑到第 3 点,您已经修改了项目的依赖项以适应项目的需求,因此,您的代码应该与其依赖项一起分发不是更有意义吗?

  • 如果您的源代码在不首先构建捆绑代码位的情况下无法构建 [+10 失败分]

    对于针对 3rd 方库构建的软件,这不一定是这种情况吗?您的代码需要在链接器工作之前将其他代码编译到其库中吗?

  • 如果您修改了其他捆绑的代码位 [+40 失败点]

    如果这对您的项目是必要的,那么很自然地,您已经将所述代码与您的代码捆绑在一起。如果你想定制一些库的构建,比如 WxWidgets,你必须编辑那些项目构建脚本来构建你想要的库。随后,您必须将这些更改发布给希望构建您的代码的人,那么为什么不使用已经写入参数的高级 make 脚本并分发呢?此外,(尤其是在 windows 环境中)如果您的代码库依赖于特定版本的库(您还需要为您的项目自定义编译),那么自己给用户代码不是更容易(因为在在这种情况下,用户不太可能已经安装了正确的版本)?

那么您将如何回应这些评论,以及我可能没有考虑到哪些方面?你同意还是不同意作者的观点(或我的观点),为什么?

为澄清而编辑。

4

1 回答 1

0

您的源代码仅附带它所依赖的其他代码项目。

我的项目需要项目 X。

但是,由于我的项目依赖于 X 的秘密内部奥秘,或者 X 的先前版本,所以我的项目包括 X 的副本。特别是 X 的发布 nm。没有其他。

尝试安装最新最好的 X,看看我的项目有什么问题。由于升级 X 破坏了我的项目,忘记我的项目。他们不会为更新后自发中断的东西而挣扎。他们会找到更好的开源组件。

因此,FAIL 分数。

如果不首先构建捆绑的代码位就无法构建您的源代码。

我的项目不依赖于 X 的 API。它依赖于 X 的特定部分的深层内部链接,绕过 API。

如果我的项目依赖于 X 的 API,那么——对于某些语言,如 C 或 C++——我的项目只能使用 C 或 C++ 头文件进行编译,而不是二进制文件。

对于 Java,这不太正确,因为没有独立的非二进制标头。对于动态语言(如 Python),这在技术上没有任何意义。

然而,即使是 Java 和 Python 也有办法将接口与实现分开。如果我依赖实现(而不是接口),那么我仍然会产生同样的基本问题。

如果我的项目依赖于 C 或 C++ 二进制文件,并且他们构建的东西乱序,或者升级另一个组件而不重建我的,事情可能对他们来说很糟糕。他们可能会看到怪异、破损、“不稳定”。我的产品似乎坏了。他们不会(也不能)调试它。他们完成了。他们会找到更稳定的东西。

因此,FAIL 分数。

如果您修改了其他捆绑的代码位。

当我修改 X 时,我有两个选择。

  1. 让它作为 X 的一部分被接受。

  2. 修复我的程序以使用未修改的 X。

如果我的项目依赖于修改后的 X,那么没有人可以简单、正确、独立地安装 X。他们无法升级 X,他们无法维护 X。他们可能无法将错误修复或安全补丁应用于 X。

我通过修改 X 基本上使他们的工作变得不可能。

因此 FAIL 分数。

随后,您必须将这些更改发布给希望构建您的代码的人。

事实上,他们会因此而恨我。他们不想知道 X 的神秘变化。他们想按照规则构建 X,然后按照规则构建我的东西。他们不想阅读、思考或确定神秘更新补丁包是否已正确应用。

他们不会开玩笑,而是会下载一个竞争包。失败。

如果您的代码库依赖于特定版本的库(您还需要为您的项目自定义编译)

这真的很破旧。如果我依赖于带有自定义编译的版本,他们已经完成了我的包的查看。他们会在挣扎之前找到没有特定于版本的内部奥秘和自定义编译的东西。失败。

于 2010-04-15T21:50:06.490 回答