如何让人们在项目上工作而不将其暴露给整个代码库?

时间:2009-09-12 13:57:37

标签: svn project-management agile

我是OnePage的联合创始人兼首席技术官(http://myOnePage.com/joel)。

我很想听听你对这个问题的看法和答案:

我确定雅虎!或谷歌不会将他们的整个代码暴露给他们的开发人员!我只是想知道你用什么方法来限制人们看到完整的代码?在所有项目中,显然会有部分代码包含数据库和API密钥的重要访问凭据。

由于

11 个答案:

答案 0 :(得分:7)

不允许开发人员访问代码肯定会在长期内反效果。它会限制它们在添加新功能方面高效/有效。所以恕我直言,重新考虑这一点。最好雇用你信任的人,让他们访问代码,而不是试图限制它。其次,您试图限制程序代码行或数据库,登录凭据等细节? 登录到db的信用通常驻留在属性文件中。您可以加密属性文件的内容,并对读取属性文件的代码进行模糊处理并对其进行解密。 为了确保程序员不理解代码,您可以对代码库进行模糊处理。但混淆带有自己的包袱。

结论:您正在尝试解决开发人员访问代码库的错误问题

答案 1 :(得分:2)

他们需要在某个阶段查看所有代码。对于调试/分析等。根据您使用的技术,您可能无法隐藏它。他们可以反编译包(例如Java允许你这样做)。

此外,它发出错误的消息,说某些人看不到代码库的位(除非你真的在代码中有一些突破性的东西?)。

如果您想保护POV的安全性,那么凭据等应该是可配置的。开发人员可以获得开发/测试环境等的凭证信息(例如开发数据库)。

部署到生产时,您的第一线支持(或任何受信任的人)应提供此信息,因此您的开发团队将无法访问它。

答案 2 :(得分:2)

我认为真正的解决方案是聘请您信任的开发人员,并让他们获得所需的内容。如果您觉得必须向员工隐瞒事情,那就是一个大问题。

话虽如此,您可以将内容拆分为单独的模块,然后将每个模块放在不同的存储库中,并且只授予每个开发人员访问所需存储库的权限。

答案 3 :(得分:2)

将访问某些生产凭据的权限限制为仅限于管理生产环境的人员(假设您确实有专门的人员执行此操作)。

但是,在像您这样的初创公司中,从开发人员隐藏/混淆部分实际源代码是没有意义的。这似乎是官僚主义和不必要的,它只是向开发人员发送一条消息,他们不能信任或不足以看到整个事情。它还可以带来保密文化而不是透明度 - 您希望在公司培养这些价值观吗?

根据我对谷歌的了解,他们对公司内部的源代码非常开放。他们的算法也不是一个大秘密;谷歌定期发表讨论其技术的学术论文。

答案 4 :(得分:2)

隐藏源代码并不是最难解决的问题。例如,您可以将其拆分到单独的存储库中,并在其上添加不同的密码。然后将编译后的代码(例如jar文件)分发给需要它的团队。或者将代码的功能公开为web-api以避免反汇编威胁(如谷歌图表)

真正的挑战是IMO,它是如何让开发人员在使用组织中存在的代码以及他们无法访问的源代码时高效工作。

因此,如果您编写了一些代码,那么您希望开发人员无需访问源代码即可重用该代码。在这种情况下,重要的是代码必须具有非常干净的API,并且应该有很好的文档记录。通常在企业环境中,访问源代码可以替代文档。

最后,您公开隐藏代码功能的方式取决于您的部署环境。例如,部署在服务器群集上的Web应用程序可能会被破坏为Web服务。

答案 5 :(得分:1)

我认为阻止访问整个系统的最佳方法是创建一个非常宽松的系统。这意味着您可以将创建serviceX的任务分配给开发人员,而这个开发人员只能实现ServiceX的“stabale”版本......

给他确切的要求,他必须实现的界面和一组代码契约,你就“完成了”......

现在你只需要将他的代码实现到你的系统中,并希望它不会爆炸。

我不理解的唯一部分是为什么代码中应该有访问凭证等?那些属于配置;)

答案 6 :(得分:1)

使用subversion,您可以设置ACL和组。检查:

答案 7 :(得分:1)

为外部开发人员提供某种程序集或API。

我曾写过一篇支持使用第三方模块的博客应用程序。我提供了一个抽象类和一个程序员实现的接口。如果我需要暴露像用户对象这样的核心对象,我会缩小它 - 基本上提供一个只读对象,然后我将其扩展用于“另一面”。

答案 8 :(得分:0)

我认为这是一个模块化程度很低的系统,要求开发人员查看所有以便做任何事情

此问题的一个非常相似的方面是学习曲线问题。如果你有一个庞大的系统,你希望新员工能够在系统的某个区域提高工作效率,而不必了解每一个细节。

我参与了一个项目,我的合作伙伴和我将代码分区为UI和通信内部。 (这个项目是一个设备集成模拟器,我们的代码模拟了客户端和设备。)他为他的内部提供了一个模拟DLL,在我们整合两个之前我写了近95%的UI。我从未见过他的任何代码。

答案 9 :(得分:0)

嘿,让我们对可怜的乔尔不要太难!我不喜欢被挡在外面的东西,而不是下一个人,并且当我被期望匆忙修理某些东西但没有适当的授权时,我有一些挫折感。另一方面,“雇用你可以信任的人,然后你不必担心内部安全”说起来容易做起来难。您如何确保所有新员工都值得信赖?你打算做什么,在面试时问他们是不是小偷?你真的希望小偷能够承认吗?只需要一个不诚实的人偷走几百万美元而消失摧毁一家公司。或者甚至是一个善意但不称职的人,他拥有存放备份的房间的钥匙,以确定所有那些塞在未使用的衣柜中的磁盘应该被回收。我当然不希望我的银行或持有我的401k的人向他们雇用的每个新人发放授权,以便能够进入我的账户并无限制地操纵数据。

答案 10 :(得分:0)

虽然我没有处理过这个版本的公开版本,但我已经进入了几个工作环境,其中有关于如何将代码划分为各种组件的结构。让我来描述一些可能有用的例子:

ASP / COM设置:在一家公司中,网页上有ASP代码的VBScript,其中一个用C ++编写的对象模型与Oracle后端进行了对话。只有一些开发人员可以改变对象模型,这限制了我们一些人可以做的事情,但也提供了一种方法来分离谁为每个人做了什么和不同的技能。前端开发人员有一些脚本来提取二进制文件,除了API之外,通常不关心事情是如何完成的。

后端/前端设置:在另一家公司中,后端平台有自己的名称,一些开发人员也参与其中。其他几个开发人员在前端工作,通过API连接,使用.Net远程处理对象来执行各种功能。这有好的和坏的时刻,因为有时前端需要新的后端调用,我们不得不等待这些调用的实现。

希望这在某种程度上有用。