33

私は最近、ソフトウェア開発メトリックについて、特に開発チームの作業を改善するために適度に大規模な組織でそれらをどのように使用できるかについて、いくつかの興味深い会話をしました。このように、どのメトリックを使用するのが適切かについて、Stack Overflowの質問があることは知っていますが、私の質問は、どのメトリックがどの利害関係者にとって有用であり、どのレベルの集計で役立つかについてです。

例として、私の見解では、コードカバレッジは次の方法(およびおそらく他の方法)で有用なメトリックです。

  • 他の測定値と組み合わせた場合のチーム自身の内部使用。
  • チームを促進/有効化/メンタリングする場合、チームごとにトレンドとして考えると有益かもしれません(たとえば、チームAとBが今月75と50のカバレッジを持っている場合、私はチームにもっと関心があります前月が80と40だった場合はBよりもA)。
  • 多数のチームまたは部門全体にわたる集計統計として提示される場合の上級管理職向け。

しかし、これをチームごとに確認することは、上級管理職にとって有用ではないと思います。これは、コードをテストするのではなく、単に実行するテストでカバレッジを強化するための巧妙な試みを促進するためです。

私は管理階層にいくつかのレベルがある組織にいますが、マネージャーの大多数は技術的に気があり、能力があります(多くの人はまだ手を汚しています)。一部の開発チームはアジャイル開発プラクティスに向けて前進する道をリードしていますが、他のチームは遅れており、これが組織の仕組みであるという重大な使命が今や上からあります。私たちのカップルは、これを奨励するためのプログラムを開始しています。この種の組織では、どのような種類のメトリックが、誰にとって、なぜ、そしてどのレベルの集約で役立つと思いますか?

人為的に影響を与える可能性のある指標に基づいてパフォーマンスが評価されていると人々に感じてほしくない。同時に、上級管理職は、進歩が見られるという何らかの証拠を求めています。自分の組織での経験に基づいて、どのようなアドバイスや警告を提供できますか?

編集

個人のパフォーマンス測定のツールとしてではなく、組織の改善のためのツールとしてメトリックを使用したいと考えています。

4

10 に答える 10

47

個人的な経験からの物語。 長さについてお詫び申し上げます。

数年前、私たちの開発グループは、個人やチームリーダーに「適切な」測定可能な目標を設定しようとしました。ハードメトリクスは個々の目的に対して実際にはうまく機能しなかったため、実験はわずか1年間続きました(いくつかのリンクと詳細な説明については、このテーマに関する私の質問を参照してください)。

私はチームリーダーであり、技術上司や他のチームリーダーと一緒にすべての計画に携わっていたため、目的は無知な上級管理職によって上から指示されたものではありませんでした。 。ボーナス構造が開発者間の競争を不注意に助長したことも注目に値します。これが私たちが試したことについての私の観察です。

顧客に見える問題

私たちの場合、お客様に提供したサービスの停止をカウントしました。シュリンクラップ製品では、顧客から報告されたバグの数である可能性があります。

利点:これは、上級管理職に見える唯一の実際の指標でした。それはまた、開発グループの外で測定された、最も客観的なものでした。

短所:停止はそれほど多くなく、開発者ごとに1年間で約1回でした。つまり、目的を達成できなかったり超えたりすることは、各チームで発生したいくつかの停止の「責任の所在」の問題でした。これは悪い感情と士気の喪失につながりました。

完了した作業の量

利点:これが唯一の前向きな手段でした。それ以外はすべて「悪いことが起こったときに気づく」で、意気消沈していました。それがなければ、一年中何もしなかった開発者は他のすべての目的を超え、明らかに会社の利益にはならないので、それを含めることも必要でした。完了した作業量を測定することで、タスクサイズを見積もる際の開発者の自然な楽観性を確認できました。これは役に立ちました。

短所:「完了した作業」の測定は、開発者自身によって提供された見積もりに基づいていましたが(通常は良いことです)、それを目的の一部にすることで、システムのゲームで見積もりを膨らませることができました。他に実行可能な作業の測定は完了していません。生産性を測定するための唯一の可能な価値のある方法は「会社の収益への影響」だと思いますが、ほとんどの開発者は直接販売から遠く離れているため、これが個人レベルで実用的であることはめったにありません。

新しい製品コードで見つかった欠陥

昨年のバグは今年の目標ではどの個人にもカウントされるべきではないと感じられたため、この年の間に新しい製品コードに導入された欠陥を測定しました。内部品質チームによって発見された欠陥は、顧客に影響を与えなかったとしても、カウントに含まれていました。

