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

Saurus Legacy

レガシーコード改善ガイド (Object Oriented SELECTION)『レガシーコード改善ガイド』を読んだ、と言っていいものかどうか。ざっと全体は眺めたつもりだけれど、章を行ったり来たりしながら読んだので、飛ばしたところがないとどうも断言し辛い。

どうしてそんな読み方をしたのか、というと、本書の構成は線形じゃないから。第2部「ソフトウェアの変更」と第3部「依存関係を排除する手法」の各章の間にクロスリファレンスが張り巡らされていて、最初から順番に読んでいくと、説明なしにどんどん新しい用語が使われていく。とてもじゃないけれど、理解できない。

だから、第1部だけはざっと読んで概要を掴んだら、第2部「ソフトウェア」の変更の章タイトルを入り口に必要な範囲を読むのがいいと思う。実際、「序文」の「本書の使い方」もそう勧めている。各章タイトルがFAQのFAになっているから、自分が置かれている状況に近い章が、大抵は見つかるはず。

入り口となる第2部「ソフトウェア」の章タイトルは、次の通り。なかなかユニークなタイトルが並んでいると思う。
  1. 時間がないのに変更しなければなりません
  2. いつまで経っても変更作業が終わりません
  3. どうやって機能を追加すればよいのでしょうか?
  4. このクラスをテストハーネスに入れることができません
  5. このメソッドをテストハーネスで動かすことができません
  6. 変更する必要がありますが、どのメソッドをテストすればよいのでしょうか?
  7. 1カ所にたくさんの変更が必要ですが、関係するすべてのクラスの依存関係を排除すべきでしょうか?
  8. 変更する必要がありますが、どんなテストを書けばよいのかわかりません
  9. ライブラリへの依存で身動きが取れません
  10. 私のアプリケーションはAPI呼び出しだらけです
  11. 変更できるほど十分に私はコードを理解していません
  12. 私のアプリケーションには構造がありません
  13. 自分のテストコードが邪魔になっています
  14. 私のオブジェクトはオブジェクト指向ではありませんが、どうすれば安全に変更できるでしょうか?
  15. このクラスは大きすぎて、もうこれ以上大きくしたくありません
  16. 同じコードをいたるところで変更しています
  17. モンスターメソッドを変更する必要がありますが、テストを書くことができません
  18. どうすれば何も壊していないことを確認できるでしょうか?
  19. もうウンザリです。何も改善できません
章タイトルがユニークになるのは、そもそもこの本が取り扱っているテーマがユニークだからだ。そのテーマを一言で表すと、「ユニットテストがないコードを、いかにして保守するか?」だと思う。この本では、そのための大枠の手順として次の5ステップを示し、章タイトルに示す状況でそれをどう進めていくか解説している。
  1. 変更点を洗い出す
  2. テストを書く場所を見つける
  3. 依存関係を排除する
  4. テストを書く
  5. 変更とリファクタリングを行う
正直に言って、読みやすくはない。でも、2004年にこの本の原著が出版されてから9年、レガシーコードはいっかな減りそうにない。むしろ増えているんじゃないか、という気さえする。

というわけで、類書もないし手元に置いておこうと思う。

このブログの人気の投稿

北へ - ゴールデンカムイ 16

