« 2023年1月 | トップページ | 2023年4月 »

2023年2月

2023/02/18

ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart2~プロセスのレイヤと達成目標のレイヤが異なる

ストラテジストとプロジェクトマネージャの役割の違いは何なのか?
ITコーディネータ研修を経験して、IPAが定義するストラテジストとプロジェクトマネージャの役割の違いを自分なりに理解したことをメモ。
ラフなメモ書き。

【参考】
IPA 独立行政法人 情報処理推進機構:制度の概要:ITストラテジスト試験

IPA 独立行政法人 情報処理推進機構:制度の概要:プロジェクトマネージャ試験

【1】ストラテジストとプロジェクトマネージャでは、担当するプロセスのレイヤが異なる。

プロジェクトマネージャの担当領域は、個別プロジェクトのキックオフからリリースまでが一般的だ。
たとえば、SIerのプロジェクトマネージャであれば、請負契約でシステム開発を請け負っているはずだ。

一方、ストラテジストの担当領域は、複数のプロジェクトの内容が固まってRFPやプロジェクト計画書が完成するまでの企画フェーズと、プロジェクトが完了してリリースしたシステムが稼働した後の効果検証フェーズの2つだ。

たとえば、ユーザ企業の事業戦略に基づき、その事業を成功するためのシステムを構築したり、事業を支える業務を支援するシステムが必要になったとする。
事業の規模や業務の規模が大きければ、複数のシステムを構築する必要があるから、複数プロジェクトを並行で走らせる計画を作る。
そういう複数のプロジェクトではそれぞれ、どんなシステムが必要なのか、いつまでにシステムをリリースする必要があるか、を決める。
一般に企画フェーズで、事業戦略に基づくシステム化構想が練られることになる。

さらに、そのシステムをリリースした後、当初想定していた投資対効果が得られているか検証し、さらに改善していく必要がある。
それがリリース後の効果検証フェーズになる。

すなわち、ストラテジストの役割は、プロジェクトマネージャにプロジェクト計画書をお膳立てすることと、プロジェクトマネージャがリリースしたシステムが経営戦略の目標に合致しているか検証することになる。

ストラテジストはシステム化計画とシステムの効果測定だけであり、プロジェクトの実行フェーズはプロジェクトマネージャに委ねる。
よって、ストラテジストとプロジェクトマネージャの担当領域は明確に異なる。

【2】ストラテジストとプロジェクトマネージャでは、彼らの評価指標が明確に異なる。

プロジェクトマネージャは既に決められたQCDを元にリリースする責務がある。
たとえば、SIerのプロジェクトマネージャならば、ユーザ企業と握ったRFPを元に、初期投資予算、マスタスケジュール、体制図、システム要件が基本は確定した範囲内で、それを具体化してシステムとしてリリースする責務がある。
つまり、プロジェクトマネージャの評価指標は、当初決められたプロジェクトのQCDとの差異分析で決まる。

一方、ストラテジストは事業戦略に基づくシステムを構想したからには、そのシステムが事業に貢献したという投資対効果、つまりROIがストラテジストの評価指標になる。

たとえば、ユーザ企業が新規顧客を開拓するような新規事業を実行しようと決めて、ECサイトが必要になったと検討したとする。
ストラテジストは、そのECサイトは5カ年計画でどれだけの売上と営業利益を確保できるか、初期投資で数千万円や数億円をかけて投資してどれだけ売上を確保できるか、売上と営業利益のシミュレーションを計画する。
その売上を確保するには、ECサイトにはどんなシステム要件、業務用券が必要なのか、洗い出して確定する。
そして、そのECサイトの構築をプロジェクトマネージャに委ねてリリースしてもらった後、数ヶ月や数年をかけて、ECサイトの売上や利益を計測していく。
当初の計画と5カ年の実績の差異分析、つまり投資対効果がストラテジストの評価指標になる。

プロジェクトマネージャの評価指標がプロジェクトのQCDである事実より、プロジェクトマネージャへのプレッシャーはとても大きい。
しかし、ストラテジストの評価指標がシステムの投資対効果である事実を考えると、ストラテジストへのプレッシャーの方がはるかに大きいと思う。
なぜならば、プロジェクトマネージャの担当範囲は所詮、個別プロジェクトだけだが、ストラテジストの担当範囲は事業目標を達成するために平行に走らせるように計画された複数プロジェクトなのでとても広いからだ。

【3】ストラテジストとプロジェクトマネージャでは、利用するモデルや管理手法が明確に異なる。

