Transcript 11回目

ソフトウェア工学
知能情報学部
新田直也
リファクタリング





リファクタリング(refactoring):
「プログラムの外的振る舞いを変えることなく,その内部構造
を改善すること」
もともとSmalltalkのコミュニティで使われていた.
M. ファウラーの1999年の著書
「リファクタリング~プログラミングの体質改善テクニック~」
によって広まった.(72個のリファクタリングをカタログ化)
プログラム変換の一種.ただし,コンパイラが行うようなプロ
グラム変換はプログラムの高速化を目的としており,リファク
タリングと変換の目的が異なる.
現在,eclipse,Visual Studio 2005などで実用化&注目
されている.
リファクタリングの例

「スーパークラスの抽出」を使って,Observerパ
ターンを作成しよう…(やや単純化してある.)
リファクタリングの例
1.
空の親クラス(Subject)を作る
リファクタリングの例
2.
「フィールドの引き上げ」リファクタリングを適用.
リファクタリングの例
3.
「メソッドの引き上げ」リファクタリングを適用.
→以上で「スーパークラスの抽出」は完了
リファクタリングの例
4.
「フィールドの引き下げ」リファクタリングを適用.
自動リファクタリングと
手動リファクタリング


当初はリファクタリングは手動で行われていた.
手動リファクタリングの場合,以下の2点が重要:



自動リファクタリングではすべての作業が自動かつ安全に行
われる.



1つ1つの作業が単純でわかり易いこと.
作業が終わるたびにテストを行って動作確認すること.
自動化されているリファクタリングは一部.
eclipse,VisualStudio2005のリファクタリングは自動.
自動/手動いずれのリファクタリングでも,機能追加とリファク
タリングを同時に行わないようにすること.
リファクタリングの背景

最初から完璧な事前設計を行うことは難しい.



後から仕様が変わる可能性がある.
実装して初めて設計の不備に気づく場合も多々ある.
設計者の力量不足.

リファクタリングの使用を前提すると,事前設計を「気楽に」
済ませることができる.(設計に不備があったら後で変更す
ればよい.)

その他の効用:


潜在的なバグの発見
プログラミングの高速化
アジャイル(agile)前夜

開発プロセスモデルは何を問題にしていたか?

例えば,バグが見つかったときの責任は誰にあるか?


仕様書をきちんと書いていれば,顧客側の責任か開発者側の責任かが
はっきりする.
例えば,開発プロジェクトの破綻,工程のやり直し(手戻り)を防ぐに
はどうすればよいか?


不備がないように慎重に仕様書を書こう.
不備がないように慎重に設計を行おう.
→ ウォーターフォールモデルの誕生



そもそも顧客からして仕様をわかっていない.
仕様変更しなければ時代についていけない.
厳密な仕様なんてプログラムと大差ない.
→ 早い段階からの実装.(スパイラルモデル,プロトタイピングモデル)
→ 開発予算,出荷時期の見積もりの問題をどうするか?
アジャイル開発

アジャイル開発:
K.ベック,M. ファウラーなどが中心になって提唱した新しい一群の
開発手法の総称.

アジャイル(俊敏な,素早いの意)
→ 変化に対し素早く反応することを目指す.

サイクルの短いスパイラルモデルともみなせる
(http://www007.upp.sonet.ne.jp/kengai/fowler/newMethodology_j.html#A39)


アジャイル宣言(http://www.agilemanifesto.org/)
1.
2.
3.
4.
プロセスやツールよりも、個人と相互作用を
包括的なドキュメントよりも、動作するソフトウェアを
契約交渉よりも、顧客との協調を
計画に従うよりも、変化への対応を
eXtreme Programming (XP)

4つの価値
1.
2.
3.
4.

コミュニケーション
シンプル
フィードバック
勇気
14の実践項目

計画ゲーム,小さなリリース,オンサイト顧客,メタファ,
シンプルな設計,リファクタリング,テスト・ファースト,ペ
ア・プログラミング,コードの共同所有,常時結合,コー
ディング規約,持続可能なペース,オープンワークス
ペース,日ごとのスキーマ移行
まとめ
開発プロセスモデルの話題は今日でも発展している.
 ソフトウェア工学の歴史は,プロセスとプロダクト相
互の発展の歴史.




プロセス:
ウォーターフォール,スパイラル,プロトタイピング,
アジャイル,ソフトウェアファクトリ…
プロダクト:
構造化技法,オブジェクト指向,UML,アスペクト指向…
アジャイルプロセスは最近,産業界で急速に注目さ
れつつある.(ソフトウェア工学の歴史では稀)
12/8東証システムの不具合

12/8 みずほ銀行の誤発注,東証システムの不具
合でみずほ銀行側に400億円の損失.
(http://www.yomiuri.co.jp/atmoney/mne
ws/20051213mh11.htm)
1.
2.
3.
4.
12/8 9:27,みずほ銀行がジェイコム株を1株1円,61
万株で売り注文.
1分25秒後,みずほ銀行側が誤発注に気づき,取り消
し注文.
東京証券取引所の売買システム の不具合のため取り
消し注文が受け付けられず.
ジェイコム株の値幅制限の下限57万2000円で取引が
行われ,みずほ銀行側に400億円の損失.