LoginSignup
0
0

今回はコラボ企画「Qiitaでは、エンジニア転職「Findy」を提供するファインディ株式会社とのコラボ企画として、「自分のエンジニアとしてのキャリアを振り返ろう!」を開催しています。」で、自身の苦い経験から新人レビュアー向けのメッセージを書いてます。

レビュアーへのメッセージ「レビューアは 期待値を持ち 結果を見て!」

例えば、diffの結果をレビューする際、差分がない行は目立たないため、見落としがちです。
差分がある行も、レビュイーの言葉に従ってただ結果を追認していませんか?

  • 差分がない:本当は差分があるべきだった可能性があります。
  • 差分がある:本当は差分がないべきかもしれません。意図した差分が正しくない可能性があります(AがBという結果だったが、意図したのはAがCである)。

レビュアーの心得

レビュアーは、期待値と結果を照らし合わせることが重要です。

期待値を持たずに、

  • レビュイーが提示するテストに合格したという多数のチェックマークが付いた資料
  • 問題なしというコメントばかりの資料

先に見せられると、その結果に引きずられて、結果を追認してしまう傾向があります。

そのため、結果を見る前に、期待値を用意すること、期待値がなければ作成してから結果を見るようにしましょう。

この投稿の背景

上記のメッセージは、私のレビューアとしての苦い経験が背景になっています。

ある日、私(レビューア)とレビュイーとでデータパッチの結果(Excel資料)をレビューしていました。

image.png

私は、パッチ結果(Excel資料)の上から順に差分のある行を確認し、全行にOKの印がついていたため、念のため差分のある行の理由をレビュイーに確認しながら、問題ないと判断しました。その後、お客様にデータパッチが完了したことを報告しました。

翌日、お客様からの電話で「データパッチしてほしかったレコードがパッチされていない」との指摘を受けました。私は謝罪し、至急確認することを約束しました。

レビュイーと私は、お客様からのデータパッチ依頼内容と、その依頼を元に作成したSQLを比較する中で、意図しないSQLを発見しました。

  • それは、更新すべき行を更新せず、関係ない行を更新していました。
  • さらに、このSQLは更新後の値が元の値と同じだったため、diffの結果に差分が出ない状況でした。

こんな状況でした:
image.png
image.png

差分が出ないため、目立たず、気づけませんでした。。。その後は推して知るべしです。。。

どうすればよかったのかということで、「レビュアーは 期待値を持ち 結果を見て!」というメッセージに至りました。

次の章は少し趣を変えて、実際にお客様からのデータパッチ依頼から期待値の表を作成し、それとパッチ後の表を比較する例を紹介するなかで、レビュアーが力を入れるポイントを示します。
データパッチの確認はExcelで行うことが多いため、PowerQueryとLAMBDA関数を使用します。

データパッチのレビュー例

お客様からの依頼内容から期待値の表を作成する(レビュアーが力を入れるポイント1)

これがレビュイーとレビュアーが力を入れるべきポイントです。
手作業でしかできず、間違いやすいため、ここを間違えると後の全てが誤りになります。
データパッチを当てた後からこれを行うのは本末転倒です。最初にこれを行うことが非常に重要です。

レビュイーは細心の注意を払って期待値の表を作成し、レビュアーは依頼内容と期待値の表を注意深く確認します。
そして、この期待値の表が完成すれば、SQL文を作成するのはExcel関数を組み合わせるだけで可能です。

お客様の依頼内容:
キーがa-1は31に変更、b-2は37に、d-1の55は追加、b-1は削除してください。

依頼に基づき次の表を作成しました。

image.png

PowerQueryで2つの表を完全外部結合する

完全外部結合するのが大事で、結果のイメージはdiff -y before.txt after.txtをやるイメージです。

~$ diff -y b.txt a.txt
1,1       1,1
2,2     | 2,22
3,3     <
4,4       4,4
5,5     | 5,55
        > 6,6

期待値の表とパッチ後の表を完全外部結合すると、次の3つが対象になります。

  • 結合できた行:期待値通りのパッチが当てられているか確認する対象
  • 期待値表のみに行がある:期待値通り行が消えたか確認する対象
  • パッチ後表のみに行がある:パッチが当てられていない行であることを確認する対象

完全外部結合の具体的な方法は @mosugiさんの「ExcelでPowerQueryを使ってデータを結合して出力する #Excel - Qiita」が、スクリーンショットが豊富で大変参考になります。

LAMBDA関数で行ごとに期待値行とパッチ後の行を比較

=LAMBDA(_before, _after,
  BYROW(
    EXACT(_before, _after),
    LAMBDA(_row, AND(_row))
  )
)(期待値セル範囲,パッチ当て後セル範囲)
    EXACT(_before, _after),

EXACT関数で2つのセル範囲(配列)を比較します。EXACT関数は2次元配列を第一引数と第二引数に渡したとき、互いの配列の該当する添字同士を比較して、TRUE/FALSEの2次元配列を返します。

  BYROW(
    EXACT(_before, _after),
    LAMBDA(_row, AND(_row))
  )

EXACT関数が返すTRUE/FALSEの2次元配列をBYROW関数の第一引数に渡すと、 BYROW関数はその2次元配列から行ごとにデータを取り出し、第二引数のLAMBDA関数に渡しますLAMBDA(_rowの部分。
そのLAMBDA関数でAND関数をAND(_row)で呼び出しています。

比較結果の評価(レビュアーが力を入れるポイント2)

期待値をしっかり作っていれば、そんなに力まなくてもよいのですが、レビューアが結果を見る際のポイントは、あらかじめ定めた期待値に対して、結果がどうなっているか?という観点で比較結果を見ることです。

image.png

FALSEの行は2種類の解釈が必要で注意が必要です。

  • FALSEの行で右側のみの行:パッチ当て指示していない行。
  • FALSEの行で左側のみの行:期待値で削除を指示している行。指示が「削除」か確認します。

おまけ

パッチ当前の表とパッチ当て後の表で完全外部結合して先のLAMBDA関数で比較結果を見たときの見え方。
差分はFALSEででてくるけれど、そらが意図したものかはわからないのです。

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0