3月14日に開催されたedge.ccオフ会#2メモの続き。
1.浅海智晴さんによるSimpleModler0.14(3/14)の新機能のデモ・説明
■Google App Engine関連
Google App Engine系ソースの自動生成機能が追加された。
(1)Google App Engineのソースを出力する-gaeオプション
(2)Google App Engine Oil のソースを出力する-gaeoオプション
・Google App Engine Oilで生成されたソースをみると、GAE上でどのように実装したら良いかある程度わかる。
■状態遷移図、状態遷移表の自動生成(0.14でリファイン)
モデル定義をもとに、状態遷移図と、状態遷移をマトリックスにした状態遷移表が自動生成される。これはすばらしい。将来的に、イベントとエンティティの状態遷移を制御するプログラムソースも自動生成される予定とのこと。
クラウドのような不確実な環境(ネットワーク切断、サーバダウン)では、アプリケーションの品質を安定させるために状態遷移図は必須である。
エンティティの状態遷移が確実に把握できないと、システムでエラーになった場合、エンティティ状態が把握しにくく苦労する。私も、2001年頃、会員向けケータイサイトで、会員がアクセス途中で回線をぶち切りした際、データの状態が不安定になり障害解決に時間を費やした経験がある。データの状態遷移をきっちりと定義していれば、トラブル解決もやりやすかっただろうと感じた。
クラウドシステムは、このケータイシステムと同じように不確実な環境である。SimpleModelerが状態遷移図(表)とそれを実現するソースコードが自動生成(将来)されるのは、クラウド上で動作するアプリケーションの品質向上のためにとても大きなメリットとなるのではないだろうか。
SimpleModelerは着実に機能が実装されてきている。SimpleModelerを有効に活用するには、そのベース理論となるSimpleModelingをしっかり身につけたいところ。
2.2009/3/13に開催されたAtWorks の講演の説明
特に共感したのは、アジャイル開発とモデリングについての説明の箇所
(浅海さんの話)
アジャイル開発は、オブジェクト指向プロセスとしてデビューした。しかし、アジャイル関連の話では、ファシリティーなど人間系の話題が多く、アジャイル向けのモデリングの話題は聞かない。
・モデルはコミュニケーション用に作り捨てるものなのか
・プログラミング主導、テスト駆動、振る舞い駆動だからモデリングはいらないのか
・ER図と画面設計、帳票設計で充分なのか
(私の試験)
アジャイル開発を新規システムの段階で実践した結果、以下のサイクルを繰り返しているシステムをいくつか見てきた。
ソースと暗黙知でシステムをつくる
↓
不具合発生時、機能追加時は、ソースコードから解析を始めるので、時間がかかる。影響範囲を見誤る
↓
そのうち、暗黙知を持っていた人たちもいなくなり、「ドキュメントがなく保守ができない」「全体像がみえない」などというセリフが聞こえてくる。
一般的に、人が就業する仕事のサイクルよりも、システムのライフサイクルの方が長い。
そのライフサイクルを視野に入れずに開発したシステムは、時間とともに劣化へと向かう。
かといって、これはドキュメントの作成に時間をかければ解決するという問題ではない。
システムの仕様検討、基本設計など重要な箇所を担っている優秀なエンジニアたちは、おおむねテキスト指向(テキスト大好き)で、テキストベースでドキュメントを作成する。しかしテキストの資料は、読んで理解しないと全体を理解できないし、一覧性にかけるという欠点もある。
一方UMLツールなどのGUIツールでモデリングをするのは、成果物の可読性は高いが、図を作成するのにマウスを多用するなど生産性が低く、生産性が悪い。頭の中に既にシステムはあるのに、それを可視化するのに時間がかかるということが起こる。
SimpleModelerを開発の中心に据えた開発方法論は、そのようなシステム開発のジレンマを解決する。
SimpleModelerによる開発は以下のように進められる。
プロジェクトの中心を担う優秀なエンジニアが、SimpleModelerのDSLで、自分の頭の中をテキストベースで打ち込んでいく。
↓
モデルがコンパイルされ、テキストで表現されたモデルを元に、仕様書やUMLが自動生成され、周りのメンバーと共有される。
↓
ドキュメントと同時に、狙ったプラットフォームのソースコードが自動生成される。
この2つの生成により、モデリングしながら、プログラミングするということが可能になっている。まさに、アジャイル開発の俊敏さ(開発生産性)とモデリング(品質性・保守性)を両立させて実現させる開発手法といえる。
今年の目標101エントリーまであと81