Excel目検に抵抗
表計算ソフトの歴史
Excelとプログラマの戦いの歴史は長い。Excelというものの本質は表計算ソフトであり、表計算ソフトの元祖は 1979年の VisiCalcというテキストユーザインタフェース (TUI) ベースのツールに遡る。
- Screenshot of VisiCalc running on an Apple II computer
やりたいこと
- 何らかのツール(DB, Apache POI, プログラム)で表を出力した際に、その出力に異常がないか調べたい
- というのは、DBのデータと出力に幅があるのでテストをするにしても起こりうるパターンが多く、結果として出力される例外的なデータの検出が難しいがそれを見つけたい
- もう少し抽象化して書くと、ある規定された機能についてテストするのではなく異常検知・変化検知を行いたいということ
- あるデータベースの規定された機能に対してのテストは次回やり方を提案する
結果として人の目でExcelを見たりすることになるのだが、自分はプログラマなのでそれは嫌である。
もちろん俺らは抵抗するで?🤜🤛 ツールで
Excel差分検出ツール
ExcelMerge
最近Excelどうしの比較を行うすばらしいツールが出た
ぶっちゃけこれを使っておけば、どこに差分が出たか一目でわかる。けっこう重たいファイルでも余裕で差分チェックしてくれるようだ。プログラム側に改修を加えた際にどこか異常がないかどうかについては、これで十分事足りる。
INQUIREアドイン
そのほかに 2つのファイルを比較できるINQUIRE などがある。
DiffkitでCSV比較
データの比較を少し行うぐらいだとExcelMergeでいいのですが、定期的にCIを回すような形でテストを行いたい場合どうすればいいのか?これについてはDiffkitというオープンソースのツールがあったので紹介したい。
Diffkit
手っ取り早くテーブル形式のCSVファイルを比較して結果を出す
- Gemfileを作る
$ vim Gemfile
source "https://rubygems.org"
gem 'daff'
- gemをインストールして比較を実行
- この例では2つのCSVを比較して
diff.csv
を出力し -
diff.csv
からOUTPUT.html
を出しています
$ bundle install --path vendor/bundle
$ bundle exec daff.rb diff --output diff.csv test9.lhs.csv test9.rhs.csv
$ bundle exec daff.rb render --output OUTPUT.html diff.csv
- 出力は COOPY » Guide version 0.6.5 という独自フォーマットで出てくる、見やすい
Diffkitを使う場合、Excelフォーマットから事前にCSV形式に変換しておく必要はあるのでそこは考える余地があるなと思います。