- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在从事我们公司从以前的承包商那里得到的一个项目,它在测试覆盖率方面处于非常糟糕的状态——几乎没有测试,代码库非常复杂和脆弱,所以任何小的改变很可能以最复杂和令人惊讶的方式打破一切。
为了解决许多问题,我们将开始一个新项目,我想防止团队从旧项目中继承不良文化,因为这样做会带来“快速而肮脏”的诱惑足够好。
因此,我考虑了一些自动执行 TDD 的方法,这或多或少类似于人们通过服务器端 git Hook 执行正确代码风格的方式。
在我的例子中,想法是创建一个服务器端推送 Hook ,它将作用于 OLD 提交(例如,在推送之前分支 HEAD)和 NEW 大致按照以下方式提交(推送后的分支 HEAD):
首先,将代码更改与测试更改分开。如果测试位于单独的文件夹中,这应该很容易。
确定新的或已更改的测试列表。
在 OLD 代码上从 NEW 提交运行新的和更改的测试。断言所有这些测试都应该是红色的。如果任何测试是绿色的,这意味着这些测试无效或多余,因为测试的功能尚不存在。
在 NEW 代码上从 NEW 提交运行新的和更改的测试,捕获代码覆盖率。断言所有测试都是绿色的。断言至少 NEW 代码中所有新的和更改的行都被测试覆盖。
对新 代码运行所有测试以检查回归,捕获代码覆盖率。断言所有测试都是绿色的,并且代码覆盖是完整的。早期只运行一小部分测试的目的是冒烟测试。完整套件可能需要整整几分钟才能运行,而很少有更改的测试几乎可以在瞬间运行。
对我来说,将这些测试内容也作为本地 Hook 提供也很有意义,只需测试本地头和远程头之间的区别,而不必尝试推送可能损坏的代码。
这有意义吗,还是我遗漏了什么?另外,如果“我们在这里都是同意的成年人”不是真的,我是在重新发明轮子,还是有任何最佳实践来执行这样的事情?
最佳答案
Does this make any sense, or am I missing something?
如前所述,这让我觉得这是一个可怕的想法。
我预见到两个问题:
首先,您的测量是根据严格的模式对测试的引入做出强有力的假设,而测试的假设是否普遍成立一点也不明显。
其次,该过程不会协助开发人员,而是会阻碍开发人员,除非您放入 Hook 的假设即使在当前不可预见的情况下也适用。
您可能会回顾 Greg Young 的演讲 Stop Over Engineering ;我们工具的目标不是强制团队在所有情况下都以唯一正确的方式做事。目标应该是在易于理解的情况下让事情变得更容易,并在特殊情况下远离障碍。
现在,如果您稍微改变一下,您可能会有一些有趣的事情发生。如果您要对所有提交应用相同的度量,跟踪结果而不阻塞流程,您将有很多非常有趣的信号需要定期审查。到那时,您就会了解违反政策的频率、这些违规的频率,甚至可能估计团队的成本。
换句话说,您可以花时间完善政策并衡量其有效性,然后再强制执行所有情况。
git commit --no-verify对于您的保单未涵盖的情况,这可能是一个足够的逃生 channel 。
关于git - 使用服务器端 Hook 实现 TDD 的红/绿/重构文化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49642545/
我最近看到了这篇 Netflix 博客文章 http://techblog.netflix.com/2013/08/deploying-netflix-api.html 他们正在谈论红/黑部署,其中并
早上好 我遇到了以下与图形有关的问题,但无法提出正确的解决方案。我将不胜感激任何可能的帮助: 给你一张图,有些边是黑色的,有些是红色的。找到一棵具有一个限制的生成树:如果我们以某个节点为根,则从它到某
我正在编写一个 Java 游戏引擎 ( http://victoryengine.org ),并且我一直在尝试生成具有深度的“3d”图像,您可以通过那些红色/蓝色眼镜看到这些图像。我将 Java2D
根据这个explanation红黑树,树必须具有以下性质: 一个节点要么是红色要么是黑色。 根是黑色的。 (这条规则有时会被省略。因为根总是可以从红色变为黑色,但不一定反之亦然,此规则对分析影响不大。
通过使用 BufferedImage 对象调用 getRGB(int x, int y),可以获得一个负数。 如何将三个不同的值(红色、绿色和蓝色)转换为这个单一的负数? 最佳答案 使用颜色类: ne
有人告诉我使用一些 ORM 库来简化存储。我读过 Doctrine、RedBeans 和其他一些。我正在尝试使用 RedBean,因为它非常简单并且不需要配置。我已经尝试了一些基本代码来存储 bean
我正在使用 Yew对于我的一个实验项目。 为 classes! 导入什么模块宏? html! { { children.clone() } } 最佳答案 找不到cl
我听说两者都用来描述在新计算机上部署更新,同时保持旧计算机处于事件状态,以便在出现问题时准备回滚的想法。我还听说它用来描述更新服务和旧服务之间的共享负载,同样是为了回滚——有时终止不活动的旧补丁,有时
我正在用 php 创建一个 WebService,我的网站将使用它通过 Ajax 调用来查询信息。 起初我只是用内置的 php mysql 库以标准方式完成它,然后手动编写所有查询并在 MySQL W
我正在尝试使用 linux/rbtree.h 中的代码在 Linux 中的每个 task_struct 中实现一个红/黑树。我可以在内核的独立空间(例如模块)中正确插入红/黑树,但是当我尝试使相同的代
如果我对平衡 BST 从最小值到最大值进行中序遍历,我会使用 DFS 来维护大小为 lg(n) 的堆栈。但是如果我需要找到任意节点的中序后继节点,这是最坏的 lg(n) 操作。但是如果我想按顺序迭代,
我正在尝试为具有透明背景的 DIV 制作动画。 JS 在这里 --> http://pastebin.com/fvK2FV5W 动画工作正常,但左右动画时屏幕上出现伪像(向上和向下不受影响)。 症状:
我需要 mysql 在每次更新时自动更新一个字段。我将该字段创建为: `lastModified` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_T
我是 RedBeanPHP 的新手,我研究了他们的文档,但无法找到如何过滤 R::findAll() 结果,就像我们如何通过 $ 过滤共享列表一样bean->withCondition('...',
我试图将数独解决为Yew应用。使用yew =“0.17.4”版本。 但是低于错误 Uncaught RangeError: Maximum call stack size exceeded a
我有一个很奇怪的问题: 将一个小应用程序部署到生产服务器后,出现以下错误: Fatal error: Uncaught exception 'PDOException' with message 'C
我是一名优秀的程序员,十分优秀!