スキップしてメイン コンテンツに移動

『レガシーコードからの脱却 ソフトウェアの寿命を延ばし価値を高める9つのプラクティス』☆5

作られてから増改築を繰り返し、老朽化した情報システムを刷新するための心得集。具体的なノウハウが多く、気付きが多かったです。ただ、この本が想定しているのはJavaで書かれた築10~20年の情報システムのようなのですが、僕が相手しているのは築40年のCOBOLなんだよなぁ。。

↑気になったらここからポチっと(買ってくれるとお小遣いが入ります)↑

この本を読むとわかること

何かが間違っている

  • 過去に作られたドキュメントもなく変数名も適当なプログラムを読み解かなければならない「ソフトウェア考古学」
    • 改修によるコメントとコードの乖離という二次被害
  • 過去に作られ、自動テストなどによって挙動が保証されていないプログラムが「レガシーコード(過去の遺産のプログラム)」
  • 統合フェーズで多く見つかるソフトウェアのバグ
  • 「開発とテストの分離」という現状の開発プロセスの問題点
  • 「未知を見積もる」というソフトウェア開発固有の難しさ

CHAOSレポート再考

  • プロジェクトの成功率・失敗率が記載された米国スタンディッシュグループのCHAOSレポート
    • ソフトウェア開発プロジェクトの成功率はわずか1/3
  • CHAOSレポートの誤り
  • プロジェクトの成功を阻害するコードの変更・バグの習性・複雑さ
    • 開発コストの80%が投下される「バグの特定と修正」
  • 失敗したソフトウェア開発プロジェクトの被害額は年間500億から800億ドル
  • ソフトウェア開発の4倍かかるソフトウェアの保守コスト

賢人による新しいアイデア

  • 余計なプロセスを取り除いた「アジャイルソフトウェア開発プロセス」の登場
    • 顧客満足を最優先し、価値あるソフトウェアを早く継続的に提供するという思想
    • 品質を保証するためのテストに比重を置くのではなく、開発者が品質の高いプログラムを書けるようにするという発想の転換
  • スコープ(開発範囲)を小さなタイムボックス(開発期間)に収めるかがアジャイルのポイント

9つのプラクティス

  • 「一度作ったらそれでおしまい」の結果生まれたレガシーコード
    • その後の変更も見越したコード自体の品質が重要
  • プログラマーがコードを書く速さとコードのきれいさは比例
  • 「クラス(処理単位)を変更する理由は1つでなければならない」というソフトウェア開発における第一原理
  • ソフトウェアの品質は外部指標ではなくコード自体の内部品質で評価

プラクティス1:やり方より先に目的、理由、誰のためかを伝える

  • プログラマーには伝えるのは作るプログラムの目的
  • 開発を円滑に進めるのはコミュニケーションと会話
  • 開発を取り仕切るプロダクトオーナーの7つの心得

プラクティス2:小さなバッチで作る

  • 分析・設計・コーディング・テスト・デプロイを長い期間でバラバラに行わず、機能単位に短期間で実施
    • タスクを小さくて扱いやすいものにする「スコープボックス」
  • 人を増やしても生産性は上がらないソフトウェア開発
  • 開発期間が長くなるほど全体の効率は低下
  • 小さなバッチにすべき4つの理由
  • バックログ(要件)は優先順位をつけるのではなく並べ替え
  • レガシーコードになる「なんちゃってオブジェクト指向」
  • トヨタ生産方式を取り入れたアジャイル開発における「カンバン」

プラクティス3:継続的に統合する

  • プログラムができ次第順次統合する「継続的インテグレーション」
  • 新たなコードが追加されたら全体を自動でリビルド(統合)
  • 自動テスト可能なコードを記述

プラクティス4:協力しあう

  • 部屋を仕切らずコミュニケートしやすい大部屋にするのがベスト
  • ソフトウェア開発は技術的かつ社会的な活動
  • 生産性とコードの品質を向上させるペアプログラミング

プラクティス5:「CLEAN」なコードを作る

  • Cohesive(凝集性)・Loosely coupled(疎結合)・Encapsulated(カプセル化)・Assertive(断定的)・Nonredundant(非冗長)なコードがベスト
  • CLEANではないコードの見抜き方

