O’REILLY Learning「Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを支える技術、文化、プロセス」9章〜18章

https://learning.oreilly.com/library/view/googlenosohutoueaenziniaringu-chi-sok-ke-neng-napuroguraminguwozhi-eruji-shu-wen-hua-purosesu/9784873119656/

9章 コードレビュー

Gerrit Code Review
https://www.gerritcodereview.com

コードレビューは普遍的なプラクティスと呼ぶには程遠いとはいえ、ソフトウェア業界全体では、コードレビューそれ自体は異論が出るようなものではない。

コードレビューには多くの恩恵があり、コードの正しさ、意味の把握、コードベース全体での一貫性、それぞれが保証される。

10章 ドキュメンテーション

質の高いドキュメンテーションは、エンジニアリング組織に絶大な恩恵をもたらす。

ドキュメンテーションは、コードと相当に密結合していることがしばしばあるため、できるだけコードとして扱われるべきである。

WRITE THE DOCS
https://www.writethedocs.org/guide/docs-as-code/
Documentation as Code (Docs as Code)

ソフトウェアエンジニアが書かなければならないことが多いドキュメントには主要な類型。
・コードのコメントが含まれたリファレンスドキュメンテーション
・デザインドキュメント
・チュートリアル
・概念的ドキュメンテーション
・ランディングページ(landing page)

エンジニアリングのドキュメンテーションの品質を変えるには、エンジニアたち、そして全エンジニアリング組織が、自身こそが問題にして同時にその解法でもあるのだということを受け入れなければならない。

11章 テスト概観

Mike CohnのテストピラミッドのGoogle版
E2E 5%
インテグレーション 15%
ユニット 80%

アンチパターン
「アイスクリームコーン」
「砂時計」

12章 ユニットテスト

何が「公開API」を構成するかは必ずしも明確なわけではなく、この問題は実際、ユニットテストの「ユニット」とは何かという点の核心に触れるものだ。
ユニット(unit:単位、単体)は、個別の関数程度に小さいか、あるいはいくつかの関連するパッケージ/モジュールのセット程度に広範である可能性がある。

DAMP
「説明的かつ意味がわかりやすい言い回し(Descriptive And Meaningful Phrases)」を奨励するということ。

13章 テストダブル

テストダブル(test double)
http://xunitpatterns.com/Test%20Double.html

14章 大規模テスト

15章 廃止

廃止についての我々の議論は、コードは債務であり資産ではないという基本的前提。

システムの稼働を保つために必要な運用リソースや、周りのエコシステムが発展するにつれて継続的にそのシステムのコードベースを更新する取り組みといったコストの存在は、古くなっていくシステムの稼働を保つのか、それともそのシステムの停止に取り組むのか、それぞれの行動の間のトレードオフが評価に値する。

コードベースがどれだけ大きいかに着目するのではなく、コードの単位あたりでどれだけの量の機能を提供できるか。

第4部 ツール

16章 バージョンコントロールとブランチ管理

バージョンコントロールシステム(Version Control System/VCS)

「トランクベース開発(trunk-based development)」(リポジトリー1個、開発ブランチなし)が、バージョンコントロールのポリシーへのアプローチの中でも特にスケーラブルであることがわかっており、その理由についてのヒントがいくつか与えられる。

VCSは、時間の経過とともに行われるファイルのリビジョン(revision)(またはバージョン)を追跡するシステム。

中央集権的VCSと分散VCS間
分散バージョンコントロールシステム(Distributed Version Control System/DVCS)

17章 Code Search

18章 ビルドシステムとビルド哲学

Bazel
https://bazel.build/?hl=ja
起動からエンタープライズまで、多言語のマルチプラットフォーム プロジェクトをビルドしてテストするための Bazel オープンソース プロジェクトを選択します。

全てのビルドシステムの根底には単純明快な目的がある。それは、エンジニアたちが書いたソースコードを、機械が読める実行可能バイナリへと変換する。

タスクベースのビルドシステム

アーティファクトベースのビルドシステム

memoO'REILLY Learning

Posted by shi-n