利点:驚くほど少ない。欠陥の導入から発見までのタイムラグは、コードの品質を改善するための即時のフィードバックメカニズムが実際にはなかったことを意味しました。チームレベルでのマクロトレンドはより有用でした。

短所:この目的は欠陥が見つかったときにのみ呼び出され、誰かがそれを非難する必要があったため、ネガティブに重点が置かれました。開発者は自分たちが見つけた欠陥を記録することに消極的であり、単純なカウントは、マイナーなバグが深刻な問題と同じくらいひどいことを意味しました。個人あたりの欠陥の数はまだ非常に少ないため、より大きなサンプルの場合のように、軽微な欠陥と重大な欠陥の数は均等になりませんでした。古い欠陥は含まれていなかったため、コード品質に対するグループの評判(見つかったすべてのバグに基づく)は、今年導入された測定可能な数と必ずしも一致しませんでした。

プロジェクト実施の適時性

適時性は、定められた期限までに社内のQAチームに提供された作業の割合として測定しました。

利点:欠陥のカウントとは異なり、これは開発者が作業の完了時期を効果的に決定するため、開発者が即座に直接管理する手段でした。目的の存在は、タスクを完了することに心を集中させました。これにより、チームは現実的な量の作業に取り組むことができ、開発グループが約束を果たす能力についての内部顧客の認識が向上しました。

短所:開発者の直接の管理下にある唯一の目的として、コードの品質を犠牲にして最大化されました。締め切りの日に、タスクが完了したと言うか、品質の信頼性を向上させるためにさらにテストを行うかを選択できます。開発者はそれを完了としてマークすることを選択し、結果として生じるバグが表面化しないことを望みます。

社内のお客様からの苦情

開発者がソフトウェアの開発およびその後のサポート中に内部顧客とどの程度コミュニケーションをとったかを評価するために、各個人について受け取った苦情の数を記録することにしました。不満はマネージャーによって検証され、有罪判決の可能性を回避します。

利点:本当に何も思い出せません。十分に大きなグループレベルで測定すると、より有用な「顧客満足度」スコアになります。

短所:非常に否定的であるだけでなく、主観的な尺度でもあります。他の目的と同様に、各個人の数はゼロ点付近でした。つまり、誰かについての1つのコメントは、「無限に超えた」と「満たさなかった」の違いを意味する可能性があります。

一般的なコメント

官僚主義:私たちのタスク管理ツールはこれらのメトリックのデータの多くを保持していましたが、それでもすべてを照合するためにかなりの手作業が必要でした。すべての数字を取得するのに費やした時間は楽しくなく、一般的に私たちの仕事のネガティブな側面に焦点を当てており、生産性の向上によって回収されなかった可能性もあります。

士気:個人が問題のせいにされた対策については、「悪い」スコアの人は意気消沈したと感じただけでなく、「良い」スコアの人もチームの士気の低下を嫌い、時にはそう感じたので、上位にランクされたのは、彼らが優れていたからではなく、幸運だったからです。

概要

では、エピソードから何を学びましたか?後年、私たちはいくつかのアイデアを再利用しようとしましたが、「よりソフトな」方法で、個人の責任をあまり重視せず、チームの改善を重視していました。

  • 客観的に測定可能で、会社に付加価値を与え、ゲーム化できない個々の開発者の目標を定義することは不可能です。したがって、わざわざ試してはいけません。
  • 欠陥の場所が明確にそのチームの責任である場合、つまり、「非難ゲーム」をプレイする必要がない場合、顧客の問題と欠陥はより広いチームレベルで数えることができます。
  • コードモジュールの責任レベルでのみ欠陥を測定すると、すべての欠陥を排除することがそのグループの利益になるため、古いバグと新しいバグを測定できます(そして測定する必要があります)。
  • グループレベルで欠陥数を測定すると、グループあたりのサンプルサイズが増えるため、軽微な欠陥と重大な欠陥の間の異常が滑らかになり、単純な「バグ数」の測定は、月ごとに改善しているかどうかを確認するなどの意味があります。月。
  • 彼らを幸せに保つことが開発グループとしてのあなたの主な目的であるため、上級管理職が気にかけていることを含めてください。私たちの場合、それは顧客に見える停止だったので、測定が時々恣意的または一見不公平であるとしても、それが上司が測定しているものである場合は、あなたも注意する必要があります。
  • 上級管理職は、自分の目的にない指標を確認する必要はありません。このようにして、エラーについて個人を非難する誘惑を回避します。
  • プロジェクトの提供の適時性を測定することで、開発者の行動変わり、タスクの完了に重点が置かれました。それは見積もりを改善し、グループが現実的な約束をすることを可能にしました。適時性に関する情報を簡単に収集できる場合は、チームレベルで再度使用して、時間の経過に伴う改善を測定することを検討します。

