はじめに、この記事を書く意図
私は1年程インフラのお仕事をしていたのですがそろそろコーディングのお仕事も再開することになりそうなのでそのリハビリに「業務のコードを書く時の思考をふりかえる」為に半ばチラシの裏として書いてみます。ですが、私以外の方の取り組み方も興味がございますのでコメントいただけるとうれしいです。
取り組む問題
下記記事の問題について取り組んでみます。
複雑なSQLをデチューンしてみよう - SQLer 生島勘富 の日記
問題の解釈、確認
まず、この問題について「確認しなければならない事」を洗い出します。一人でコードを書くのであればこの工程は不要かもしれませんが、今回は自分が書いたものを別の誰かが使う「業務」を想定していますので。
1.データの元にするテーブルについて
元の記事では箇条書きで書かれており残念ながら私は意図をすぐにつかむ事ができませんでした。なので、「解釈」をして問題ないか「確認」する必要があります。以下に私が確認しなければと感じた項目を挙げます。
- テーブルは「売上」「売上明細」「得意先」「商品」の4つで、その項目は箇条書きにある項目で問題ないか。
- 【要望】の「顧客マスタ」とは「得意先」で間違いないか。
- 多対一などのテーブルの関係性
- 主キー
- 最終出力する項目
…正直、これでもまだ足りていないと感じております。その点、コメントにてご意見いただけると助かります。
2.何を満たしていれば問題を解決した事になるのか
ここでは問題に対して作成したプログラムをどのようにチェックするか考えます。この工程は絶対に本体のコードを書く前にすべきです。テストファーストだとかユニットテストだとかそんな大層な事ではなく、何を満たしていれば良いのかだけでも考えます。ちょっと昔話になるのですが、私はこの工程をすっぽかし、資料も残さず現場から去ったメンバーのおかげで一晩過ごしました。私だけでなく、他のチームメンバの一部も。チーム開発している現場で**「適当に」確認したコードを本番環境に挙げるのだけは絶対に止めて下さい。**
さて本題に戻ります。ちょっと問題を整理しましょうか。
2.1 何を作るのか
一番大きな項目ですね。説明を読む限りでは以下のような項目を持つデータを一覧として作成するとあります。
おおよそ、テーブルから拾える項目ですが、消費税だけはあるルールに則って出さなければならないようです。
請求書NO | 納品書NO | 行NO | 売上日 | 得意先ID | 丸め単位 | 商品ID | 商品区分 | 単価 | 数量 | 消費税 | ... |
---|---|---|---|---|---|---|---|---|---|---|---|
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2.2 何に気を付けなければならないか
消費税についてルールを纏めてみます。
- 小数点以下1の丸め方は得意先ごとに決まっている
- 得意先の丸め単位によっては納品書単位、請求書単位で合計してから丸めた消費税との差から誤差を合計金額順に1円づつ差がなくなるまで増減させてゆく
このルールをどう処理するかは正直まだピンときません。ですがテストしなければならないパターンだけは整理できます。
2.3 動作確認するパターン出し
得意先テーブルが持つ消費税のルールに関する項目は2項目3種類2。テストパターン表に纏めると以下の通り。
明細単位 | 納品書単位 | 請求書単位 | |
---|---|---|---|
切り捨て | |||
四捨五入 | |||
切り上げ |
このうち明細単位は「変わってない事」を確認し、残りは「プラスの誤差」「誤差無し」「マイナスの誤差」のパターンをださなければならないと思うのですが、パターンを出していくうちにあることに気が付きました。
「切り捨ての場合、プラスの誤差は出ない気がする」
「同様に切り上げの場合、マイナスの誤差は出ない気がする」
「気がする」とある通り、実のところまだ自分の中で何故そうなるのか説明できていません。
残念ですが、説明ができたら続きを書こうと思います。