『ゴールデンカムイ 15』、『〃 16』を読んだ。16巻を読み始めてから、15巻を買ったものの読んでいなかったことに気がつく。Kindle版の予約注文ではままあること。 15巻は「スチェンカ・ナ・スチェンク」、「バーニャ(ロシア式蒸し風呂)」と男臭いことこのうえなし。軽くWebで調べてみたところ、スチェンカ・ナ・スチェンク (Стенка на стенку) はロシアの祭事マースレニツァで行われる行事のようだ[1]。それなりになじみ深いものらしく、この行事をタイトルに据えたフォークメタルStenka Na StenkuのMVが見つかった。 16巻では杉元一行は巡業中のサーカスに参加することになる。杉元と鯉登の維持の張り合いが、見ていて微笑ましい。鯉登は目的を見失っているようだが、杉元もスチェンカで我を失っていたので、どっこいどっこいか。なお、サーカス/大道芸を通じた日露のつながりは、実際にもこのような形だったようだ[2]。 個々のエピソードから視線を上げて、全体の構図を眺めてみると、各勢力がすっかり入り乱れている。アシㇼパは尾形、キロランケ、白石とともにアチャの足跡を辿り、そのあとを鶴見のもとで家永の治療を受けた杉元が鯉登、月島を追っている。今更だけれど、杉元やアシㇼパは、第七師団と完全に利害が衝突していると考えていないはずだった。一方で、土方一味も入墨人皮を継続。むしろ彼らの方が第七師団との対立が深刻だろう。さらに北上するキロランケはまた別の目的で動いているようだけれど、なんで尾形も一緒なんだっけ? 『進撃の巨人』に引き続き、これもそろそろ読み返す時期か。 [1] 5つの暴力的な伝統:スラヴ戦士のようにマースレニツァを祝おう - ロシア・ビヨンド [2] ボリショイサーカスの源流は、ロシアに渡った幕末日本の大道芸人たちにあった 脈々と息づく「クールジャパン」 | ハフポスト

Memory Free - 楽園追放 2.0 楽園残響 -Goodspeed You-

『楽園追放 2.0 楽園残響 -Goodspeed You-』を読んだ。映画 『楽園追放 -Expelled from Paradise-』 の後日譚にあたる。 前日譚にあたる『楽園追放 mission.0』も読んでおいた方がいい。結末に言及されているので、こちらを先に読んでしまって後悔している。ちなみに、帯には「すべての外伝の総決算」という惹句が踊っているけれど、本作の他の外伝はこれだけ [1] 。 舞台は本編と同じでディーヴァと地球だけれど、遥か遠く外宇宙に飛び立ってしまったフロンティアセッターも〈複製体〉という形で登場する。フロンティアセッター好きなのでたまらない。もし、フロンティアセッターが登場していなかったら、本作を読まなかったんじゃないだろうか [2] 。 フロンティアセッターのだけでなくアンジェラの複製体も登場するのだけれど、物語を牽引するのはそのどちらでもない。3人の学生ユーリ、ライカ、ヒルヴァーだ。彼らの視点で描かれる、普通の (メモリ割り当てが限られている) ディーヴァ市民の不自由さは、本編をよく補完してくれている [3] 。また、この不自由さはアンジェラの上昇志向にもつながっていて、キャラクタの掘り下げにも一役買っていると思う。アンジェラについては前日譚である『mission.0』の方が詳しいだろうけれど。 この3人の学生と、フロンティアセッターとの会話を読んでいると、フロンティアセッターがフロンティアセッターしていて思わず笑みがこぼれてしまう。そうして、エンディングに辿りついたとき、その笑みが顔全体に広がるのを抑えるのに難儀した。 おめでとう、フロンティアセッター。 最後に蛇足。関連ツイートを 『楽園残響 -Goodspeed You-』読書中の自分のツイート - Togetterまとめ にまとめた。 [1] 『楽園追放 rewired サイバーパンクSF傑作選』は『楽園追放』と直接の関係はない。映画の脚本担当・虚淵玄さんが影響を受けたSF作品を集めた短編集。 [2] フロンティアセッターは登場しないと思って『mission.0』を読んでいない。 [3] 本編では、保安局高官の理不尽さを通して不自由さこそ描かれてはいたものの、日常的な不自由は描かれていなかったように思う。アンジェラも凍結される前は豊富なメ

報復前進

『完全なる報復 (原題: Law Abiding Citizen)』 を観た。 本作では、家族を押し入り強盗に殺された男クライドが、その優れた知能と技術でもって犯人に報復する。 ここまでで半分も来ていない。本番はここから。 クライドの報復はまだまだ続く。 一見不可能な状態からでも確実に報復を続けるクライドが、冷静なのか暴走しているのか分からず、 緊張感をもって観ていられた。 欲を言えば、結末にもう一捻りあると嬉しかった。 ちょっとあっさりし過ぎだと感じてしまった。