個々の開発者に測定可能な目標を設定する必要がある場合、これらすべては役に立ちませんが、アイデアがチームの改善に役立つことを願っています。

于 2010-01-13T15:06:36.827 に答える
19

メトリックに関する重要なことは、メトリックを何に使用しているかを知ることです。改善の道具、報酬の道具、罰の道具などとして使っていますか?改善の道具として使うつもりのようです。

メトリックを設定する際の最も重要な原則は、情報を受け取った人がそれを使用して意思決定できるように、関連性のある情報を保持することです。ほとんどの場合、上級管理職は、より多くのテストや複雑さの軽減などが必要かどうかのミクロレベルを指示できません。しかし、チームリーダーはそれを行うことができます。

したがって、コードカバレッジの測定値が、個々のチームを超えた管理に役立つとは思いません。マクロレベルでは、組織はおそらく次のことに関心があります。

  • 配送料
  • 配達の適時性
  • 納品範囲と外部品質

内部の品質は、カバーするもののリストで高くなることはありません。内部品質(保守性、テストカバレッジ、自己文書化コードなど)が他の3つを達成するための重要な要素であることを明確にすることが、開発チームの使命です。

したがって、次のような3つをカバーするより多くの上級管理職にメトリックをターゲティングする必要があります。

  • 全体的な速度(チーム間の速度の比較は人為的なものであることが多いことに注意してください)
  • 合意されたタイムラインに配信される期待範囲と実際の範囲
  • 生産上の欠陥の数(おそらく一人当たり)

また、コードカバレッジ、コードの複雑さ、カット'n'貼り付けスコア(flayなどを使用したコードの繰り返し)、メソッドの長さなど、情報の受信者が実際に違いを生むことができるチームレベルで測定します。

于 2010-01-06T20:35:42.213 に答える
4

メトリックは、プロジェクト、チーム、または会社に関する質問に答える方法です。答えを探し始める前に、どのような質問をしたいかを決める必要があります。

典型的な質問は次のとおりです。

  • 私たちのコードの品質は何ですか?

  • 品質は時間の経過とともに向上または低下していますか?

  • チームの生産性はどれくらいですか?それは改善していますか、それとも劣化していますか?

  • 私たちのテストはどれくらい効果的ですか?

  • ...等々。

各質問に答えるには、異なる一連のメトリックが必要になります。回答したい質問を知らずにメトリックを収集することは、せいぜい時間の無駄であり、最悪の場合は逆効果です。

また、「不確定性原理」が機能していることにも注意する必要があります。非常に注意しない限り、メトリックを収集する行為は、多くの場合予期しない、時には有害な方法で人々の行動を変えることになります。これは特に、メトリクスで評価されていると人々が信じている場合、またはさらに悪いことに、メトリクスが何らかの報酬または罰のスキームに関連付けられている場合に当てはまります。

GeraldWeinbergのQualitySoftwareManagement Vol 2: FirstOrderMeasurementを読むことをお勧めします。彼はソフトウェアメトリクスについて多くの詳細を説明しますが、最も重要なのはしばしば彼が「ゼロオーダー測定」と呼ぶものであると言います-プロジェクトがどのように進んでいるかについて人々に意見を求めます。シリーズの4巻はすべて高価で入手が困難ですが、それだけの価値はあります。

于 2010-01-12T08:48:27.497 に答える
4

ソフトウェアライティング

  • 何を最適化する必要がありますか?

CPUの使用、メモリの使用、メモリキャッシュの使用、ユーザー時間の使用、実行時のコードサイズ、実行時のデータサイズ、グラフィックスパフォーマンス、ファイルアクセスパフォーマンス、ネットワークアクセスパフォーマンス、帯域幅の使用、コードの簡潔さと読みやすさ、電力使用量、使用された個別のAPI呼び出し(の数)、使用された個別のメソッドとアルゴリズムの(数)、おそらくそれ以上。

  • どのくらい最適化する必要がありますか?

受け入れテストに合格し、保守を容易にし、監査を容易にし、ユーザーの要件を満たすために必要な最小限の妥当な量(受け入れテスト基準を超えることが望ましい領域を除く)を最適化する必要があります。

(「...現在および将来のすべてのテスト統合シナリオのすべての必要なテストデータボリュームおよびテスト要求ボリュームでのすべてのテスト状態での合法/違法な入力テストデータおよび合法/違法なテストイベントの場合。」)

  • なぜ最小の合理的な量ですか?

最適化されたコードは書くのが難しく、コストもかかるからです。

  • どのようなリーダーシップが必要ですか?