プロジェクトマネージャは当初定められたプロジェクトのQCDを守るために、WBSとガントチャートによる進捗管理と課題管理が必須だろう。
もちろんそれ以外にも変更管理、品質管理など色々あるが、PJ管理手法のベースにはWBSとガントチャートがある。

一方、ストラテジストは、事業目標よりブレイクダウンされたシステムの投資対効果を達成するために、CSFとKGI、KPIのPDCA管理が必要になる。
事業目標を達成するために、BSCのように財務・顧客・業務・組織と人材の観点での中間目標(CSF)に分解したり、事業部内の各部署に業務分掌となる達成目標(CSF)が定められることになるだろう。

このCSFの考え方は、WBSみたいなものだ。

ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart1~CSFはWBSみたいなものと捉える: プログラマの思索

そして、CSFという中間目標を達成できたか否かを定量的に判断するために、KGI/KPIが必要になる。

たとえば、売上や利益の確保という財務レイヤの最終目標に対し、売上高や営業利益率というKGIが出てくる。
そのKGIを達成するには、顧客や市場の観点で、新規顧客獲得数や購買単価、顧客満足度などのKPIが出てくる。
たとえば、BtoCビジネスのECサイトで出てくるAARRRも該当するだろう。

それらを実現するためにさらに業務レイヤで、顧客訪問回数、受注獲得率、顧客提案回数、業務効率化につながる工数削減の度合い、作業時間の短縮度合いなどのKPIも出てくるだろう。
さらに、それらの業務を実行する人材や組織の観点で、有能な人材を示す専門資格者数、研修回数、社内教育、従業員エンゲージメント率などのKPIも出てくるだろう。

つまり、ストラテジストが計画した諸々のシステムは計画時点でそれらKGI/KPIの目標値が設定されて、リリースされたシステムが稼働している間、KGI/KPIをシステムで自動的に測定して、投資対効果を評価することになる。

【4】自分がJavaアプリ開発者だった頃、プロジェクトマネージャの仕事ぶりは実際に見ることができたから、彼らの役割や責務は想像することができた。
しかし、ストラテジストを実際に見かける機会はなかったから、彼の役割や責務を想像することは難しかった。

ストラテジストはユーザ企業の経営戦略や事業戦略をベースにシステム化構想を検討するので、MBAで出てくるような経営戦略ツールを使って、外部環境・内部環境分析を行い、経営課題やCSFを洗い出す技法が必要になる。
つまり、ストラテジストに求められるスキルには、経営課題を解決するためのシステムの骨格を生み出すためにシステムアーキテクトのスキルは必要な前提の上で、外部環境・内部環境分析と経営課題・CSFを確定するための経営戦略ツールも必要になってくる。

たとえば、外部環境分析なら5Fs, PEST分析、内部環境分析ならVRIO分析やバリューチェーンなどのフレームワークを使う。
たとえば、経営課題の抽出であれば、SWOT分析で各要素を洗い出した後、経営戦略の方向性や企業の制約条件を元にクロスSWOT分析から、あるべき姿という経営課題を洗い出す。
その経営課題をCSFへ置き換えたり因果関係にまとめてBSCに当てはめて、各レイヤや各部署のCSFとKGI/KPIに落とし込む。
そこから、どんなシステムが必要になるか、複数個のシステムを洗い出して、具体的なシステム化計画を策定していく。
たぶんそういう流れ。

よって、ストラテジストの所在はユーザ企業の経営層や経営企画部、事業企画部、情報システム部門の領域にある。
つまり、SIerの中の一人の開発者から見れば、ストラテジストははるか遠くのところに位置しているので、彼らの目に止まりにくい。

【5】しかし、アプリ開発の専門技術者とプロジェクトマネージャ、ストラテジストは役割が異なるだけであって、そこに優劣があるわけではない。

実際にシステムを構築するために、システムアーキテクト、ネットワークスペシャリスト、データベーススペシャリスト、エンベデッドスペシャリスト、セキュリティスペシャリストなどの各専門技術者も必要だ。
色んな専門スキルを持つ人達が集まって、彼らが一つのチームとして形成して初めて、一つのシステムのリリース、さらには事業目標が達成される。

現代のシステム開発は色んな領域の専門家集団が必要であり、彼らがチームとして成り立ち、協働することが必要になっているわけだ。

| | コメント (0)

プロジェクト管理やソフトウェアアーキテクチャの問題の背後にはトレードオフが隠れているのではないか

プロジェクト管理やソフトウェアアーキテクチャの問題の背後にはトレードオフが隠れているのではないか?