プラクティス6:まずテストを書く

  • コードのふるまいを検証するのではなく、ふるまいを定義する「テスト駆動開発」
  • 品質の高いユニットテスト(プログラム単体のテスト)をくぐり抜けたプログラムを結合することで全体の品質も向上
  • コードの仕様・ふるまいを表すものとしてテストケースを先に記述
  • ソフトウェアの機能(外部仕様)を保ったまま内部構造を改善する「リファクタリング」

プラクティス7:テストでふるまいを明示する

  • 特定のパラメーターでコードを実行するテストは具体的な要件そのもの
  • テスト自動化ツールJUnitを使ったテスト駆動型開発の実例
  • その後の改修で誤ったコードを書くと自動テストがエラーとなり検知可能
    • プログラムの仕様・品質を自動テストによって担保可能
  • プログラムが複雑化するほどテストケースの数が増加
    • CLEANでないプログラムをテストケース数から検知可能
    • テストケースを減らすためにコードもきれいになる副次効果
  • コードを網羅するテストが書かれることでバグも抑制

プラクティス8:設計は最後に行う

  • コーディングとコードのクリーニングを分けて実施
  • 書かれる回数の10倍読まれるプログラムコード
    • コード自体の品質(理解しやすさ・改修しやすさ)が重要
  • コードを複雑化させる条件分岐・繰り返しをどれだけシンプルにわかりやすく表現できるかがプログラマーの腕
  • オブジェクト志向言語における「ポリモーフィズム」を活用したコード品質の向上
    • オブジェクトの生成と利用の分離
  • コードをきれいにする7つの戦略

プラクティス9:レガシーコードをリファクタリングする

  • 作られた直後から陳腐化・劣化が進むプログラムコード
    • ブラックボックス化し、怖くて誰も触れないシステムという「技術的負債」
  • レガシーコードという地雷
  • プログラムのふるまいを変えずに設計を変えるのが「リファクタリング」
  • いつリファクタリングするのかの7つの戦略

レガシーコードからの学び

  • 機能しているウォーターフォール開発に無理矢理アジャイルを入れる必要はない
  • ウォーターフォールとアジャイルを同居させる方法
  • テスト駆動型開発は生産性・品質を大きく上げる

↓気になったらここからポチっと(買ってくれるとお小遣いが入ります)↓

ベストビュー(過去1カ月)

『九龍城探訪 魔窟で暮らす人々 - City of Darkness』 ☆4

魔窟とも言われた香港の九龍城の住人へのインタビューや、在りし日の写真集。香港の本土返還に伴い取り壊されてしまっているけど、その怪しさに妙に惹かれるのです。

【番外編】ボストン旅行記(UMASS Lowell卒業式編)【Day 4:卒業式】

UMASS Lowellの卒業式@Boston。4 日目は卒業式本番です。とても賑やかでアメリカンな式典でした。ただしあいにくの雨、僕曇り男なのに。。

【番外編】ボストン旅行記(UMASS Lowell卒業式編) 【Day2:晩餐会】

UMASS Lowellの卒業式@Boston。 2日目は午前中はボストン観光、夕方から Hooding ceremonyという卒業生(大学院生)向けの晩餐会です。卒業式で被るHoodをもらいました。

【番外編】ボストン旅行記(UMASS Lowell卒業式編) 【Day0:渡米前にやっておくこと】

UMASS Lowellの卒業式@Bostonについて、計画の立て方やら行く前にやっておくことやらをまとめておきます。

【番外編】ボストン旅行記(UMASS Lowell卒業式編) 【Day3:終日観光】

UMASS Lowellの卒業式@Boston。3 日目は終日フリーなので、ゆっくりボストンを観光しました。

【番外編】ボストン旅行記(UMASS Lowell卒業式編) 【Day5:帰国】

UMASS Lowellの卒業式@Boston。5 日目にして帰国なのです。

【番外編】ボストン旅行記(UMASS Lowell卒業式編) 【Day1:ボストンへ】

UMASS Lowellの卒業式@Boston。 1日目は移動だけで終わりました。

『女たちの王国 「結婚のない母系社会」中国秘境のモソ人と暮らす』☆3

雲南省と四川省の境にある「世界で最後の母系社会を営むモソ族」の社会に入り込んだ中華系シンガポール人女性の手記。結婚という概念がない・一夫一妻制でもないなど、父系社会が当たり前の我々にはイメージしづらい世界ですが、命をはぐくむ女性を中心とした母系社会のほうが生物としては正しい在り方なのかもしれません。

【番外編】AI(機械学習)やってみた。【第3回】ソムリAI ~ニューラルネットワーク編~

