こんにちは
11/1 続編となる記事を書きました。
今回の実例全て、ChatGPTに尋ねてみたのでぜひこちらも読んでみてください!
本編
エンジニアの皆さん、そしてエンジニアにタイトルのような依頼をしてしまう皆さん、こんにちは!
私はタイトルの内容でお願いされたら某7-11の1個入りの卵を6個買ってしまうかもしれません!
GPT4.0であれば最初から牛乳6つになっていたら面白いですね
タイトルの話は牛乳卵問題としてプログラマの自虐ネタのように使われているみたいですが、仕事でも似たようなことって本当にあるんですよね。
しかし仕事では、牛乳を6本買って家に帰ってからの問題発覚では遅いわけですね。
エンジニアの皆さんであれば、仕様書に関してのQAの投げ合いをしたことがあるかと思います。
明らかに曖昧な表現であれば良いのですが、それが
曖昧かどうかわからず、実装した結果確信犯となってしまう
ようなこと、ありますよね。
今回は私が今までに実際に経験した「実は曖昧な表現」を5件紹介します。
実例
事例その1
以下の条件に合うデータが存在する場合、○○の処理をおこなう。
・ 「hoge」カラムの値が××であるデータ
・「fuga」カラムの値が△△であるデータ
こちらの仕様を読んでどのように解釈したでしょうか? この表現では二通りの解釈が生まれてしまいます。
一つ目は、
「「hoge」カラムの値が××であるデータ」もしくは「fuga」カラムの値が△△であるデータ のどちらか
が存在する場合○○の処理をおこなう」
です。
二つ目は
「「hoge」カラムの値が××であるデータ」及び「fuga」カラムの値が△△であるデータ の両方
が存在する場合○○の処理をおこなう」
ですね。
皆さんはどちらの解釈をしましたか?
仕様書にこの書き方を発見したらQAを投げて必ず確認しましょう!
事例その2
○○の操作を実行した後に本操作(B操作とします)を実行した場合、××の処理をおこなう。
この書き方の曖昧な点は、
○○の操作を実行したあと、別の操作を行ってからB操作を行った場合、××の処理が行われるのかどうか不明な点です。
直後なら直後、一度行ったらフラグが立ち続けるのであればそう記載しましょう!
事例その3
○○の初期値は空白とする
空欄にすればよいのかスペースを入れる必要があるのか、スペースだとしても半角なのか全角なのか、「空白」と文字を入れておけば良いのかわかりません。
なんだかんだ結構あります。
似たような話ですが、「初期値:Null」と書いてあったのでNull(何も表示しない)状態にしたら「未入力か空白かパッと見てわかるようにNullと表示してほしかったんです!」と言われたことがあります。
理不尽!
事例その4
○○には現在日時が入ります。
YYYY.MM.DD形式で良い場合もあれば、「2023年10月24日みたいに入れてほしかった!」 という場合もあります。
必ずフォーマットを確認しましょう。
馬鹿にしていると思われるかもしれませんが、日本時間かどうかもついでに確認しましょう
事例その5
10桁ある番号のうち、1桁目~6桁目の値に + 9999 した値を表示
いいたいことはわかります。 1234567890
という番号であった場合、1234569999
と表示してほしいのでしょう。
1234577889
の可能性がありますが
たまに↑のパターンもあるので、どちらかしっかり確認しておきましょう。
- 10月27日追記
下六桁
の解釈もあり得るので上からか下からも要確認!
まとめ
以上のようなことは他にも存在します。要件定義を行う方、要件定義を依頼した方、そしてそれを実装するプログラマの方、誰かが気づかないと納品された後に不具合として報告されてしまいます。
私たちは一見曖昧に見えない表現でも、複数の受け取り方が存在する可能性のあるものに気づかないといけません。
もしタイトルのような依頼をパートナーからされたら、牛乳の容量と何個入りの卵を買うのかは絶対に確認しましょう。
andmore
他にもこんな記事書いてます。