应该期望开发人员在实际程序之前编译内部库吗?


10

最近,与我合作的一位高级开发人员提出了一个要求开发人员获得最新版本并在其项目中编译一个主要内部库的理由。与此相反,相反的说法是,项目团队应该使用他们从内部Maven存储库中获得的稳定版本,开发人员认为开发人员认为在开发人员机器上拥有源代码可以节省时间,因为他们可以读取库源代码代码以确定所需的功能是否可用。

高级开发人员是否有有效论点?还是要求开发人员阅读库的源代码与封装的基本原理背道而驰,甚至将库放在首位?

Answers:


15

这个高级开发人员的论点对我来说毫无意义。

他们想增加不断检索和编译内部库的开销,以便开发人员偶尔可以读取源代码吗?与让开发人员仅在需要检查功能是否可用时才去查看源代码相比,这将浪费更多的时间。

如果图书馆和客户是由不同的开发小组开发的,并且图书馆正在积极开发,则这是一个特别糟糕的主意。客户开发人员不会对库的不稳定有任何隔离。

我不明白为什么不能在不强迫开发人员将其作为其正常构建的一部分的情况下将其提供给开发人员。


其次,您应该能够轻松获取正在使用的库版本的源代码。到底为什么需要该库的“最终的最新版本”?它只是增加了潜在的熵的项目..
jlemos

1
我只是部分同意。恕我直言,这取决于库的开发策略。如果lib正在第二小组的积极开发下,那么您100%是正确的。如果当前团队的任何人都可以更改该库并且政策是使该库以任何方式保持向后兼容,那么使用始终最新的版本有助于更早地识别集成问题,这是一件好事。
布朗

布朗博士-我同意。我的回答是基于这样一个事实,即问题的措辞使得要求进行get&compile 的唯一原因是开发人员可以阅读源代码。

4

建议是

通过客户端开发人员阅读库的源代码来确定所需的功能是否可用,我们可以节省时间

您可以提出其他建议

我们可以节省时间来记录文档库,以指示可用的功能。


那是尝试过的,并且争论是图书馆的开发人员太忙于添加新功能。
rjzii 2012年

2
以为你可能会这么说。大概该库的存在是为了帮助客户端开发人员,这本身不是目的吗?不过,我很感谢您可能没有政治能力(对管理人员,客户或高级开发人员的影响)来吸引图书馆的开发人员。客户端开发人员可能会对该库进行文档编制吗?启动Wiki并根据需要建立文档?可能需要阅读一些源代码,但不需要不断地编译最新版本。
MarkJ 2012年

3

我不会接受这样一种说法,即能够在本地细读源代码是有好处的,但是如果库正在积极开发中(可能是为了增加对项目需求的支持),那么我认为要求开发人员执行经常(可能一天几次)下载更新。我认为,使编译后的(和经过单元测试的)二进制文件可用而不是要求开发人员从源代码​​进行编译具有更好的商业意义。

您是否有能力在项目中建立某种共享存储库,以使最新的编译版本可用?理想情况下,您希望CI服务器按计划执行获取和构建,但是即使团队只是一个团队负责定期更新的网络资源,它也可能会有所帮助。当然,这应该在图书馆团队的职责范围内,但显然他们对此不感兴趣,因此您必须选择他们的懈怠。


1

我曾经在一家大型软件公司工作,该公司不断使用内部业务系统“淘汰”自己的软件。

他们认为这是另一层次的测试。

对于一家公司,我表示同意是一件好事。

我认为,强迫您下载并编译最新版本实在是太过分了,除非编译步骤是贵公司出售,甚至外包图书馆的重要组成部分。


它被部署为产品的一部分;但是,我试图从两个角度解决这个问题:在他们的机器上工作的开发人员和持续集成服务器。
rjzii 2012年

1

尽管可以使用源代码可能是一个好处,但是如果您有一个CI构建代理来监视存储库,那么让该代理编译该库并将其作为外部复制到相关项目中,比要求开发人员更有意义。建立副本时,请执行两个不同的编译步骤。

我目前正在从事一个未与构建代理建立联系的项目,该项目要求在构建主应用程序之前先构建一个子应用程序。我的后牙疼得很厉害。要更改子应用程序,我必须首先构建整个项目,然后转到子构建文件夹,从中获取已编译的产品,然后将其复制到其他子文件夹,然后再次构建整个项目确保主应用程序的构建中包含子应用程序的最新版本。这不是应该怎么做;至少应该有一个MSBuild脚本来自动执行此过程,并且我希望每当新代码提交到主干时,构建代理都会更新外部。


1