コーディング標準、基本構造、受け入れ基準、および必要な最適化のレベルに関するガイダンス。

ソフトウェア作成の成功はどのように測定できますか?

  • 費用
  • 時間
  • 検収試験に合格
  • 超えることが望ましい受け入れテストの範囲を超える
  • ユーザーの承認
  • メンテナンスのしやすさ
  • 監査のしやすさ
  • 過度の最適化の欠如の程度

プログラマーの総合的なパフォーマンスを評価する際に無視すべきコスト/時間はどれくらいですか?

  • 要件(アーキテクチャを含む)の変更により発生した無駄なコスト/時間
  • プラットフォーム/ツールの欠陥のために発生した追加のコスト/時間

ただし、このコスト/時間は、チーム(アーキテクト、マネージャーを含む)の総合的なパフォーマンスの評価に含める必要があります。

建築家の成功はどのように測定できますか?

その他の対策プラス:

  • プラットフォーム/ツールの欠陥によって影響を受ける「早期回避」のインスタンス
  • アーキテクチャに変更がない程度
于 2010-01-13T00:22:54.130 に答える
2

「コードメトリックの魅力は何ですか?」で述べたように。、メトリックには次のものが含まれます。

  • 異なる母集団、つまり、関心の範囲が開発者と管理者で同じではないことを意味します
  • メトリックを意味するトレンドは、それに基づいて行動するか無視するかを決定するために、関連するトレンドがなければ意味がありません

私たちは以下を提供できるツールを使用しています:

  • トレンドを伴う、多くのマイクロレベルのメトリック(開発者にとって興味深い)。
  • マルチレベル(UI、データ、コード)の静的分析機能を備えた多くのルール
  • 多くの集計ルール(これらの膨大な数のメトリックが、より高いレベルの母集団に適した、関心のあるいくつかのドメインに凝縮されていることを意味します)

その結果、高レベルの集約ドメイン(セキュリティ、アーキテクチャ、プラクティス、ドキュメントなど)からコード行までドリルダウンできる分析が得られます。

現在のフィードバックは次のとおりです。

  • 一部のルールが尊重されない場合、プロジェクトマネージャーは非常に迅速に防御を開始し、グローバルノートを大幅に低くすることができます。
    各プロジェクトの癖を尊重するために、各調査を再調整する必要があります。
    利点は、例外は認められているが、尊重されるべきルールが定義されている契約の定義です。
  • 上位レベル(IT部門、利害関係者)は、進捗状況の評価の1つの要素として、グローバルノートを使用します。
    彼らは実際に、配信サイクルに基づいて他の要素をより詳しく調べます。アプリケーションを反復して本番環境に移行できる頻度、リリース前に解決しなければならなかったエラーの数などです。(マージの観点から、または本番環境が正しくセットアップされていないという観点から)、アプリケーションの新しいリリースによってどのような即時フィードバックが生成されますか?

それで:

どのメトリックがどの利害関係者に役立ち、どのレベルの集計で役立つか

高レベルで:

  • (静的分析)メトリックは、実際には低レベルのメトリック集約の結果であり、ドメインごとに編成されています。
  • 他のメトリック(コードの静的分析だけでなく、アプリケーションのリリースサイクルに基づく、より「運用指向」 )が考慮されます。
  • 実際のROIは、他のアクション(シックスシグマ研究など)によって達成されます。

下位レベル:

  • 静的分析で十分です(ただし、マルチレベルの層のアプリケーションを網羅する必要があり、場合によっては複数の言語が開発されます)
  • アクションはトレンドと重要性によってパイロットされます
  • 調査は、受け入れ/実行されるすべてのレベルの階層によって承認/サポートされる必要があります(特に、その後のリファクタリングの予算を検証する必要があります)
于 2010-01-11T08:36:39.240 に答える
2

