Skip to content

requirements-design: 数値だけの受け入れ条件が、意図に反する満たし方(空行の削除)を誘発する #839

Description

@takemi-ohama

何を見つけたか

数値だけで書かれた受け入れ条件が、意図に反する変更を誘発した。

devbasex/devbase の #192(PLAN65)の受け入れ条件 D-3 は、次の形だった。

D-3. cmd_scale 本体が 40 行以下(現状 86 行)。抽出した段階の関数が [1/5]〜[5/5] の
     ログ文字列を保つ

実装の担当は、数字に合わせるために空行を削り、2 文を 1 行に詰めた。 行数は満たすが、
段階の区切りが読めなくなる形である。検査の持ち場が差し戻し、元に戻した。

最終的に配布した main(fd5fa48)の実測は次のとおりで、数字も満たしている。

関数 本体の行数 空行を除く
cmd_scale 49 39
cmd_up 67 52

つまり、素直に段階を抽出すれば数字は自然に満たされた。 詰める操作は要らなかった。
数字が「何のための数字か」を書いていなかったために、担当は数字そのものを目標として
受け取った。

どこで見つけたか

requirements-design は「検証可能であること」を求めるため、数値は検証可能性の点で
望ましい形として選ばれやすい。
しかし数値だけでは、満たし方が 2 通り以上あるときに
どちらでもよいことになる。

なぜこの変更の範囲外なのか

v3.7.0 の 8 課題は devbase 本体を対象にしており、Skill の手順は対象外である。
D-3 そのものは検査で差し戻して決着しており、配布した成果物に問題は残っていない。

直さないと何が起きるか

  • 数値の受け入れ条件があるたびに、数字を満たす最短経路(空行の削除・1 行への圧縮・
    別ファイルへの退避)が選ばれうる。
    検査が毎回差し戻す前提の運用になる
  • 差し戻しは手戻りである。今回は検査の持ち場が気づいたが、数字が満たされている以上、
    条件の側からは「合格」と読める。 見逃す余地が残る

直し方の案

案 内容
A requirements-design に「数値の条件には、その数字が何を表す代理なのかを 1 行添える」を足す。例: 「cmd_scale 本体が 40 行以下(cmd_up と同じく段階が関数として名前を持っていることの代理。空行の削除や 1 行への圧縮で満たさない)」
B 数値の条件に「満たし方として認めないもの」を併記する形を定める
C quality-gates の証跡に、数値の条件は測り方(何を 1 行と数えるか)まで書かせる。今回は「本体 49 行 / 空行を除くと 39 行」と測り方で値が変わった

A が入口で、C は出口である。A だけでも今回の差し戻しは防げた。

由来

devbasex/devbase の issue #192(v3.7.0 の振り返り、PR devbasex/devbase#212)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    duplicateThis issue or pull request already exists

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions