netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2002-09-13 古い日記からの変換データ ▲
_ XP つづき ▲
XP 関連で印象に残ったのは,だいたい以下の通り.
・大きいプロジェクトは金になるというけど,必ずしもいいとは限らない・上司の説得は,改善大好き人間な人を狙ってやらないと駄目・JUnit みたいなオープンソースも短期リリースという点ではXPに 近いけど,コミュニケーションが不足してる.・方法論は目的に合わせて選ぶべき(「水着」メタファ). 経済的観点からは,「ぎりぎり足りる」がベスト.・在庫を減らしてフィードバックを増やすのがポイント. ここでの「在庫」はソフトウェアの中間生産物(ドキュメント等). Theory of Constraints (The Goal のアレ)の影響を受けてるかも
_ XP ▲
Kent Beck,Alistair Cockburn が講演するというので,eXtreme Programming のセミナーに行ってきた.二人ともジョークを交えながら,面白い話をしてくれた.でも,一番参考になったのは Alistair が見せてくれたCRCカードやグラフの写真かも.「こんな感じに使うのね」っていう雰囲気がわかって,ちょっと嬉しかった.
2005-09-13 ▲
_ Program Evolution ▲
IWPSEで,ERCIM Working Group on Software Evolutionの人たちが,M.M. Lehman, L.A. Belady: Program Evolution という20年くらい前の本をコミュニティに提供しまっせ,と言っていた.
[Publications]の欄にPDFが置かれているのだけど,555ページ(!)あるので,読むのはけっこう大変そう.
_ IWPSE Keynote Talk メモ ▲
Keynote は "Does Software Evolve ?" というタイトルで,Mehdi Jazayeri という人がしゃべっていた.
コードはソフトウェアのモデルの一部にすぎず,ユーザの要求との対応などの情報も含んでいないと完全とはならない,と言っていたのが印象的.最後あたりのスライドに"Software is more than source code; models and meta-models are important to software evolution. Individual software products age; our understanding of them evolves." とかスライドに書いてあったような気がする(適当にメモを取っただけなので違っているかも).
研究の方向性その1としては,ソフトウェア進化を起こす要因について: (1)それらはproduct-/domain-/architecture-specificなのかどうか (2)それをどう識別(identify)するか (3)それらをどう記録(record)するか (4)それらがどうモデルやコードと関係するか,の調査.
例としては,open-source vs closed source (Godfrey; Walt Scacchi) や systems vs subsystems (Gall et al.) といった比較の研究が挙げられていた.それによって得られるであろう成果としては,どこが stable でどこが changing な場所か分かるようになる(その結果,ソフトウェアのモジュール構成などにも影響するかもしれない)といったことが考えられる.
研究の方向性その2としては,コンポーネントの役割(role)について: (1)コンポーネントが単独で更新されるのか,複数のコンポーネントが一緒に変化していくのか(たとえばRepository Miningによる調査) (2)何かコンポーネントモデルがその変化を支援できるのか(Component model portability とか).現在行われている研究で関連するものとしては, Retrospective analysis (validating the architect's claims),empirical validation of theories,model evolution,mining repositories (with surprising implications) などが挙げられていた.
_ [論文]IWPSE セッションメモ1 ▲
興味の引いた論文だけいくつかピックアップ.基本的にプレゼン聞いたことベースで書いてるので,論文の内容はあとでチェックしてみないといけない.
- Tom Mens: Challenges in Software Evolution.
過去の研究18本を,時間・目的・利害関係者といった軸で分類して整理したサーベイ系の論文.
- Giuliano Antoniol, Vincenzo Fabio Rollo, Gabriele Venturi: Detecting groups of co-changing files in CVS repositories.
「ほぼ同時に変更される」ソフトウェア部品の集合を取り出したい,という研究.このタイプの研究,最近よく聞くような気がする.変更回数を曲線として取り出したとき,2つの曲線の近さをwarp differenceという基準で評価している.
- Lerina Aversano, Marcello Bruno, Massimiliano Di Penta, Amedeo Falanga, Rita Scognamiglio: Visualizing the evolution of Web Services using Formal Concept Analysis.
Webサービスを利用しようとするとき,zipcode→zipcode2 といったようにサービスが変更されたとき,そのサービスの内容がどう変化したかを Concept Lattice を使って評価しましょう,という論文.
インタフェースのドキュメントなどから Concept Lattice を作っておいて,それがサービス追加の前後でどう構造が変わったか(新サービスが古いサービスをカバーしていると,新サービスに対応するノードが古いサービスのノードよりもLatticeの上側に位置するとか)で評価できそうだと主張している.
あまりサービスの数が増えると管理不能になりそう,と指摘はされていたが,Concept Analysis をこういう用途に使ってみようというアイディアは面白い.
_ [論文]IWPSEセッションメモ2 ▲
- Jameleddine Hassine, Juergen Rilling, Jacqueline Hewitt, Rachida Dssouli: Change Impact Analysis for Requirement Evolution using Use Case Maps.
Use Case Mapという,システム内のどのコンポーネントが順番に動作するかを表現できる図を描いておいて,その図上で,あるコンポーネントを変更したとしたら,他のどのコンポーネントへ影響が波及するかを調べましょう,というもの.Use Case Map については初めて聞いたのだけれど,クイックリファレンスの図などを見ると,シーケンス図などよりも条件分岐など描けて,抽象度の高いレベルの表記には便利そうな印象.
- Jacek Ratzinger, Michael Fischer, Harald Gall: EvoLens: Lens-View Visualizations of Evolution Data.
コンポーネント間の結合を無向グラフとして閲覧するツールを作りました,という話.結合度を閾値でフィルタして,ある期間でたくさん変更される場所(で,かつ結合度が高いもの)を探せるようにした,という.メトリクスとしては事前計算可能なものだけを選んで,表示自体は高速に行えるようになっている.
- Serge Demeyer: The LAN-simulation: A Research and Teaching Example for Refactoring.
違う Reengineering Tool を色々使って,授業の一環としてリファクタリングと回帰テストの指導をしたという報告.教材だとケーススタディとしては小さくなってしまうものの,ツールの違いなどを学ぶには役立つ様子.スライドなどの教材はObject-Oriented Reengineering Patterns という書籍のページで公開されている.
_ [論文]IWPSEセッションメモ3 ▲
- Steven Reiss: Evolving Evolution.
普通,システムの変更(たとえば,OSをいつアップグレードするかとか)は管理可能だったのだが,Web サービスを使うと,サービス提供者側の都合などで突然仕様が変更されたりする可能性があって,変更の管理が困難となる.
それに対して,Outerface という Interface + Functional Sematnics + Non-Functional Requirements (Security, ...) といったリッチなインタフェースを用意しようと言っている."Functional Semantics" として,その実装(サービス)が満たさないといけない単体テスト(と Contract)を用意して,サービス仕様が変わったことを検知しようというのがちょっと強引な気もするけど,ないよりはずっと良いかもしれない.
- Giuseppe Antonio Di Lucca, Massimiliano Di Penta, Anna Rita Fasolino, Porfirio Tramontana: Supporting Web Application Evolution by Dynamic Analysis.
Web アプリケーションの実行を,Web サーバ側で実行時情報を集めて 分析しよう,という研究.
ユーザ・セッションをページ間の Transition graph として表現して,入力が1より多いJoin,出力が1より多いFork,入出力ともに1ずつのGroupableというノードに分類し,グラフのノードをクラスタ化する.
で,各クラスタはユースケースの候補であろうと考えて名前を開発者に割り当ててもらうと,それらのユースケース候補間のextends関係やinclude関係を取り出して開発者に提示するというものらしい.
一度名前を割り当てると,次の解析のときにはその名前を再利用するようなことを言っていたので,一種のトレーサビリティ確保のようでもあり,なかなか面白い研究という気がする.