プロジェクトマネージャがシステム開発案件を切り盛りするのは正直大変だ。
どの案件もいつも新しい技術、新しい要件、初めての経験を求められるからだ。
プロジェクトマネージャの頭にはいつもQCDが念頭にある。
QCDという厳しい制約条件をいかに守り抜くか?

アーキテクトがリプレース案件、新規システム構築案件を担当して切り盛りするのは正直大変だ。
どの案件もいつも新しい技術、新しい要件、初めての経験を求められるからだ。
アーキテクトは安定したアーキテクチャが欲しい。
それがあれば、設計者はその安定した基盤上で安心して設計できる。
それがあれば、開発者はその安定した基盤上で安心して開発できる。

安定したアーキテクチャは6つの品質特性という制約条件を持つ。
アーキテクチャは品質特性という厳しい制約条件をいかに守り抜くか?

QCDや品質特性という制約条件は、実際にはトレードオフになりやすい。
どれか一つの要素を重視しすぎるとバランスを崩し、最終的なアウトプットの品質を悪化させる。
線形計画法のように、複数の要素を必要ではあるが十分な量をアサインしてバランスすることで、最適解を求める。

トレードオフがなければ、問題の本質にたどり着かないのではないか。
トレードオフを認識しなければ、バランスを崩すから。

トレードオフになる問題の構造は因果ループ図で書きやすい。
片方の要素が増えて良化すれば、もう片方の要素は減って悪化する。
つまり、トレードオフになる問題は、一つのシステム構造を持つ。

因果ループ図が教える所によれば、因果をループさせる要素を強化したり崩すことで、そのシステム構造を壊して別の変化をもたらすことができる。
つまり、トレードオフの問題構造はシステム構造としてモデル化されるが、そのモデルを故意に壊すことで別の変化をもたらし、新たなシステム構造を生み出す。

トレードオフの認識こそが問題解決の鍵になるはず。

| | コメント (0)

2023/02/14

ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart1~CSFはWBSみたいなものと捉える

経営戦略企画書やバランススコアカードに出てくるCSFとは一体何なのか?
CSFの使い道は何なのか?
ITコーディネータの先生に教わってようやく理解できた。
気づいたことをラフなメモ書き。

【1】CSFという言葉は知っていた。
CSFはCritical Success Factorの通り、目標達成の成功状態のことだ。
しかし、CSFはどんな時に必要なのか、CSFは何のために使うのか、腹落ちしていなかった。

経営戦略企画書において、バランススコアカードを作る時に、CSFはよく出てくる。
バランススコアカードでは、財務・顧客・内部プロセス・組織と成長のレイヤで、CSFや課題を因果関係や先行後続関係でつなげて戦略マップを作る。
たとえば、研修して人材を育成することで、営業や製造の体制が安定し、業務が効率化されたり、営業活動が活発になったりして、顧客満足度も上がり、原価も削減できて、最終的に売上拡大、利益増大を達成する。
そういうCSFの因果関係ができる。

【2】まず自分が勘違いしていた点は、CSFは成功状態であるから「~できる」という状態表現で書かれることだ。
なぜなら、目標が達成されて成功されたのだから、以前抱えていた問題は解決されて、達成「できた」という状態になるからだ。

一方、問題は「~できない」「~が難しい」という否定表現、課題は「~のために~する」という行動表現で書かれる。
どうやら自分は、経営課題とCSFを混同していたらしい。
本来は、問題に対し、経営課題が抽出されて、経営課題に対応するという対応策を実行すると、最終的に問題が解決されて、目標を達成できた、というCSFに結論付けられる。

他方、CSFは中間目標とも言われる。
最終的な経営目標に到達するためには、いくつかのマイルストーンをおいて、それらマイルストーンを全て通過して初めて最終ゴールに至る。
すなわち、CSFという中間目標は複数個存在するし、CSFの因果関係や前後関係が付けられることで、最終的なゴールへの道筋が明確になる。

すると、CSFの因果関係を元に、複数個のCSFをつなげて時系列に並べると、その図は経営戦略のロードマップになる。

【3】この考え方は、プロジェクト計画書におけるWBSとガントチャート関係と同じ。
WBSはプロジェクト実行に必要な作業全てであり、先行後続関係を付けて階層化された構造を持つ。
そのWBSは、時系列にマッピングさせればガントチャートになる。

同様に、CSFは経営目標を達成するための中間目標であるから、複数個のCSFには必ず因果関係が発生し、それは先行後続関係になる。
CSFの先行後続関係を時系列にマッピングさせれば、経営戦略のロードマップになる。
あるいは、経営戦略企画書のマスタスケジュールとして作られる。

【4】CSFは何のために使うのか?
CSFは経営戦略のロードマップを作成するために使われる。

