トレーサビリティとインパクト分析 2011年7月13日 海谷 治彦.

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

シーケンス図の生成のための実行履歴圧縮手法
背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
Doxygen ~ IGModel を一例にした, 数値モデルのドキュメンテーションにおける Doxygen の利用
実証分析の手順 経済データ解析 2011年度.
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
情報処理Ⅱ 2007年12月17日(月).
プログラムの動作を理解するための技術として
変数のスコープの設計判断能力 を育成するプログラミング教育
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
学生の相互評価を用いた モデリング演習支援システム
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
情報管理論 2018/11/9 情報分析の道具 2018/11/9 情報分析の道具 情報分析の道具.
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
類似するコーディングパターンの 利用状況調査ツールの提案
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
動的スライスを用いた バグ修正前後の実行系列の比較
統合開発環境のための アスペクト指向システム
動的依存グラフの3-gramを用いた 実行トレースの比較手法
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
実行時情報に基づく OSカーネルのコンフィグ最小化
只見町 インターネット・エコミュージアムの「キーワード」検索の改善
学生の相互評価を用いた モデリング支援システムの開発
Javaプログラムの変更を支援する 影響波及解析システム
社会シミュレーションのための モデル作成環境
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
UML関係のTIPS 2008年5月26日 2010年5月16日改訂 海谷 治彦.
ミドルウェア”TSUNAGI”を 用いたWEBアプリケーションの構築
ソフトウェア設計検証 研究室の紹介 知能情報学部 准教授 新田直也.
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコード縮退による ソースコード理解 神谷年洋 科学技術振興事業団 さきがけ研究21 オブジェクト指向シンポジウム2003.
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
シナリオを用いたレビュー手法PBRの追証実験 - UMLで記述された設計仕様書を対象として -
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
オブジェクト プログラミング 第2回 プログラムの基本.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
ソフトウェア工学 知能情報学部 新田直也.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
プログラムが実行されるまで 2002年4月14日 海谷 治彦.
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
演習1に関する講評 ~ 業務仕様を書く難しさ ~
保守請負時を対象とした 労力見積のためのメトリクスの提案
アスペクト指向言語のための視点に応じた編集を可能にするツール
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
メソッドの同時更新履歴を用いたクラスの機能別分類法
自然言語処理2015 Natural Language Processing 2015
開発者との対話を活かした 横断的構造の表現
ソフトウェア理解支援を目的とした 辞書の作成法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
コードクローン解析に基づく デザインパターン適用候補の検出手法
知識ベースの試作計画 ●●●研究所 ●●●技術部 稲本□□ 1997年1月.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
新人研修発表 平成13年5月14日(月) 探索アルゴリズム ハッシュ法について 株式会社 エーアイネット・テクノロジ          須田 哲生.
自然言語処理2016 Natural Language Processing 2016
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
C#プログラミング実習 第1回.
Presentation transcript:

トレーサビリティとインパクト分析 2011年7月13日 海谷 治彦

背景: ソフトウェア成果物 プロの開発では多様な成果物が作成される. 要求仕様書 設計仕様書 ソースコード テストケース 成果物内,成果物間の相互の関係(トレース)を知ることが重要.

トレースする理由 開発中に,どの機能が実現済か確認する. バグの原因を探す. 要求仕様書 ⇒ コード バグの原因を探す. 仕様書 ⇒ コード 既存ソフトに新機能追加や性能アップのため,改造・改良する際に,どこを書き直せば良いか探す.(インパクト分析) 仕様が見当たらない実システムの仕様を明確にする.(リバースエンジニアリング) コード ⇒ 仕様

人手が主の変更要求への対応 ソースコードA 変更要求 修正対象 ソースコードB 修正対象 ドキュメント レビュープロセス(人手) 関数A … 関数B レビュープロセス(人手) …

例: 演習2,3の解答例 要求項目は14個 ユースケースは6個 (概念)クラスは5 or 6個 ソースは6 or 7個 予想される要求変更が7個 それぞれ単純に対応付いていないため,トレースをするための技術が必要.

トレーサビリティの分類 水平方向のトレーサビリティ 垂直方向のトレーサビリティ 関数から関数,クラスからクラス等. 変更や依存性. 呼び出し関係,共有関数の存在 垂直方向のトレーサビリティ 要求項目から設計要素 設計要素からコード片(関数やクラス) 情報検索的なアプローチ

技術の分類 静的アプローチ 動的アプローチ プログラムや文書の記述内容をもとにトレースをとる. コールグラフ,データフロー解析. 文書の場合は,章構成や段落構成,文内の係り受け等. 動的アプローチ プログラムを動かしてみてトレースをとる. プロファイリング. デバッガ等を利用した解析. 文書は当然,動かないので原則,適用できないが,ユースケース記述やシーケンス図を描いてみるのは,ある意味,動的なアプローチ.

