4

对于我的团队来说,一个持续的症结是我们的“通用”库。(看这里的相关问题,说“框架”可能更正确)。

目前包括 v1、v2 和 v3。其中 v3 用于所有新应用程序。它包含多个 WCF 服务、一个包含业务对象的类库和一个用于 js/css/images 的公共 Web 目录。

我们希望在前进的过程中做正确的事情,特别是因为我们都积极开始为公共图书馆做出贡献。它正在变成一个大泥球,部署它对每个人来说都是可怕的。

我们的第一个想法是建立一个测试服务器,对所有代码运行单元测试,以确保没有任何问题。问题是为所有东西编写测试非常乏味,坦率地说,没有人有这样的时间。我们也都缺乏编写适当单元测试的经验。话虽如此,如果这是最好的路线,我们会完成它。

在那之后,我们不太确定。我们将通用代码视为应用持续集成实践的地方,因为我们编写的许多不同的应用程序都在使用它。

这也引入了一些问题,例如在本地复制 DLL,或者将所有内容都放在某处的一台服务器上。我们已经感觉自己身处 DLL Hell 中,并且想要出去。

(好的)软件商店用来管理这种情况的策略是什么?

任何和所有的建议表示赞赏。如果需要更多信息,请询问。我很乐意提供。

谢谢!

4

3 回答 3

8

问题是为所有东西编写测试非常乏味,坦率地说,没有人有这样的时间

真正的问题是您在没有 TDD 方法的情况下编写代码(应该首先编写测试),现在在一个以测试为重点的项目中(应该在每个项目中进行)测试通常需要更多时间或相同的时间来编写编写真正的代码。为什么?因为当您在编写测试时遵循 TDD 时,您实际上是在设计您的代码,并且您遵循这种模式 red-green-refactor

你绝对应该开始为你的代码编写测试,现在的问题(我敢于接受这个假设)是你和你的团队没有编写可测试的代码。

检查此线程https://stackoverflow.com/a/10365073/1268570

假设并非所有代码都被编写为可测试的,那么创建单元测试将是一件非常痛苦的事情,但是您可以编写某种集成测试。

关于CI服务器,你应该去实现它,实际上CI不应该是每个严肃项目的可选

我实际上正在创建一个工具来简化与 CI 服务器的集成,它由一组 MSBuild 脚本组成,这些脚本包装了第三方工具来执行每个项目都应该遵循的常见任务,我还没有发布,因为我还没有写完文档,但是它现在可以使用了,你可以看看:

https://github.com/jupaol/NCastor/tree/develop

检查开发分支,因为在发布新版本之前我不会合并到 master

关于版本控制,如您所说,留下“dll 地狱”,这让我认为您没有版本控制标准,我建议您检查语义版本控制模型:

http://semver.org/

顺便说一句,我发现在组织内部分发新组件版本的一个好策略是设置私有 Nuget 服务器,并将组件的 Nuget 包发布到该服务器。当然,要实现这一点,您需要将组件打包为 Nuget,但这很容易做到。

以这篇文章为参考,全力以赴:

  • 使用 TDD 方法编写单元测试

  • 编写干净的可测试代码

  • 实现 CI 服务器

http://misko.hevery.com/2008/07/16/top-10-things-i-do-on-every-project/

我建议您在编写测试时使用的工具:

于 2012-05-01T20:50:29.977 回答
4

给自己买两本书,让它们成为必读。

  1. Michael Feathers 的“有效处理遗留代码”
  2. Roy Osherove 的“单元测试艺术”

第一本书将教你处理遗留代码和重构模式的最佳实践,以及如何围绕你的代码进行有意义的单元测试。

对于有经验的单元测试人员和新手单元测试人员来说,第二本书都是极好的资源。

最后,永远不要让借口/理由“一切都非常乏味,坦率地说,没有人有那样的时间。” 阻止您获得良好实践。一个好的有意义的单元测试总比没有好。

使其成为一个标准,即在没有单元测试支持的情况下不会编写任何“新”代码。并让代码审查成为您日常工作的一部分。

祝好运并玩得开心点。

于 2012-05-01T20:39:01.197 回答
4

坦率地说,没有人有这样的时间。

...但是您有足够的时间来纠正“它”在事后引起的问题?

如果有的话,为消耗“common”的应用程序创建冒烟测试,这些测试将运行核心功能,以确保它们在新的通用版本之后仍然有效。

之后,查看一些代码覆盖率工具,看看你没有测试什么。然后,作为一个团队,您可以添加逐渐建立覆盖范围的项目。

<soapbox>
应该编写单元测试,尤其是对于“通用”代码,因为该代码可能会随着使用方式略有不同的开发人员的突发奇想而改变。
</肥皂盒>

于 2012-05-01T20:42:24.140 回答