做一个小的改变,进行测试,然后“漂洗并重复”,这是一个坏习惯吗?


54

我是一位具有多年经验的程序员。我意识到我有一定的习惯。我不确定这是否真的是个坏习惯。

我会列出要为解决方案执行的任务的清单,例如一些小的小任务,

  1. 更改此用户控件的资源
  2. 更改另一个尺寸
  3. 在另一个用户控件上添加一些HTML和编码

所有这些任务都很小。我的意思是,它们可以在10分钟内完成,但是我习惯于进行一些小的更改,然后在Web浏览器中一次又一次地测试它们。这是一个好习惯吗?

还是我应该一次执行所有这些,然后一起测试?

如果这确实是个坏习惯,那么我该如何改正它,因为这就像浪费时间反复测试小变化?



3
@gnat您的最高投票答案也是基于意见的- 程序员 .stackexchange.com / questions / 154733 / ... 我读的每个答案都有自己的见解,意见吗?
数学

2
不是这个。怎么样你的第二个得分最高的答案- programmers.stackexchange.com/questions/159964/... -是不是认为基于吗?
数学

7
这种方法听起来类似于“ 测试驱动开发”,您可以在其中创建测试,进行必要的更改以通过测试,然后运行测试。然后,当您对第二个测试重复此操作时,第二个测试运行将包括第一个;您会一遍又一遍地重新测试,以证明它仍然有效,但是它是自动化的。
凯文·霍格

5
我会说,与习惯相反,进行大量更改然后再进行测试,才是坏习惯。
克里斯·贝伦斯

Answers:


130
  • 这是一个好习惯。
  • 您正在遵循科学方法。
  • 如果您在进行任何测试之前更改了几件事情,那么对每件事情的测试将更加困难,甚至可能不可靠,因为前提条件将更难以准备,并且不同的更改会以您未预见的方式相互影响。
  • 当您感觉自己现在正在“浪费”时,您将在以后的初始化,测试和维护阶段重获新生。
  • 要走的路。

9
AFAIK,对于UI编程,这不仅是一种好习惯,而且是唯一可以接受的做法。这就是为什么软件公司What you see is what you get为使用HTML,CSS,Widget等的开发人员创建了这么多工具的原因...
InformedA 2014年

38

进行许多小的更改并测试每个都不是一件坏事。它使您可以查看每次更改的影响,然后当一个更改导致问题时,更容易知道哪个更改导致了问题-最近的一个!

如果您有一个包含10个项目的任务列表,并且一次完成所有任务,然后测试该页面,然后注意到该页面看起来不正确,则可能更难知道哪个更改破坏了该页面。

当然,可以将这种方法发挥到极致。找到平衡是关键,并附带获得一个更好地了解什么你改变和变化会如何影响对方。


18

您的问题分为两个部分:

  1. 我应该全部执行一次然后一起测试吗?

    我假设您正在使用VCS
    为了跟踪完成了哪些任务,将任务列表分配到提交列表是有意义的:一个任务,一个提交

    这使得管理当前代码库的不同版本变得容易。您可以恢复到先前的状态,选择要进入主干的更改,依此类推。

    答案很明确:

    不,只能一对一地完成一项更改,一次提交

  2. 但是我习惯于进行一些小的更改,然后在Web浏览器中一次又一次地测试它们,这是一个好习惯吗?

    不管怎样,测试代码/ UI都是一个好习惯,但是在浏览器中一遍又一遍地进行测试是毫无意义的。有一些工具可以自动为您做到这一点(Selenium,PhantomJS / Casper,ZombieJS

    这种情况的答案是:

    是的,多次测试软件是一个好习惯,但是要使用自动化


2
+1,但我不同意使用自动化。在开发新功能时,我会同时进行手动和自动化测试。手动测试让我非常确定事情的表现与我期望的一样。可能会编写错误的自动测试,观察它通过并认为一切都很好,然后手动测试并发现有问题。
凯文

一个任务肯定会潜在地使VCS日志成为“单个任务”的各种定义的令人费解的混乱
whatsisname 2014年

取决于您定义任务的精细程度;)或是否愿意:一张“票”一张提交/分支。使用git可以很容易
Thomas Junk

1
为了扩展Kevin所说的内容,我相信如果您要添加前端的新功能,则始终必须手动进行检查(我尚未找到与TTD相当的前端工作),但您还希望自动化套件,以确保您没有破坏现有功能。
scragar 2014年

@scragar是的。自动化是用于回归测试。
Thomas Junk 2014年

6

对于开发人员的任何习惯,有两个主要问题:

  1. 它如何影响您编写的代码的质量?
  2. 它如何影响您的生产力?

如果两者的答案都是“让它变得更好”,请养成习惯,并教给他人!
如果一个答案是“更好”,另一个答案是“更差”,那么这是一种风格,您必须对此有所意识。它并不总是适用,您可能需要不时地抑制它。
如果两者的答案均为“否定”,则说明您遇到了严重的问题。

当然,对于前两个案例,您还应该考虑“积极效果是否可以自动化或制度化?”。也许编写测试比每次尝试不同的浏览器都更好?(请注意,我知道在Web开发中测试适当的布局并不是那么容易,我并不是说这总是可能的或值得的)。

在这种特殊情况下,在我看来质量提高了,生产率可能降低了。对于较小的更改,它可能有点不好(尤其是如果更改是相互关联的);对于较大的更改,这可能是好的。只要您也测试了最终结果(请避免“每个模块都已测试并且可以正常工作,因此整个过程也可以正常工作,无需测试!”)。

因此-除非您每天有90%的工作要做很小的改动,否则这是一个非常好的习惯。如果您的工作日是这样,那么也许您可能想要查看您的工作方式(或工作地点)。


4

这取决于域。对于布置网页,它可以正常工作,您可以立即获得反馈(甚至可以直接在浏览器中完成!)。同样,它对于不需要很长时间初始化的任何事物也能很好地工作。这是首选,因为它可以减少您的精神工作量并减少出错的可能性。

但是,对于真正的大型项目,您必须编译代码并且花费的时间很短(几分钟),这可能会导致大量的停机时间,因此您通常必须采取以下措施:

  • “并行化”您的工作流程(例如,同时进行多个构建),或者
  • 一口气做尽可能多的事情,或者
  • 创建一个小的独立部分,以进行后续工作并整合到较大的项目中。

(可能还有其他方法。)


+1可直接在浏览器中进行操作。我经常会在浏览器中对CSS进行调整,以作为即将完成的实际工作的原型。
RubberDuck

0

正如其他人所说,这绝对不是一个坏习惯。我通常更喜欢一次只进行一些修改。唯一的例外是,如果我有一大堆不会互相影响的更改(例如,对次要样式或副本的更改,在不同页面上的更改等)。如果要修改布局,请一次更改一个,以便在进入下一个问题之前,可以确认所有受支持的浏览器中的所有内容都是100%。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.