AI(機械学習)やってみた、第3弾です。「ニューラルネットワーク(Neural Network)」を使ったソムリAIを作ってみようと思います。”ニューラルネットワーク”、見るからにAIっぽい名前ですよね。

『深層学習教科書 ディープラーニング G検定(ジェネラリスト) 公式テキスト』 ☆5

一般社団法人日本ディープラーニング協会が実施している「Deep Learning for GENERAL (通称G検定 ) 」 の公式テキスト 。 ディープラーニングについて1冊で網羅的によくまとめられているので 、 ディープラーニングの入門書としてもおすすめです 。 ついでに勢いで資格も取ってしまいました 。 AI人材への第一歩なのです 笑

ベストビュー(全期間)

Malaysia Quarantine Premium Package 【番外編】Malaysia赴任記 隔離ホテル情報

Once entering Malaysia, we need to be quarantined for 14days. At the beginning of COVID-19 spread, the hotel for quarantine have been determined randomly. In these days, we can choose "premium quarantine stay package" in advance . This article is summary of premium packages which I asked each hotel. Note: Information in this article might be old. It's better to confirm the latest plan to the hotel. Note: Only Hotel Istana can be booked via its homepage so far. As the other hotels don't show their premium package plans on their homepage, you need to contact them through their reservation E-mail address or "Contact us". マレーシア入国とともに14日間ホテルで隔離されます。当初は滞在ホテルがランダムに割り振られていたようですが、より快適なプレミアムプランが追加されました。各ホテルにどんなプランがあるのか聞いてみたので、聞いた内容をまとめます。 ※情報が古い可能性があるので、念のため最新情報を各ホテルに確認したほうがよいかもしれません。

【番外編】AI(機械学習)やってみた。【第1回】ソムリAI ~決定木編~

最近ブームのAI(機械学習)に手を出しました。まずは、決定木(Decision Tree)というモデルを使って「ソムリAI(ワインソムリエAI)」を作ってみようと思います。

【番外編】ボストン旅行記(UMASS Lowell卒業式編) 【Day0:渡米前にやっておくこと】

UMASS Lowellの卒業式@Bostonについて、計画の立て方やら行く前にやっておくことやらをまとめておきます。

【番外編】AI(機械学習)やってみた。【第6回】乳がん診断AI その1

ソムリAI(ワインソムリエAI)で使った手法で乳がん診断AIを作ってみます。まずは決定木とニューラルネットワークの2つのモデルを試してみます。かなり高性能なモデルができました。名医誕生かもしれません 笑

【番外編】AI(機械学習)やってみた。【第3回】ソムリAI ~ニューラルネットワーク編~

AI(機械学習)やってみた、第3弾です。「ニューラルネットワーク(Neural Network)」を使ったソムリAIを作ってみようと思います。”ニューラルネットワーク”、見るからにAIっぽい名前ですよね。

【番外編】ボストン旅行記(UMASS Lowell卒業式編) 【Day5:帰国】

UMASS Lowellの卒業式@Boston。5 日目にして帰国なのです。

【番外編】ボストン旅行記(UMASS Lowell卒業式編)【Day 4:卒業式】

UMASS Lowellの卒業式@Boston。4 日目は卒業式本番です。とても賑やかでアメリカンな式典でした。ただしあいにくの雨、僕曇り男なのに。。

【番外編】AI(機械学習)やってみた。【第2回】ソムリAI ~ロジスティック回帰編~

AI(機械学習)やってみた、第2弾です。前回は決定木(Decision Tree)を使ったソムリAI(ワインソムリエAI)を作りました。今回は「ロジスティック回帰(Logistic Regression)」というモデルを使ったソムリAIを作ってみようと思います。

【番外編】ボストン旅行記(UMASS Lowell卒業式編) 【Day2:晩餐会】

UMASS Lowellの卒業式@Boston。 2日目は午前中はボストン観光、夕方から Hooding ceremonyという卒業生(大学院生)向けの晩餐会です。卒業式で被るHoodをもらいました。

『深層学習教科書 ディープラーニング G検定(ジェネラリスト) 公式テキスト』 ☆5

一般社団法人日本ディープラーニング協会が実施している「Deep Learning for GENERAL (通称G検定 ) 」 の公式テキスト 。 ディープラーニングについて1冊で網羅的によくまとめられているので 、 ディープラーニングの入門書としてもおすすめです 。 ついでに勢いで資格も取ってしまいました 。 AI人材への第一歩なのです 笑