我应该为可重用的代码库组织提出什么建议?

时间:2008-12-25 06:49:45

标签: version-control code-reuse

在过去的一两年里,我的组织开始慢慢将自己重新用于以产品为导向的商业模式和更加以合约为导向的商业模式。在过去的一年里,我被转移到新的承包业务,以帮助扑灭火灾和填补订单。虽然这一年整体上是有利可图的(因此,至少有一项措施是成功的,但我们有一些项目在6月左右的时候真的使我们的数据大为震惊。

我在圣诞节假期之前和我的经理谈话,他提到,虽然他不喜欢“验尸”这个词(我不知道这个词有什么问题,任何商界人士或经理都在那里知道吗?),他确实想在1月中旬的某个时间举行会议,整个合同小组将审查这一年,并试图弄清楚哪些是正确的,出了什么问题,以及我们可以采取哪些措施来提高盈利能力。 / p>

由于各种原因(如果需要,我会详细说明),我相信我们的团队,甚至整个组织都会受益于某种形式的有组织的代码共享。不同的人一次又一次地做同样的事情,他们最终以不同的方式完成(和破坏)。我想至少建立一个存储库,人们可以在其中获取执行某项任务的代码,并在自己的项目中包含(或实际上,复制/粘贴)该代码。

对于至少10-12名全职开发人员的团队,我应该建议什么是可行的公共源存储库,以及临时借给合同组的5-50(非常)兼职开发人员的任何地方专业工作?

答案需要一些文化信息才能得到合理答案,所以我会在这里提供,以及我对这个主题的一些看法:

  1. 不会强制开发人员使用此存储库。障碍 进入必须尽可能低 鼓励参与,或者它会 被忽略。可悲的是,这意味着 任何需要的东西 额外的软件客户端 安装和运行可能会失败。 ClickOnce部署的大概是 尽可能接近,这是非常不确定的。
  2. 我们是一个厌恶风险的微软商店。我可能能够销售开源解决方案,但他们会被怀疑地看待。所有开发人员都拥有VSS,公司董事已宣布VSTS未来不可行。如果设置和许可证不是很难,我仍然可以尝试将VSTS服务器放入实验室。
  3. 我的一些开发人员关心编写高质量,可靠的软件,有些则不关心。我想保护那些不关心的人编写的共享代码。在合同团队中至少有五分之一的同事完全忽略了常见的配置管理实践(比如在处理代码时检查代码)。
  4. 我们更擅长编写流程而非跟随它们。我几乎必须有某种形式的书面流程才能将其出售给我的经理。我相信它必须是轻量级的,灵活的,并且由远程相关的工具强制执行,因为我的经理是唯一一个会阅读它的人。
  5. 不要假设最佳做法。我非常希望包含强制性代码审查等内容,以强制在常用代码上使用静态分析工具(FxCop,StyleCop)。然而,这提高了标准,因为目前没有以一致的方式执行此类实践。
  6. 我很乐意提供任何其他要求的信息。 :)

    编辑:(回答问题)

    也许合同不是正确的术语。我们绝对拥有自己的代码资产。纸上商业模式的一个重要部分(虽然不是,但实际上)是我们拥有我们编写的代码/项目,我们可以将它们转售给其他客户。我们的项目通常采用向公司众多现有软件产品中添加一些特殊功能的形式。

6 个答案:

答案 0 :(得分:4)

从它的声音中你有机会在“验尸”中提出一些解决方案。我将创建一个概述您的想法的演示文稿,并在本次会议上介绍它们。在此之前,我建议您在演示期间设置一些解决方案并进行演示。有些事要做 -

  1. 传播基于组件的编程(好的阅读是Programming .NET Components - Jubal Lowy)。倡导DRY(不要重复自己)编码原则。

  2. 在您的存储库中为所有可重用的代码库设置一个中央公共位置。这应该具有可重用代码库的参考实现。

  3. 通过为已经编入的代码库提供常见方案的项目模板,让人们可以轻松使用您的代码库。这样,您的同事就可以使用一致的模板。您可以利用VS.NET项目模板功能 - 查看以下链接VSX Project System (VS.Net 2008)Code Project article on creating Project Templates

  4. 使用构建自动化工具(如MSBuild(VS2005及更高版本中捆绑))仅复制特定项目所需的组件。在IDE中进行构建设置的这一部分(VS.NET 2005以及使用MSBuild设置预编译和后编译任务的好方法)

  5. 我知道开源解决方案存在阻力,但我仍然建议设置并使用像CruiseControl.NET这样的连续自动化系统,这样您就可以利用它来定期编译和测试项目从中央存储库中维护可重用的代码库。这样可以快速检查对代码库的任何更改,以确保它不会破坏任何内容,它还有助于解决各种项目的版本问题。

  6. 如果您可以在机器上进行设置并在验尸期间显示它作为可以采取的步骤的一部分,那么您应该更好地购买,因为您正在展示已经可以轻松扩展的工作

    希望这对你的传福音有帮助,祝你好运:-)

    我遇到了最近称为Chuck Norris Frameworks的这组框架 - 它们可以在http://nuget.org/packages/chucknorris的NuGet上找到。你应该检查它们,因为它们有一些很好的ASP.NET项目模板。也绝对是结帐Nuget

答案 1 :(得分:1)

按主题组织,需要单元测试(功能级别)来检入/接受库;添加一个wiki来解释什么/为什么以及搜索

答案 2 :(得分:0)

一个问题:你说这是一个咨询小组。你有什么代码资产?我认为您团队的大部分编码工作都将由您的客户拥有,作为您的雇佣合同的一部分。如果您打算这样做,您需要确保您的合同授予您对员工工作的权利。

答案 3 :(得分:0)

Maven解决了Java社区中的代码重用问题 - 你应该去看看它。

我有一个.NET开发人员,我们为.NET程序集的内部用途设计了类似的东西。由于没有类似的.NET Internet社区,此工具只能访问公司网络中的内部存储库。否则将像Maven那样工作。

Maven可以真正用于直接管理.NET程序集(我们将它与我们的Flex .swf和.swc代码模块一起使用)只是.NET民众必须克服使用Java工具并且可能必须编写一个Maven插件来驱动msbuild。

答案 4 :(得分:0)

还有一点,因为我们店里也有“共享代码”。

我们发现这是一个非常 包装问题
无论您使用的是什么代码或正在使用的工具,您应该拥有的是通用构建工具,能够打包您的资源到“交付组件”,并且已经习惯了实际上执行代码,还有文档(压缩)和源(压缩)。

拥有这样一个“交付包单元”的主要兴趣是 as less 文件,以便尽可能部署,以便于下载这些单元

构建过程可以通过Maven或您想要的任何其他(ant / nant)工具进行管理。

当一些审计小组想要检查我们的所有项目时,我们只是在他们的帖子上部署我们在生产机器上部署的相同软件包,除了他们将解压缩源文件并完成他们的工作。

由于我们的源文件还包含编译它们所需的任何文件(例如eclipse files),因此它们甚至可以在其开发环境中重新编译这些项目。)


那样:

  1. 不会强制开发人员使用此存储库。进入的门槛必须尽可能低,以鼓励参与,否则将被忽略:它只是一个脚本来执行“交付模块”,其中包含所需的一切(maven存储库可以是也用于此)

  2. 我们是一个厌恶风险的微软商店:您可以使用任何您想要的存储库

  3. 我的一些开发人员关心编写高质量,可靠的软件,有些不关心:这与这些软件包模块中编写的代码质量无关

  4. 我们更擅长编写流程而非跟随它们:此过程中涉及的唯一流程是打包流程,而且可以相当自动化

  5. 不要假设最佳做法:在打包可执行文件和源文件之前,您不必强制应用任何类型的静态代码分析。

答案 5 :(得分:0)

首先,代码组织在http://msdn.microsoft.com/en-us/library/ms229042.aspx查看Microsoft框架设计指南,然后为您要创建的新框架创建一个中央位置源控件。设置一些默认的命名空间,程序集以便更清晰地分离,并确保每个人都能获得每日构建。