最近、JavaScript ミニフィケーション ライブラリの新しいビルドにアップグレードしました。
テストチームによる大量の品質保証作業の後、新しいバージョンのミニファイアーには、コードブロックの背後にある意図と意味を変更する問題があることが発見されました。
(人生の教訓: 新しいバージョンが必要だと本当に確信していない限り、JS ミニファイヤーをアップグレードしないでください。)
ミニファイヤは、「ビジネス ロジック」ほどではなく、DOM 関連のアクティビティに重点を置いたクライアント側の JavaScript コードに使用されます。
ミニファイヤのアップグレードによって壊れたものの簡単な例:
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 から AST へのライブラリを使用することを検討しましたが、縮小されたコードに加えることができる変更の性質を考えると、あまりにも多くの誤検出が発生することになります。
また、代表的なテストを作成することも検討しましたが、それは終わりのない作業のようです (そして、ケースを見逃す可能性があります)。
参考までに: これは、数十万行の JavaScript コードを含む非常に洗練された Web アプリケーションです。
私たちは、「すべてをもう一度徹底的にテストし、繰り返す」のではなく、縮小プロセスをテストするための方法論を探しています。プロセスにもう少し厳密さ/科学を適用したいと考えています。
理想的には、テストのためのより優れた科学的方法があれば、それぞれが新しい微妙な方法でコードを壊すことを恐れずに、複数のミニファイヤを試すことができます。
アップデート:
私たちが持っていたアイデアの1つは、次のことでした。
- 古いバージョンで縮小する
- 美化する
- 新しいバージョンで縮小し、
- 美化し、そして
- 視覚的に違います。
良いアイデアのように思えましたが、違いがあまりにも一般的だったため、diff ツールはほぼすべての行に違いがあるとフラグを立てました。