4

在过去的一两年里,我的组织已经开始慢慢地将自己重新定位为较少以产品为导向的商业模式和更多以合同为导向的商业模式。在过去的一年里,我被转移到新的承包业务中,以帮助扑灭火灾并完成订单。虽然这一年全年都是盈利的(因此,至少从一个衡量标准来看,它是成功的,但我们有几个项目确实在 6 月左右为我们的一年带来了数字。

我在圣诞节假期前和我的经理谈过,他提到了这一点,虽然他不喜欢“事后分析”这个词(我不知道这个词有什么问题,那里的任何商业人士或经理都知道吗?) ,他确实想在 1 月中旬的某个时候召开一次会议,整个合同小组将在会上回顾这一年,并试图弄清楚什么是正确的,什么是错误的,以及我们可以采取哪些措施来提高盈利能力。

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

我应该为至少 10-12 名全职开发人员以及临时借给合同组从事专业工作的 5-50 名(非常)兼职开发人员的团队提供一个可行的公共源存储库,我应该提出什么建议?

答案需要一些文化信息才能获得合理的答案,因此我将在此处提供它,以及我对该主题的一些想法:

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

我很乐意提供任何其他要求的信息。:)

编辑:(回答问题)

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

4

6 回答 6

4

从它的声音来看,您有机会在“验尸”期间提出一些解决方案。我会创建一个演示文稿,概述您的想法并在这次会议上展示它们。在此之前,我建议您设置一些解决方案并在演示过程中进行演示。有些事情要做——

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

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

  3. 通过为常见场景提供项目模板以及已经嵌入的代码库,使人们可以轻松地使用您的代码库。这样,您的同事将拥有一个一致的模板来工作。您可以利用 VS.NET 项目模板功能来实现这一点 - 查看以下链接VSX 项目系统 (VS.Net 2008)关于创建项目模板的代码项目文章

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

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

如果您可以在机器上进行设置并在事后检验期间将其作为可以改进的步骤的一部分进行展示,那么您应该得到更好的购买,因为您展示的东西已经在工作并且可以轻松扩展。

希望这对您的传福音有所帮助并祝您好运:-)

我最近遇到了一组称为Chuck Norris 框架的框架——它们可以在 NuGet 上的http://nuget.org/packages/chucknorris上找到。您绝对应该查看它们,因为它们为您的 ASP.NET 项目提供了一些不错的模板。也肯定结帐Nuget

于 2008-12-26T06:21:57.067 回答
1

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

于 2008-12-25T06:54:58.483 回答
0

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

于 2008-12-25T08:10:55.443 回答
0

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

我有一个 .NET 开发人员为我们内部使用 .NET 程序集设计了类似的东西。因为没有可比的 .NET Internet 社区,所以这个工具只会访问我们公司网络中的内部存储库。否则会像 Maven 那样工作。

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

于 2008-12-25T08:21:26.843 回答
0

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

我们发现这在很大程度上是一个打包问题
无论您正在生成什么代码或使用什么工具,您都应该拥有一个通用的构建工具,能够将您的源代码打包成一个“交付组件”,所有内容都用于实际执行代码,还有文档(压缩)和源代码(压缩)。

拥有这样一个“交付包单元”的主要兴趣是尽可能地部署文件,以简化这些单元的下载。

构建过程可以很好地由 Maven 或您想要的任何其他 (ant/nant) 工具管理。

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

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


那样:

  1. 开发人员不会被迫使用此存储库。进入壁垒必须尽可能低以鼓励参与,否则将被忽略:它只是一个执行脚本以获取包含他们需要的所有内容的“交付模块”(也可以使用 maven 存储库) )

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

  3. 我的一些开发伙伴关心编写质量可靠的软件,而另一些则不关心:这与这些包模块中编写的代码质量无关

  4. 我们更擅长编写流程而不是遵循它们:其中涉及的唯一流程是打包流程,并且可以相当自动化

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

于 2008-12-25T10:40:17.233 回答
0

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

于 2008-12-25T11:16:45.507 回答