リーンのバックグラウンド/知識がある場合は、メアリーポッペンディークが推奨するシステムをお勧めします(この前の回答ですでに述べました)。このシステムは、パッケージとして取得する必要がある3つの全体的な測定に基づいています。

  1. サイクルタイム
    • 製品コンセプトから最初のリリースまで、または
    • 機能の要求から機能の展開まで、または
    • バグ検出から解決まで
  2. ビジネスケースの実現(これがなければ、他のすべては無関係です
    • P&Lまたは
    • ROIまたは
    • 投資の目標
  3. 顧客満足

集計レベルは製品/プロジェクトレベルであり、これらのメトリックはすべての人に役立つと思います(開発者は、楽しみのためにコードを記述しないことを決して忘れてはなりません。価値を生み出すためのコードを記述し、常にそれを念頭に置く必要があります)。

チームは、技術的指標を使用して、完了の定義に統合されている品質基準の適合性を測定できます(「技術的負債の増加なし」として)。しかし、高品質はそれ自体が目的ではありません。それは、(ビジネスケースの実現と顧客満足を伴う)真の目標である短いサイクルタイム(速い会社になる)を達成するための手段にすぎません。

于 2010-01-12T00:05:19.040 に答える
2

これはメインの質問に対するちょっとした補足ですが、私は上記のPaulStephensonsの回答と非常によく似た経験をしました。これに追加することの1つは、データの収集とメトリックの可視性についてです。

私たちの場合、開発ディレクターは、さまざまな異種システムからの大量のデータを照合し、月に1回個々のメトリック結果を配布することを目的としていました。それは時間のかかる仕事であり、彼は忙しい人だったので、これはしばしば起こりませんでした。

この結果は次のとおりです。

  1. パフォーマンスボーナスはメトリックに基づいており、人々は彼らがどのように進んでいるかを知らなかったので、不幸な開発者。

  2. さまざまな異なるシステムへのデータの複数の入力に時間がかかる場合があります。

このルートをたどる場合は、すべてのメトリックデータを自動的に照合でき、影響を受けるデータを簡単に確認できるようにする必要があります。

于 2010-01-14T12:16:18.607 に答える
1

ソフトウェアメトリクスは長い間使用されてきましたが、これまでのところ、開発中にプロジェクトを導くことができる個別または全体として出現したものは何もありません。問題の要点は、客観的な測定値を使用したいということです。これらは、何が起こっているか、またはこれから起こるかではなく、何が起こったかを測定することしかできません。

いくつかの一連のメトリックを測定、分析、および解釈するまでに、すでに間違っている、またはごくまれに正しくなっていることに反応しています。客観的な指標から学ぶことの重要性を軽視したくはありませんが、これは積極的な対応ではなく、反応的な対応であることを指摘したいと思います。

「信頼度指数」を作成することは、プロジェクトが順調に進んでいるか、問題に向かっているかを監視するためのより良い方法かもしれません。関心のある各プロジェクト領域からの妥当な数の代表者が時々匿名で彼らの信頼を投票するように求められる投票システムを開発してみてください。自信は2つの分野で投票されます:1)物事は順調に進んでいます2)物事は順調に進んでいるか、順調に戻っています。これらは、「行動」に最も近い人々からの純粋に主観的な測定値です。結果をかんばんタイプのグラフにフィードします。このグラフでは、列が投票領域を表しており、どこに注意を向けるべきかについてかなり良いアイデアが得られるはずです。質問1を使用して、経営陣が前の投票サイクルに適切に反応したかどうかを評価します。質問2を使用して、経営陣が次に焦点を当てるべき場所を特定します。

このアイデアは、私たち一人一人が自分の責任範囲内で快適なレベルを持っていることに基づいています。私たちの信頼水準は、経験、専門分野内の知識、直面している問題の数と重大度、タスクを完了するために必要な時間、作業している情報の品質、および全体の結果です。他の要因の。

MBWA(歩き回る管理)は、私たちが持っている最も効果的なツールの1つとしてよく宣伝されています。これは、そのバリエーションです。

このテクニックは、チームの一般的な気分を反映しているだけなので、個々のチームのレベルではあまり使用されません。誰かの時計を使って時間を知らせるようなものです。ただし、より高いレベルの管理では、非常に有益なはずです。

于 2010-01-13T17:38:12.120 に答える
1

現在いくつかの誇大宣伝を受けている興味深いアプローチの1つは、かんばんです。かなりアジャイルです。特に興味深いのは、「完了した作業」のメトリックを適用できることです。私はまだ実際にこれを使用/遭遇したことはありませんが、私の仕事でかんばんっぽい流れを実現するために努力したいと思います。

于 2010-01-08T20:47:56.117 に答える
1

興味深いことに、私はPeopleWareを読み終えたばかりであり、著者は個々の指標が上司(直属の上司でさえ)に見えるようにすることを強く推奨していませんが、その集計指標は非常に目に見えるはずです。

コード固有のメトリックに関しては、チームが現時点でのコードの状態を知り、コードが成熟して成長するにつれてコードに影響を与える傾向を知ることは良いことだと思います。

質問は明らかに.NETに焦点を当てていませんが、.NET製品のNDependは、有用な一般的なメトリックを定義および文書化するために多くの作業を行ったと思います。

メトリックに関するドキュメントのセクションは、.NETを使用していない場合でも、教育的な読み物です。

于 2010-01-13T03:13:52.983 に答える