既然有这么多人回答说,让每个人都建立一个内部库是没有意义的,所以我将提出相反的观点,这可以证明原因:

  1. 您经常使用该库,并且没有文档。所以每个人都应该有参考来源。如果这是一个经常使用的库,那么方便使用参考可能会有用

    • 当然,有人会说他们应该处理文档,而您的高级开发人员很可能意识到这一事实。但是让我们面对现实吧,很多时候开发团队最终会获得大量未记录的代码,因此当您需要了解其工作原理时,请直接参考源代码。您不必这样做,但是从短期来看,这是最好的选择。
    • 通常,最适合放置文档的人员是最了解图书馆的人员。不幸的是,这些人通常是最忙的,所以放下所有东西并开始进行文档记录通常并不那么容易。
  2. 当人们开始编写依赖于库的代码,而库中的某些东西不起作用时,如果不使用武器,而无需在空中挥舞手臂,那么如果在本地构建库,则很容易直接进入库代码

    • 之所以会发生这种情况,是因为许多库还远远不够完善,尽管我们所有人都希望使用“稳定”的发行版,但仍然存在一些问题。
    • 可能是由于误解了API的使用方式而导致的结果很糟糕。即使有了文档,人们也会经常做出错误的假设
    • 每当高级人员似乎因库代码出现崩溃或其他错误时,都会高举双臂(有时新手比了解内部和外部项目的人还多)会招手。因此,他们不必到您的机器前然后再坐在您旁边的那个家伙那里,而是希望选择回答以下问题:1)崩溃到底在哪里?什么模块/文件/行?2)您调试了吗?你发现了什么?
    • 您的高级人员使用此代码库(应用程序和您的主库)工作了足够长的时间,并且可能他可能已经注意到,当代码已经在计算机上并且准备好进行调试和逐步调试时,这将使他的工作变得更轻松并且使人们受益更快地学习代码库。因此,出于这个原因,他强迫您承担在计算机上构建库的前期费用。

我并不是说他的决定是有道理的,只是指出a)问题是故事的一个方面,b)可能有合理的动机。


1

确实最好进行这种测试。不过,应该由测试人员而不是开发人员来完成。从这个意义上讲,这既不是您的工作,也不是图书馆开发人员的工作。

从您的描述看来,项目中没有测试人员-如果是这种情况,那就是管理问题,而且是一个严重的问题。

...可以节省时间,因为他们可以读取库源代码以确定所需功能是否可用

la脚的推理。当最新版本库无法与最新版本项目一起编译时,可能有多种原因-仅钻入lib源代码可能会浪费时间。

  • 如果库正常并且构建失败是由项目代码中的错误引起的,该怎么办?或者,如果构建失败是由于暂时不兼容的更改(应该在一两天后纠正)而导致的,该怎么办?如果构建失败表明需要一个星期或一个月才能解决的复杂集成问题,该怎么办?对于集成问题,使用以前的版本库是否可以解决?
     
    无论是什么原因,对故障进行初步分析都意味着将开发人员的时间浪费在应该由测试人员完成的工作上。

在推理遗漏之上的另一件事是不可避免的(在我的经历中,这是非常痛苦的),当人们不得不通过在开发和质量保证活动之间进行切换来打破流程时,随之而来的就是生产力的损失。


当团队中有测试人员时,这样的事情真的很简单并且可以轻松得多地处理。您的“高级”开发人员对您的要求基本上是测试要求草稿。

对项目或库进行任何更改后,请确保构建成功。

从此处进行的步骤通常是质量检查活动:弄清需求详细信息,设计正式的测试方案,就如何处理测试失败进行协商。

  • SQA的角度来看,这是设计,设置和维护非常简单的回归测试程序的一项日常任务,该程序可以高度自动化-可能到了只有手动活动才能在问题跟踪器中创建和维护票证以及验证修复。

0

高级开发人员的建议充其量对我而言毫无意义。能够浏览源代码很高兴,但是有更好的方法可以做到这一点。

您正在使用哪个工件库?您应该能够为每个版本部署一个源jar,使其驻留在已编译的库旁边。然后,大多数IDE将允许您将其附加到已编译的库中以进行源代码浏览。带有Maven插件的Eclipse将自动执行此操作。

如果您需要最新的代码,则只需部署版本快照。


Maven被用作存储库,大多数项目都使用Maven或Ivy进行依赖项管理。
rjzii 2012年

@RobZ您没有使用Artifactory或Nexus这样的中央工件仓库吗?
smp7d 2012年

我们正在使用Archiva。
rjzii 2012年

@RobZ好的,那么您可能可以设置poms来部署src jar并附加到IDE中的库(如果它不会自动这样做)。见maven.apache.org/plugins/maven-source-plugin
smp7d

0

这应该只在您的构建脚本中发生:

  1. 检查是否有新版本。否则跳过2。
  2. 下载并编译它,并运行从本地源代码生成API参考所需的任何工具。显示更改日志。
  3. 建立您的应用程式

我不明白为什么或这是一个问题。同样,当参考中缺少某些内容时,您可以将其添加到源中并推送更改。当然,图书馆可以在您的脚下进行更改似乎有些令人恐惧,但是如果图书馆维护者正确地完成工作,这是一件好事。


从持续集成服务器的角度来看,库本身并不小,需要花费几分钟的时间来构建。
rjzii 2012年

@RobZ:是吗?只要库没有更改,就不需要重建它,对吗?
back2dos 2012年

目前,它仍在积极发展中。
rjzii 2012年

@RobZ:是的,也许是这样,但是如果图书馆团队每10分钟标记一个版本,那么他们做错了。持续集成是一件好事,但发行版应包含某种可用性测试。对于库,这是代码审查。这不能自动化。但是,获取上一个审阅和标记版本的过程可以自动进行,如果审阅工作正确且负责任地进行标记,那么我看不到问题,但实际上是一个增强功能。
back2dos 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.