JavaのWebアプリは何から作る?要件から画面・処理・クラスを考える手順|確認問題の回答例
JavaのWebアプリは何から作る?要件から画面・処理・クラスを考える手順の確認問題の回答例です。要件から実装とテストへ、対応をたどって考えます。
問題1:コードにできない部分を確認する
たとえば、次の内容を確認します。三つに限らず、不明な点は仕様として決めます。
- 商品の単価は固定か、商品ごとに違うか。どこから取得するか。
- 数量は必須か。小数を認めるか。下限・上限はいくつか。
- 送料は固定か。無料になる条件はあるか。
- 結果に必要なのは合計だけか、小計や送料も必要か。
- 不正入力で何を表示し、入力値を残すか。
- 見積もりだけか、注文の登録や支払いまで必要か。
最初に数量欄と結果表示の画面案を作り、仮の値を入れて質問すると、具体的に話し合えます。たとえば「合計だけでよいですか」「数量21のときはどうしますか」と確認し、画面案を直します。仮の値や未確認のルールを確定した仕様として実装せず、単価500円・数量1〜20・小計3000円以上で送料無料などと合意した内容を、要件と期待結果に整理します。
問題2:実際に入力できる値で境界を確認する
単価500円なので、数量5の小計は2500円、数量6の小計は3000円です。5では送料300円、6では送料0円になり、無料になる条件が「3000円以上」になっていることを確認できます。もし誤って3000円より大きい場合だけ無料にしていれば、数量6のテストで気付けます。
数量は整数なので、小計は500円刻みです。この仕様では2999円になる数量を入力できません。数量5が境界の直前に入力できる値です。金額を自由入力する別の仕様なら、2999・3000・3001などの試験が適切になる場合があります。
問題3:DTO・リクエスト属性・JSPを順に確認する
- QuoteResultのshippingFeeフィールドへ正しい値が入り、getShippingFee()で取り出せるか。
- ServletがModelから受け取ったDTOを、quote属性へ入れているか。
- 結果JSPが同じquote属性をQuoteResultとして受け取っているか。
- 送料の表示箇所でgetShippingFee()を呼んでいるか。合計のgetterなどと取り違えていないか。
Model単体で送料300円が得られていても、その値が正しいDTO・属性・表示箇所を通っているとは限りません。数量5で実際の結果画面にも送料300円が出るところまで確認します。
問題4:数量の受け渡しと表示を追加する
この構成なら、見積もり結果のDTOに数量も含める方法が考えられます。たとえば次のように対応させます。
| 場所 | 見直す内容 |
|---|---|
| 要件・画面案 | 結果画面に「数量」の項目を追加し、入力数量を表示すると明記する。 |
| QuoteResult | quantityフィールド・getter・コンストラクタ引数を追加する。 |
| QuoteModel | 検証したquantityを、新しいDTOのコンストラクタへ渡す。 |
| QuoteServlet | quote属性で同じDTOを渡す構成は維持できる。他にDTOを直接newしている箇所があれば引数を更新する。 |
| 結果JSP | getQuantity()を使う数量の表示を追加する。 |
| テスト | 入力5ならDTOと結果画面にも5が表示されることを確認する。DTOのコンストラクタを直接呼ぶテストも更新する。 |
これは設計変更の方針であり、本文の完成コードにすでにgetQuantity()があるわけではありません。変更時はフィールド・コンストラクタ・getter・呼び出し箇所をそろえて実装します。
入力エラーの確認は不要にはなりません。0・21などで結果画面へ進まず、元の入力値と理由が入力画面へ戻ることは、引き続きR5として確認します。正常時の項目追加と、エラー時の要件は別です。