我们最近升级到了一个较新版本的JavaScript精简库。
在测试团队进行了大量的质量保证工作后,我们发现我们的minifier的新版本有一个问题,改变了代码块背后的意图和含义。
(生活教训:不要升级JS微型计算机,除非您确信需要新版本。)
minifier用于客户端JavaScript代码,重点放在与DOM相关的活动上,而不是更多的“业务逻辑”。
一个简化的示例说明了minifier升级所破坏的内容:
function process(count)
{
var value = "";
value += count; //1. Two consecutive += statements
value += count;
count++; //2. Some other statement
return value; //3. Return
}
被错误地缩小为以下内容:
function process(n){var t="";return t+n+n,n++,t}
虽然我们可以编写一些单元测试来捕获一些潜在的问题,但考虑到JavaScript大量使用DOM交互(数据输入等),如果没有用户测试(非自动化)就很难进行彻底的测试。我们曾考虑过使用像Esprima这样的JS to AST库,但考虑到可以对精简的代码进行更改的性质,它会产生太多的误报。
我们还考虑过尝试编写代表性测试,但这似乎是一项永无止境的任务(而且很可能会错过案例)。
仅供参考:这是一个非常复杂的web应用程序,有几十万行JavaScript代码。
我们正在寻找一种方法来测试最小化过程,而不是“只需再次、彻底、重复地测试所有东西”。我们希望在这个过程中应用更多的严格性/科学性。
理想情况下,如果我们有更好的科学测试方法,我们可以尝试多个微型器,而不必担心每个微型器都会以新的微妙方式破坏我们的代码。
更新:
我们的一个想法是:
这看起来确实是一个好主意,但是差异是如此普遍,以至于diff工具几乎标记了每一行都是不同的。
https://stackoverflow.com/questions/14841304
复制相似问题