ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

ソフトウェアメトリクスとその関連分野の研究動向について

2013-11-01 18:36:54 | トピックス
KBSEで上記表題の内容を「あまん先生」から聞いてきたので、メモメモ




■ソフトウェアメトリクスとは
・ソフトウェアメトリクス
 ソフトウェアに関する品質属性を定量化する尺度
・単にメトリクスとも呼ばれる
 (信学会ではメトリックス)

例1:コード行数(LOC)
・ソースコードの行数であることを強調してSLOC
・プログラムの規模(長さ)を定量化
・単純ではあるが、もっともポピュラーなメトリクス
・バグの潜在性との関係も深い

例2:サイクロマチック数
 フローチャート上の一時独立な経路図
 条件分岐の数+1で算出可能
・プログラムの制御フローの複雑さを定量化
・古典的ではあるが、現在でも有効なメトリクス
 (1976年の第2回ICSEですでに発表)
 この値が7~10を超えると要注意

例3:過去のバグ修正回数
・バグ修正回数
 リポジトリに記録されているソースコードの変更の中で
 バグ修正に関するものの回数
・過去にバグ修正が多き行われたソースファイルでは
 再びバグ修正が行われることが多い
・経過時間に応じて重み付け
 Google Bugspots

測定の対象
・プロダクト(成果物)
  ・ソースコード
  ・設計(UMLクラス図)
・プロセス
  ・コード修正履歴、バグ修正履歴、
  ・レビュー活動
・リソース
  ・開発者
  ・プロジェクト

メトリクスの利点
・明確でわかりやすい
  ソフトウェア、あるいはその開発に関する属性情報
  が定量化(多くの場合は数値化)される
・分析しやすい
  統計処理といった分析がやりやすく、
  その種の結果は多くの人に受け入れられやすい

その裏で注意すべきこと
・数字だけが一人歩きしてしまわないように!
・いったん数値化されると、その数値だけをみて判断
 するようになってしまいがちである
  ・それで適切な場合もあれば、不適切な場合もある
  ・何をどうやって数値化した結果なのかという情報を
   考慮に入れなければいけない

注意すべき例
・100点満点で採点しようとする

例えば
 変数x=コード行数
 変数y=サイクロマチック
 変数Z=・・・
・得点=f(x、y、z)→77点??

数字だから計算してよい?
 数値化されると、あれこれと計算できてしまうところにも
 注意点がある

・例えば、ソフトウェアの話ではないが
 単なる項目での順位を足した数に意味があるだろうか
 大学の成績評価で使われるGPAは万能な成績評価値だろうか

堅い話ですが・・尺度水準
・名義尺度:ラベル付けを行う
・順序尺度:順序をあらわす
・間隔尺度:データ間の差と順序
・比率(比例)尺度:ゼロ点からの距離
データ同士の加減乗除で統計的に意味があるのは比率尺度のみ

測定法、測定条件にも注意
・身長を測る

ソースコード行数の測定で言えば
 Cで200行
   コメントは
   空行は
   マクロは
   インクルードは
   括弧のスタイルは

細かいことだが、その後の分析に影響
・条件が異なれば、データの質も異なってしまい、
 他での分析結果が参考にならない
・(落とし穴)
 コード行数という誰でも直感的にイメージできる
 データだからこそ、測定条件にあまり意識が行かない
 場合もある
・欠陥数といった場合も同様

■これまでの代表的な研究
・バグの潜在が疑わしいモジュールを絞り込む
   フォールトプローン
・設計やコーディングに対するガイドラインを提供する
   90年代
・対象ソフトウェアの信頼性を評価・予測する
・プロジェクトの開発工数を見積もる

McCabeのサイクロマチック数
・プログラム言語に依存しない
・7~10を超えないように→バグの見落とし

Halsted(はるすれっど)のソフトウェアサイエンス理論
書籍:
・プログラムの持つ情報量や保守・理解の難度を定量化する理論
  プログラムをオペレーターとオペランドの系列ととらえる
  全部でN種登場→log2N→情報量nlog2N

Chidamber&Kemerer(CK)メトリクス
・代表的なオブジェクト指向のメトリクス
・6種類のメトリクス

Lorenz&Kiddメトリクス
書籍
・オブジェクト指向でのソフトウェア開発について
・経験的な閾値も

ソフトウェア信頼度成長モデル
経験モデル:ゴンペルツ、ワイブル曲線
・確率過程モデル:非同次ポアソン過程モデル(NHPP)
  期待値が関数になっている

工数みつもり
・全工程を見積もる
 古くはCOCOMO,COCOMO2
 最近は重回帰モデル
 多くは対数変換

メトリクスそのものの性質を研究
(例)凝集度メトリクスが満たすべき条件

■エンピリカルアプローチの活性化
・メトリクスを提案、議論~2000年代前半
  90年代がピーク?
 メトリクスがどのように使えるかを実データで

・エンピリカルアプローチ
  実証データや実績データをより重視

大まかな流れ
1.実証データ収集
2.モデル化
3.モデルや法則の有効性

データ環境を取り巻く環境の変化
・90年代まで
 データ収集は高い壁
・1998年Netscapeがソース公開
  →オープンソースが広く認知
・オープンソースソフトウェアの普及
・リポジトリの公開
・リポジトリマイニング

平行してデータ収集・整理を後押し
・ツールの普及
・DB

メトリクスデータの公開
 NASA IV&V
 PROMISE データリポジトリ

IPA/SECがソフトウエア開発プロジェクトのデータを国内の企業から収集
査読で通っているのは、実データ使っている

データ分析ツール
・Excelも悪くないが
・R

よく使われる手法
 相関
 回帰
 分散分析
 差の検定
 人工知能:データマイニング

MSR(マイニングソフトウェアリポジトリ)
・データ指向の研究(最近の動向を含む)

SPAMフィルタの応用
  ベイジアンフィルタ

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

エンコーディングやエスケープはどこで行うか?

2013-11-01 12:28:40 | トピックス
インジェクションを防ぐために、文字をエスケープしたり
コード変換、エンコーディングしたりすることがあるが、
これは、どこで行って、どこでエスケープ等をはずすか?




出力の直前でエスケープ、エンコーディングし、
入力の直後で、エスケープ、エンコーディングをはずす。

Javaもそうなっている
(InputStreamReader,OutputStreamWriter)
エスケープ、エンコーディング、文字コード変換などは、
OSIのプレゼンテーション層に相当する。
なので、OSIのセッション層に相当する、ファイル、DBなどの
入出力の次の段階として行い、
このあと、アプリケーションで操作(比較など)を行う。




こうしないと、入出力のメディアによって、
エスケープすべき文字が違うようなとき、
わけがわからなくなる。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

14歳少女、Facebookで誕生日会の告知→200人が押し寄せ暴徒化、家の被害額470万円に

2013-11-01 09:13:00 | Weblog
高校の情報の授業で、ソーシャルメディアの使い方を教えるとき、
こういうことも、教えないといけないのかもしれません・・・


14歳少女、Facebookで誕生日会の告知→200人が押し寄せ暴徒化、家の被害額470万円に
http://blog.livedoor.jp/dqnplus/archives/1778934.html



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする