QUIZ 30分

クイズの説明

Step 5「リファクタリングの技法」で学んだ内容の理解度を確認します。全8問、80%(7問)以上正解で合格です。


問題

Q1. リファクタリングの定義として最も正確なものはどれですか?

  • A) バグを修正して機能を改善すること
  • B) 外部の振る舞いを変えずに内部構造を改善すること
  • C) パフォーマンスを最適化すること
  • D) 新しい機能を追加すること
答えを見る

正解: B

リファクタリングは「外部から見た振る舞いを変えずに、コードの内部構造を改善する作業」です。テストが通り続けることで振る舞いの保持を保証します。


Q2. Extract Method を適用すべき状況はどれですか?

  • A) メソッドが1行しかないとき
  • B) メソッドが長く、意味のあるまとまりが存在するとき
  • C) クラスのフィールドが多いとき
  • D) テストカバレッジが低いとき
答えを見る

正解: B

Extract Method は、長いメソッドの中に意味のあるまとまり(処理ブロック)が存在するとき、それを新しいメソッドに抽出するリファクタリング技法です。メソッド名が処理の意図を説明する役割を果たします。


Q3. Guard Clause(ガード節)の効果はどれですか?

  • A) パフォーマンスが向上する
  • B) 早期リターンによりネストの深さが減少する
  • C) メモリ使用量が減少する
  • D) コンパイル時間が短縮される
答えを見る

正解: B

Guard Clause は異常系や特殊ケースを先に処理して早期リターンすることで、if-else のネストを減らし、正常系のロジックをフラットに書けるようにする技法です。


Q4. 値オブジェクト(Value Object)の特徴として正しくないものはどれですか?

  • A) 不変である(immutable)
  • B) コンストラクタでバリデーションを行う
  • C) 一意のIDを持つ
  • D) 値に基づいて等価性を判断する
答えを見る

正解: C

値オブジェクトは一意のIDを持ちません。IDを持つのはエンティティです。値オブジェクトは不変で、自己検証(バリデーション)を行い、値に基づいて等価性を判断します。


Q5. 特性テスト(Characterization Test)の目的はどれですか?

  • A) コードの正しさを証明する
  • B) 既存コードの現在の振る舞いをそのまま記録する
  • C) パフォーマンスのベンチマークを取る
  • D) セキュリティの脆弱性を検出する
答えを見る

正解: B

特性テストは、既存コードの現在の振る舞いを「そのまま」記録するテストです。正しさを証明するのではなく、リファクタリング前の振る舞いを固定し、リファクタリング後も同じ振る舞いが保持されることを確認するために使います。


Q6. Replace Conditional with Polymorphism を適用する最適なタイミングはどれですか?

  • A) 条件分岐が1つだけのとき
  • B) 同じ条件分岐(switch/if-else)が複数のメソッドに散在しているとき
  • C) 条件分岐がパフォーマンスのボトルネックになっているとき
  • D) 条件分岐にバグがあるとき
答えを見る

正解: B

同じ型による条件分岐が複数のメソッドに散在している場合、新しい型を追加するたびにすべての分岐を修正する必要があります。ポリモーフィズムに置き換えることで、各型の振る舞いがクラスにカプセル化され、OCPを実現できます。


Q7. リファクタリングの安全な進め方として正しい順序はどれですか?

  • A) 大きな変更 → テスト → コミット
  • B) テスト確認 → 小さな変更 → テスト実行 → コミット
  • C) コミット → 変更 → テスト
  • D) 全ての変更を完了 → 一度にテスト
答えを見る

正解: B

リファクタリングは「テスト確認 → 小さな変更 → テスト実行 → コミット」のサイクルで進めます。小さなステップで頻繁にテストを実行することで、問題が発生した場合に素早く原因を特定できます。


Q8. Seam(継ぎ目)とは何ですか?

  • A) コードの中でバグが発生しやすい箇所
  • B) コードの振る舞いを変えずに差し替え可能なポイント
  • C) テストが実行されない箇所
  • D) パフォーマンスのボトルネック
答えを見る

正解: B

Seam(継ぎ目)は、コードの振る舞いを変えずに実装を差し替えられるポイントです。依存性注入がその典型例で、テスト時にモックオブジェクトを注入することで、外部依存なしにテストを実行できます。


結果

7問以上正解の場合

合格です。 リファクタリングの技法をしっかり理解しています。次の Step 6 では、Month 1 全体の総まとめとして、実践的な設計原則チャレンジに挑戦します。

6問以下の場合

もう少し復習しましょう。 Step 5 のレッスンと演習を再度確認してください。特にリファクタリングの安全な進め方、Extract Method、Replace Conditional with Polymorphism は重要なスキルです。