経営戦略企画書に出てくるCSFは、プロジェクト計画書のWBSみたいなもの
プロジェクト計画書にあるWBSからガントチャートが作成されるように、経営戦略企画書のロードマップ、マスタスケジュールはCSFから作成される。

【5】そう考えると、バランススコアカードに出てくるKGI、KPIの考え方もスムーズにつながる。
なぜならば、経営戦略の最終目標に至る中間目標を達成できたのか、評価するために、KPIという業績評価指標を使って定量的に評価するわけだ。
CSFは「~できる」という状態表現でかかれるので、評価指標に落としやすい。

たとえば、「顧客満足度が上がっている」というCSFであれば、顧客満足度をアンケートで収集して採点して、以前と比較して上がっているかどうか評価すればいい。
「作業時間が短縮して業務を効率化できた」というCSFであれば、作業時間や作業工数を毎日記録して、該当の作業の時間が以前よりも減っているか測定すればいい。

そういう中間目標をブレイクダウンしていけば、組織や人材の観点のようにより低レベルな業務のKPIで測定するし、ドリルアップすることで顧客や市場、財務という観点のKPIが達成されて、最終的には経営目標であるKGIが達成される。

KPIやKGIという定量的な業績評価指標があるからこそ、毎月、四半期ごとに定点観測して業務プロセスを健康診断のように診断できる。
KPIが順調であれば問題ないが、KPIが落ちていれば、その原因を探り改善策を立てて、業務を見直していくことになる。
いわゆるPDCAが自然に行われることになる。

【6】CSFという概念を使いこなすことで、経営戦略のロードマップやマスタスケジュールが生成されて、KGIやKPIで定点観測して評価するという流れがベースにある。
この考え方は、プロジェクトマネージャよりもストラテジストと言われる立場で必要であると思う。

つまり、個別プロジェクトを切り盛りするプロジェクトマネージャではなく、より経営戦略に近い立場にいるストラテジストが常に考えているはずだから。

ストラテジストとプロジェクトマネージャの考え方の違い、役割の違いについては別で考察してみる。


| | コメント (0)

2023/02/11

デブサミ2023の感想

デブサミ2023の感想をラフなメモ。
自分用のメモ。

【参考】
Developers Summit 2023(2023.02.09-10)

DX、アジャイル、プロセス、テストなどを色々聞いた。
その中で僕が興味を惹いたのは、Rustとテスト自動化の2つの講演。

【1】RustはFirefox、Linux、Androidなどで使われ始めていると聞いたが詳細は知らなかった。

Rustは所有権の概念を持つ。
所有権とは束縛した変数みたいなもの。

Rustは一生コンパイルが通らないと言われる。
理由は、コンパイラが強いから。
そもそもプログラミングが難しい。
代入可能な変数かどうか所有権で決まる
所有権で解決する。
コンパイラが教えてくれる。

Resultはエラーハンドリング。Scalaにもある。
インターフェイスからエラーを返すか判断できる。

OptionはJavaのOptionalと同じ。
ScalaのOptionalみたいなものか。

enumはパターンマッチ。

traitはジェネリクス関数をシュッとしてくれる。
ScalaのTraitと同じ。

「なんでもかんでもclone()をつけたくなってしまいます、どうしたらいいですか?」という質問に対して、Cloneで妥協していい。
Cloneせずにコーディングすればメモリを小さくできるが、コーディングが難しい、と回答があった。

僕はRustはC言語の代わりとなる低級プログラミング言語と誤解していた。
しかし、こういうRustの話を聞くと、C言語のように扱える関数型プログラミング言語と見なした方が良いと思った。

【2】テスト自動化では、今はE2EテストがAIによって更に加速している。
画像の物体認識、画像処理のディープラーニングを使って、画面UIをテストする方向に進化しているらしい。
しかし、OCRのような、画面の文字認識の精度が低いらしい。
むしろ、テスト後に画面変更をAIが検知して、テストプログラムを自動修正する方向に進化しているらしい。

AIをテストに利用する発想がよく分かっていなかったが、AIが物体認識や画像処理に特化している強みを生かすことで、UIテストを強化しているのは面白い。

| | コメント (0)

2023/02/01

ChatGPTにEclipseでEclEmmaとJaCoCoからカバレッジを出力する方法を聞いた

15年以上前にEclipseでdjunitでカバレッジを出力していろいろ試していた。

dJUnitでカバレッジテスト: プログラマの思索

しかし、今のEclipseではdjunitはもう使えなくなっていた。
ChatGPTに聞いたら、代わりにEclipseでEclEmmaとJaCoCoからカバレッジを出力する方法がわかったのでメモ。

