Upgrade to Pro — share decks privately, control downloads, hide ads and more …

良いコードとは何か - エンジニア新卒研修 スライド公開

良いコードとは何か - エンジニア新卒研修 スライド公開

株式会社サイバーエージェントの2021年度 エンジニア新卒研修でコードの品質に関する講義を行いました。

https://note.com/cyberz_cto/n/n26f535d6c575

Mori Atsushi

June 04, 2021
Tweet

More Decks by Mori Atsushi

Other Decks in Programming

Transcript

  1. リアーキテクチャプロジェクト 新卒1年⽬からAndroidアプリのアーキテクチャ移⾏を主導 Java → Kotlin MVC → MVVM + Clean

    Architecture 機能開発と並⾏した段階的リアーキテクチャ 現在も進⾏中 CA BASE CAMP セッション
  2. 技術的負債の発⽣理由 意図的な負債 ⚡ 変化による負債 🏃 学びによる負債 💡 技術知識の問題 持っている技術知識を 正しく使わなかった

    当初は存在しなかった 技術が登場した 使っていた技術が 古くなった 当初は知らなかった 技術を学んだ ドメイン知識の問題 ドメイン知識を 正しくコードに 反映しなかった 当初とはドメイン 知識が変わった 当初は知らなかった ドメイン知識を学んだ より良いドメイン表現を ⾒つけた
  3. Ward Cunningham(ウォード‧カニンガム) による説明 • たとえ理解が不完全だとしても、⽬の前の問題に対する現時点での理解を反 映するコードを書くことには賛成です。 • そのソフトウェアに現時点での理解を可能な限り反映させることが重要で す。 •

    そうしておけば、いざリファクタリングをするときが来たなら、コードには 当時何を考えていたかが明快に残っているので、現在の理解に合わせてリ ファクタリングするのも容易になります。 【翻訳】技術的負債という概念の⽣みの親 Ward Cunningham ⾃⾝による説明 - t-wadaのブログ, https://t-wada.hatenablog.jp/entry/ward-explains-debt-metaphor Debt Metaphor - Youtube, , https://youtu.be/pqeJFYwnkjE
  4. 凝集度という⼀つの指標 • 偶発的凝集 • 論理的凝集 • 時間的凝集 • ⼿順的凝集 •

    通信的凝集 • 逐次的凝集 • 機能的凝集 ⾼い - 良い 低い - 悪い • モジュール内の協調度を⽰す - パッケージ - クラス - メソッド • 凝集度の⾼いモジュールは、 堅牢性、信頼性、再利⽤性、 読みやすさなどの点で好ましい • 単⼀責任の原則(SOLID)
  5. 凝集度の使い分け • 偶発的凝集 • 論理的凝集 • 時間的凝集 • ⼿順的凝集 •

    通信的凝集 • 逐次的凝集 • 機能的凝集 必ず避けるべき 可能な限り避けるべき 理想的 可能な限り⼩さく保つ
  6. 結合度という指標 • 内部結合 • 共通結合 • 外部結合 • 制御結合 •

    スタンプ結合 • データ結合 • メッセージ結合 低い - 良い ⾼い - 悪い • モジュール間の相互依存性の程 度を⽰す - パッケージ - クラス - メソッド • 結合度が低いと可読性と保守性 が上がる • 凝集度と相関が強く、凝集度が ⾼くなれば結合度は低くなる
  7. 結合度の使い分け • 内部結合 • 共通結合 • 外部結合 • 制御結合 •

    スタンプ結合 • データ結合 • メッセージ結合 必ず避けるべき 可能な限り避けるべき 理想的 ⼀部ケースで注意が必要
  8. Clean Architecture Robert C.Martin ( ), Clean Architecture 達⼈に学ぶソフトウェアの構造と設計, KADOKAWA

    The Clean Architecture, https://blog.cleancoder.com/uncle-bob/ / / /the-clean-architecture.html
  9. 内側/外側とは? • 外側 UI データベース 外部システム フレームワーク • 内側 ビジネスロジック

    エンティティ 内側に近づくにつれ、ソフトウェアは抽象化され、 ⼀般的なものになる必要がある
  10. 品質を向上させるための知識は膨⼤ • 命名 • コメント • コードレビュー • オブジェクト指向 •

    ⼿続き型プログラミング • 宣⾔的UI • ⾃動テスト • SOLIDの原則 • デザインパターン • YAGNI • KISSの原則 • 継承より移譲 • Dependency Injection • Mutable / Imutable • Null安全
  11. 参考⽂献 • 質とスピード(2020秋100分拡⼤版) / Quality and Speed Autumn Edition, https://

    speakerdeck.com/twada/quality-and-speed- -autumn-edition • Robert C.Martin ( ), Clean Architecture 達⼈に学ぶソフトウェアの構造と設計, KADOKAWA • オブジェクト指向のその前に-凝集度と結合度/Coheision-Coupling, https://speakerdeck.com/sonatard/ coheision-coupling • 【翻訳】技術的負債という概念の⽣みの親 Ward Cunningham ⾃⾝による説明 - t-wadaのブログ, https://t- wada.hatenablog.jp/entry/ward-explains-debt-metaphor • The Clean Architecture, https://blog.cleancoder.com/uncle-bob/ / / /the-clean- architecture.html • 世界⼀わかりやすいClean Architecture, https://www.slideshare.net/AtsushiNakamura /clean- architecture-release • Code readability, https://speakerdeck.com/munetoshi/code-readability