SSブログ

Learn to Love Maintenace [プログラマー現役続行]

The Passionate Programmer: Creating a Remarkable Career in Software Development (Pragmatic Life)

The Passionate Programmer: Creating a Remarkable Career in Software Development (Pragmatic Life)

  • 作者: Chad Fowler
  • 出版社/メーカー: Pragmatic Bookshelf
  • 発売日: 2009/07
  • メディア: ペーパーバック

項目27「Learn to Love Maintenace」で、ソフトウェアの保守に関して、保守はソフトウェアを動作し続けることが求められるのですが、バグを修正したり、新たな小さな要求を実装したりしながら動作させ続けるということです。そして、次のように述べられています。
What if a bug turns up the need to redesign a subsystem in the application? That's all part of bug fixing, right? The designs may be old and moldy, and broken windows may be scattered throughout the system. That's an opportunity to put your refactoring chops to the test. How elegant can this system be? How much faster can you fix or enhance this section next time because of the refactoring you're doing this time?

もしバグのためにアプリケーションの一つのサブシステムを再設計する必要性が発生したらどうなりますか? それがバグ修正ですよね?設計は古く錆び付いていて、割れた窓がシステム全体に散乱しているかもしれません。まさに、あなたのリファクタリングの技の真価が問われる機会です。どれだけ洗練されたシステムにできますか?今回行うリファクタリングのおかげで、同じモジュールの修正や機能拡張を次回あなたはどれだけ素早く行うことができるでしょうか?

As long as you're keeping it running and responding to user requests in a timely fashion, maintenace mode is a place of freedom and creativity. You are project leader, architect, designer, coder, and tester. You can flex your creative abilities all you like, and measurable success or failure of the system is yours to bear.

動作し続けて、ユーザからの要求に遅れることなく対処できている限り、保守モードには自由と創造性があります。あなたは、プロジェクトリーダー、アーキテクト、設計者、コーダー、テスターなのです。好きなだけあなたの創造的能力を発揮できますし、システムの成功や失敗はあなた次第です。
今週は、仕事である小さなモジュールを理解するためにずっとリファクタリング※1をしていました。大規模なシステムの一部を構成する非常に小さなモジュールなのですが、理解できないのです。理解できない最大の理由は、名前付けでした。

※1 厳密にはリファクタリングではありません。自動実行できるテストコードも存在しないので、理解のために単に自分の環境でソースコードを修正していただけです。

ソースコードのあちこちを調べて、インスタンスフィールドの役割を理解してみるとフィールド名が全く不適切だったり、メソッドの処理内容がメソッド名から想像できるものではなかったりという具合です。それらの名前付けを修正したり、分かりにくいフローを書き直したりして、理解に努めました。オリジナルのコードのままなら、数ヶ月後に見ても、再度理解するのに多分非常に苦労するだろうと思えるものです。
Good naming is a skill that requires practice; improving this skill is the key to be a truly skillful programmer

良い名前を付けることは、訓練を必要とするスキルです。このスキルを伸ばすことが、本当に熟練したプログラマとなるために重要です。

既存のコードを理解するためにコードを修正するというのは、良い方法です。EclipseやNetBeansなどのIDEを使用すれば、クラス内のprivateのフィールドやメソッド、メソッドのパラメータ名、ローカル変数名を修正することは、テストコードがなくてもかなり安全に行うことができます。名前を変えるだけでなく、Extract Methodなどのいくつかの方法も注意深く行えばある程度安全に行うことができます。

可読性を上げるための制御フローの書き直しは、結構慎重に行わないと間違える可能性がありますので、自動実行可能なテストコードなしでは、かなり危険なゾーンに入る書き直しになります。

既存の汚いコードをリファクタリングするというのは、ソフトウェアエンジニアとしての技量を発揮する機会だと思います。逆に考えると、ソフトウェアエンジニアの技量を知るための良い方法なのかもしれません。汚いコードとそのテストコードを渡して、コードを書き直させてみて、どのように良くなっているかを採点してみると良いかもしれません。

nice!(1)  コメント(5)  トラックバック(0) 

nice! 1

コメント 5

imai

いつも読ませていただいています。
最近、Firefoxのライブブックマークでフィード読込に失敗するので調べてみたところ、この記事の二つ目の引用、
Good naming is ... programmer.
のピリオドの後ろに、0x0b(\v)が入っているのが原因のようです。
よろしければご確認下さい。
#記事に対するコメントでなくてすみません。
by imai (2009-09-29 15:07) 

Yoshiki

imaiさん、

明示的には0x0bを入れたりしていませんでしたが、ちょっと修正してみました。いかがでしょうか。
by Yoshiki (2009-09-29 21:22) 

imai

対応ありがとうございます。残念ながら変わりないみたいです。so-netブログのアプリが記事データをHTMLページの形にするときに何かしているのですかね。
この記事がRSSの範囲外になればまたフィード読込できるようになると思います。大変そうでしたら気にしないで下さい。

以下、ご参考として、
このページのHTMLをファイルに落として od -c にかけると、
0032520 l l f u l p r o g r a m m e r
0032540 . \v < b r > < b r > \n 350 211 257 343 201
となって、ピリオドの後ろに0x0bが入っています。
by imai (2009-09-30 14:14) 

Yoshiki

imaiさん、

確かに文字が入っていたようです。削除しました。確認してみてください。
by Yoshiki (2009-09-30 20:30) 

imai

読込できるようになりました。ありがとうございました。
by imai (2009-10-01 08:57) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0