【参考】
EclEmma - Java Code Coverage for Eclipse

EclEmma - JaCoCo Java Code Coverage Library

EclEmma - Source Code Annotation

ブログエンジン(5) Maven+JaCoCoでカバレッジ計測 - afnf.net

WildFly+jacocoでintegration-testのカバレッジ取得 - Qiita

カバレッジレポートの出し方について書く ・ Issue #10 ・ syobochim/doc

JaCoCo - Command Line Interface

複雑度と単体テストケース数の相関関係: プログラマの思索

【前提条件】
Eclipseの実行メニューに「カバレッジ>Junit」が表示される前提とする。
表示できていれば、EclipseにEclEmma プラグインがインストールされている。
最新版のEclipseであれば既にインストール済み。

Eclipseにカバレッジ・ビューを表示するように設定するには、ウィンドウ>ビューの表示>その他 から、java>カバレッジを 選択して画面下部に表示するように設定する。

JaCoCo のZipファイルをダウンロードしておく。

EclEmma - JaCoCo Java Code Coverage Library

【EclipseにJacocoを設定する方法】
この手順書は、ChatGPTに質問して作成した。

EclipseにJacocoを設定する方法は次のようになります。

Eclipseで、JaCoCoを使用するプロジェクトを選択します。

[Run] -> [Run Configurations...]を選択し、「JUnit」に対して新しい設定を作成します。

「Arguments」タブで、「VM arguments」欄に「-javaagent:path/to/jacocoagent.jar=destfile=path/to/jacoco.exec」を追加します。

path/to/jacocoagent.jarは、JaCoCoがインストールされている場所に置き換えてください。
path/to/jacoco.execは、JaCoCoのエグゼキューションファイルを出力する場所を指定します。
「Apply」をクリックし、「Run」をクリックして、テストを実行します。

実行が終了したら、「Coverage」ビューを開き、カバレッジ結果を確認します。

注意: 上記の設定は、JUnit4を使用している場合の設定方法です。JUnit5を使用する場合は適切なアダプタを使用する必要があります。

【EclipseとJacocoを使って、カバレッジのレポートをHTMLで出力する方法】

Eclipseで、JaCoCoを使用するプロジェクトを選択します。

[Run] -> [Run Configurations...]を選択し、「JUnit」に対して新しい設定を作成します。

「Arguments」タブで、「VM arguments」欄に「-javaagent:path/to/jacocoagent.jar=destfile=path/to/jacoco.exec」を追加します。

path/to/jacocoagent.jarは、JaCoCoがインストールされている場所に置き換えてください。
path/to/jacoco.execは、JaCoCoのエグゼキューションファイルを出力する場所を指定します。
「Apply」をクリックし、「Run」をクリックして、テストを実行します。

実行が終了したら、JaCoCoのアクションツールを使用して、jacoco.execからHTMLレポートを生成します。

JaCoCoのアクションツールは、Javaコマンドラインから次のように実行できます。

java -jar path/to/jacococli.jar report path/to/jacoco.exec --classfiles path/to/classfiles --sourcefiles path/to/sourcefiles --html path/to/report

path/to/jacococli.jarは、JaCoCoのアクションツールを含むjarファイルへのパスです。
path/to/jacoco.execは、JaCoCoが生成したエグゼキューションファイルへのパスです。
path/to/classfilesは、JaCoCoを適用するクラスファイルへのパスです。
path/to/sourcefilesは、JUnit対象ソースコードへのパスです。
path/to/reportは、HTMLレポートを生成する場所を指定します。index.htmlを開けば出力結果が表示されます。

注意: 上記の設定は、JUnit4を使用している場合の設定方法です。JUnit5を使用する場合は適切なアダプタを使用する必要があります。

JaCoCo - Command Line Interface

【感想】
ChatGPTに明確な質問を書けば、的確に回答してくれる。
手順は必ず回答があるから、AIが強いだろうと思う。

WildFly+jacocoでintegration-testのカバレッジ取得 - Qiitaによれば、Missed InstructionsがC0 (命令網羅率) でMissed BranchesがC1 (条件網羅率) を表しているとのこと。
ドリルダウンすると、カバレッジを通過したパスは、
緑:実行された命令。
赤:実行されなかった命令。
黄:分岐において一部のみ実行された命令。
で表示してくれる。

カバレッジ結果のHTMLを開くと、C0/C1カバレッジをいい感じで出力してくれるのでありがたい。

Jacoco_report1

Jacoco_report2

Jacoco_report3

| | コメント (0)

« 2023年1月 | トップページ | 2023年4月 »