QUIZ 15分

クイズの説明

Step 1「コードの美学への招待」で学んだ内容の理解度を確認します。全8問、80%(7問)以上正解で合格です。


問題

Q1. 技術的負債について正しい説明はどれですか?

  • A) コンパイルエラーを放置すること
  • B) 短期的な都合で妥協した設計が将来の開発速度を低下させること
  • C) ライブラリの依存関係が古くなること
  • D) テストカバレッジが100%でないこと
答えを見る

正解: B

技術的負債とは、短期的な都合(納期、コスト)で妥協した設計やコードが、将来的に変更コストの増大や開発速度の低下を引き起こす現象です。借金のように「利子」が膨らんでいきます。


Q2. コード品質の4つの柱に含まれないものはどれですか?

  • A) 可読性
  • B) 実行速度
  • C) 保守性
  • D) テスト容易性
答えを見る

正解: B

コード品質の4つの柱は「可読性」「保守性」「テスト容易性」「信頼性」です。実行速度(パフォーマンス)は重要ですが、コード品質の柱には含まれません。


Q3. 「長すぎるメソッド」というコードスメルの改善方法として最も適切なのはどれですか?

  • A) コメントを追加して分かりやすくする
  • B) 意味のある単位にメソッドを分割する(Extract Method)
  • C) 変数名を短くしてコード行数を減らす
  • D) 処理を1行にまとめる
答えを見る

正解: B

長すぎるメソッドは、意味のある単位にメソッドを分割する「Extract Method」リファクタリングで改善します。コメントの追加は根本的な解決にならず、行数を減らすだけでは可読性が下がります。


Q4. 次のコードに見られるコードスメルはどれですか?

function createUser(name: string, email: string, age: number, role: string) {
  if (role === "admin") { /* ... */ }
  else if (role === "editor") { /* ... */ }
  else if (role === "viewer") { /* ... */ }
}
  • A) 長すぎるメソッド
  • B) プリミティブ執着とスイッチ文の乱用
  • C) 重複コード
  • D) 特性の横恋慕
答えを見る

正解: B

rolestring 型で渡されているのは「プリミティブ執着」です。enum や値オブジェクトを使うべきです。また、role の種類ごとに if/else if で分岐しているのは「スイッチ文の乱用」に該当します。


Q5. 循環的複雑度が10の関数について、最も適切な評価はどれですか?

  • A) 非常に単純で問題なし
  • B) やや複雑で、リファクタリングを検討すべき
  • C) 非常に複雑で、即座にリファクタリングすべき
  • D) 計測不能な状態
答えを見る

正解: B

循環的複雑度の目安は、1-5が良好、6-10がやや複雑(リファクタリング検討)、11-20が複雑(分割すべき)、21以上が非常に複雑(即座にリファクタリング)です。10はやや複雑の上限に位置します。


Q6. 凝集度について正しい説明はどれですか?

  • A) モジュール間の依存関係の強さを示し、高いほど良い
  • B) モジュール内の要素の関連性を示し、高いほど良い
  • C) モジュール内の要素の関連性を示し、低いほど良い
  • D) コード行数に対するコメントの割合を示す
答えを見る

正解: B

凝集度はモジュール内の要素がどれだけ関連し合っているかを示すメトリクスです。高い凝集度(機能的凝集)が望ましく、低い凝集度(偶然的凝集)は改善が必要です。モジュール間の依存は「結合度」で、こちらは低い方が良いです。


Q7. 次のうち、書くべきコメントはどれですか?

  • A) // ユーザー名を取得する (getUserName() の直前)
  • B) // 2024-01-15 田中: バグ修正
  • C) // 30日ルール: 法規制により30日以上の仮登録は自動削除が必要
  • D) // i をインクリメントする
答えを見る

正解: C

コメントは「WHY(なぜ)」を説明するために書くべきです。法規制という背景情報はコードだけでは伝わらない重要な「WHY」です。A と D はコードを読めばわかる「WHAT」のコメント、B は Git の履歴で管理すべき情報です。


Q8. 低い結合度を実現するために最も効果的な方法はどれですか?

  • A) グローバル変数を使って情報を共有する
  • B) すべてのクラスを1つのファイルにまとめる
  • C) インターフェースを通じて依存関係を定義する
  • D) クラス間で内部フィールドを直接参照する
答えを見る

正解: C

インターフェースを通じて依存関係を定義することで、具体的な実装ではなく抽象に依存できます。これにより結合度が下がり、実装の変更が他のモジュールに影響しにくくなります。A は共通結合、D は内容結合で、どちらも高い結合度です。


結果

7問以上正解の場合

合格です。 コード品質の基礎をしっかり理解しています。次の Step 2 では、これらの概念をさらに深掘りし、SOLID原則という具体的な設計指針を学びます。

6問以下の場合

もう少し復習しましょう。 Step 1 のレッスンを再度読み返し、特に間違えた問題の関連箇所を重点的に復習してください。コードスメル、メトリクス、リーダブルコードの原則は、この先すべての学習の土台になります。