コールグラフ 水平型トレースのための静的技術. 要は関数やメソッドの呼び出し関係を明確にする. 呼び出し関係がある関数間には,変更の波及がある場合が多いため. コールグラフを作成するツールもある. doxygen 描画には graphviz を用いる

プロファイラ プログラムの実行時の情報を収集するツール. 本来はパフォーマンスの向上のための情報等を集めるために使われる. ちょっとしたプログラムでも長大なデータになる. コレも水平方向のトレースに役立つ.

例 hprofの出力例 C:\> java -agentlib:hprof -jar Run.jar スレッドのところでやった生産者・消費者問題 数秒動かしただけで,7万行の情報を出力. TRACE 302139: java.awt.Component.<init>(<Unknown Source>:Unknown line) java.awt.Label.<init>(<Unknown Source>:Unknown line) TabacoSale.init(TabacoSale.java:29) TabacoSale.main(TabacoSale.java:66) TRACE 302140: IntLabel.<init>(IntLabel.java:5) TabacoSale.init(TabacoSale.java:32) TRACE 302141: java.lang.Thread.<init>(<Unknown Source>:Unknown line) LabelUpdater.<init>(LabelUpdater.java:8) Customer.<init>(Customer.java:3)

垂直の例と技術 まだ気軽に使えるツールはあまり無い. 情報検索 同義語の解決 ソースだけでなく,文書解析をしないといけないため. 文書の出現語句に基づき,トレースをとる. 同義語の解決 「言い回し」の違いの吸収. 辞書(オントロジー)の利用

我々の取り組み Former Engineer(s) Req. Change Document Validating Clue(s) 1.1 Introduction ..... Validating Clue(s) .... channel .... ..... efficiently ... ... crypto ..... Codes 3.2 zzzz ...... channel .... .... sendrequest ... .... efficiently ... int eee(){ ........... } int sendrequest(){ ................ } First queries int bbb(){ ........... } Second queries 5.4 yyy ................... int ccc(){ ........... } int ddd(){ ........... } int aaa(){ .......... initcomm= .... } 7.5 xxxx ..... crypto ..... ... initcomm .... Stakeholder(s)

要求変更を特徴付けるには? 索引付けの利用 Req. Change Document 1.1 Introduction .. bus ... .... channel .... ..... efficiently ... ... crypto ..... 3.2 zzzz ...... channel .... .... sendrequest ... .... efficiently ... First queries 5.4 yyy .........secure ....... Indexing Module Candidate of First Queries 7.5 xxxx ..... crypto ..... ... initcomm .... e.g. "bus, secure ...." Stakeholder(s)

画面例 変更要求を特徴付けるキーワードを見つけるための支援. 候補となる索引単語を提示する方法.

機械学習の利用による変更の可能性がある箇所の予測 Former Engineer(s) Yes No Validating Clue(s) Training Codes int eee(){ ........... } Machine Learning Module int sendrequest(){ ................ } int bbb(){ ........... } Second queries int ccc(){ ........... } int ddd(){ ........... } int aaa(){ .......... initcomm= .... } Classifying positive negative int aaa() ...... int bbb() int ccc() int ddd() .....

変更波及の可視化 コールグラフと共有変数の利用 Codes Call Graph and Shared Variables Analysis Module int eee(){ ........... } int sendrequest(){ ................ } int bbb(){ ........... } Second queries int ccc(){ ........... } int ddd(){ ........... } int aaa(){ .......... initcomm= .... } indirectly impacted int ddd() ....

画面例 シード関数を起点 影響値が大きい関数ほど赤に近い色で表現され,小さい関数ほど黄に近い色を示す. 「関数の呼び出し関係」+0.5 「共有変数による関係」+0.75 影響値が大きい関数ほど赤に近い色で表現され,小さい関数ほど黄に近い色を示す.

インパクト分析ツール Jripples Eclipse上で変更波及の分析(インパクト分析)を行うツール. Wayne State Univ. (ミシガンの大学らしい)で開発された. 演習で行う小規模なプログラム開発では,あまりピンと来ないが,クラスの数が数百,数千のプログラムでの分析に有効. 基本的に対話的にインパクトを探すツール.

インストールと使い方 基本的に公式HP参照 http://jripples.sourceforge.net/

三つの主要概念 Concept Location Impact Analysis Change Propagation ソース中で変更に最初にインパクトがある部分を見つける作業. Impact Analysis 最初のインパクトから波及してインパクトを受ける部分を探す作業. Change Propagation 変更波及の実現によって,整合性がとれなくなった部分を探す作業.

TIPS Configuration において,Relaxed を指定すること. そうしないと,mainメソッドからしか辿れなくなる. Impactedをクラスやメソッドにマーキングして,変更の種を植え付け,その波及箇所を予測するのに使う.

画面例