2014〜2015年に読んだお勧めの技術書のまとめ

今年は「システムの品質」が一大テーマでした。
現場の環境に合わせてテーラリングしつつ、実践していくのは大変です...

品質関係

Software Product Quality Control


最新の考え方、手法に基づく、ソフトウェア製品の品質管理についての教科書です。
ソフトウェアの品質管理の入門書的な位置づけで、ソフトウェアに限らない「品質」についての考え方や、
ソフトウェアの品質管理手法の歴史、ISO 9126や25010などの国際標準の概要など、ページ数が少ない割りに内容は多岐にわたります。
また、現場で使える実用性の高い手法を重視しているらしく、ドイツで開発されたソフトウェアの品質モデル「Quamoco Quality Model」による、システムの品質モデルの構築方法は現場レベルで非常に参考になりました。それ単体では意味が薄いISO 9126や25010の品質モデル(著者の分類だと、Definition Model)を、実際の現場の成果物レベルの品質特性に落とし込む手法は非常に洗練されていますし、各品質特性はステークホルダのビジネス・ゴールに紐づけられているので説得力があります。詳細は以下のスライドが参考になります。

The Quamoco Quality Modelling and Assessment Approach

あくまで入門書的な位置づけで各手法は触りだけしか触れないので、各章の参考書籍も合わせて読むと良いと思います。

Software Inspection


20年以上前の書籍ですが、ゼロ・ディフェクトを目指すためにIBMで実践されている(いた?)らしい、Software Inspectionという手法についての解説書です。インスペクションはJSTQB(Japan Software Testing Qualifications Board)のシラバスでも出てくるので、恐らくメジャーな手法です。前述の「Software Product Quality Control」で「古いけど非常に参考になる」と記述あったことや、現場のプロダクトの品質改善で悩んでいたので、続けて読んでみました。
ソフトウェアの欠陥の発見、解消、抑止は、インプットを入れてボタンを押すだけで対処方法が出てきたり、かっこいいパワポのお絵かきでどうにかなるような、生易しいものではなく、非常に泥臭い日頃の改善の積み重ねで実現されることがよくわかります。チェック・ルールやチェックリスト、手順などの各種ドキュメントの用意、チェック結果をデータベースに記録して次の作業にフィードバックするなど、継続的にPDCAが回る仕組み作りも大事ですが、結局、最後は現場の人間の「この現状を良くしたい!」というモチベーションに強く依存するようです。そのため、仕組みづくりの方法だけではなく、現場の人間のモチベーションを高めるためのヒントや、仕事を回すポイントもたくさん書かれており、「人を動かす仕事のやり方」という意味でも大変参考になりました。IBMのエンジニアリングは深いなぁ....

設計

Software Architecture In Practice


有名な「SEI Series in Software Engineering」の一冊です、どうにか読み終わりました。ソフトウェア・アーキテクチャの基本的な考え方や、アーキテクトに求められる仕事に始まり、ソフトウェア・アーキテクチャが満たすべき品質特性と、その品質特性を満たすための各種戦術、パターン、実際の現場で利用され、洗練されたソフトウェア・アーキテクチャの評価手法など、「なんとなく流行りのミドルウェアをいっぱい並べました」の遥かに先をいく内容です。
これ単体でも価値がありますが、ソフトウェア・アーキテクチャで担保する品質特性と、前述の「Software ProductQuality Control」で示されているISO 9126や25010で定義された品質特性の「差分」を見ることで、 ソフトウェア・アーキテクチャでは何が担保できて、逆に何が担保できないのかを考察したり、各種品質特性を満たすための戦術と、現実のミドルウェアやツールの手法を比較して、どのような取捨選択の結果、その戦術が選択されたのかを分析したりと、いくらでも応用が効きます。
抽象度が高い話ばかりではなくて、唐突に「.NET」「EJB」」「Python」などの単語が具体例で出てくるなど、「現場感」を忘れていないのもポイントが高いです。

データベース

Database Modeling and Design: Logical Design


データベースの設計、モデリングの体系だった教科書です。E-R図の各種方言や、概念設計、ビュー統合のような論理設計のポイントや、汎化、集約などのよくあるテクニックが非常に丁寧に解説されています。例があまり実践的ではないのが気になりますが、おすすめ。

High Performance MySQL: Optimization, Backups, and Replication


現場でMySQLを使うので、一通り読んでみました。「Expert Oracle Database Architecture」ほどの濃さはないですが、InnoDBのデータ構造やMySQLでのセオリー、レプリケーションなどの特徴的な機能の解説が丁寧になされているので、現場でMySQLを触る人はMUST BUYでしょう。
この本に書かれている内容程度は最低限理解しないと、使いこなすのが難しいと思われます。

コンピュータ

Write Great Code: Volume I: Understanding the Machine: 1


Perl神お勧めの書籍です。大学でコンピュータを勉強していた人はおおよそ知っている話ばかりだとは思いますが、復習になるし、例や覚えるべきポイントが実践的なので読んでおいて損はないと思います。
私もアセンブリ・プログラミングなどほぼ未経験だし、大多数のプログラマは業務システムやWebシステムを構築しており、この本に書かれた内容を意識することは少ないかもしれませんが、それでも普段書いているコードの裏側にある「複雑さ」を意識すると、性能問題や意図せぬバグが発生する可能性が少なくなるのではないでしょうか。コンピュータの気持ちに近づける書籍です。