1. HOME
  2. ソリューション
  3. レガシーシステム開発救済:チーム再生、自動化、コード再生

レガシーシステム開発救済:チーム再生、自動化、コード再生

「チーム再生」は「共有」「ルール化」「学習」の習慣付けと「テスト駆動」の導入

救済の第一段階である「チーム再生」では、生産性と品質向上のための活動のベースを構築するために、下図のような活動をします。

まず最初に実施するのは朝礼です。毎朝メンバと顔を突き合わせて話すことで、気軽に話せる雰囲気を作っていきます。ここでコミュニケーションをとれるようにならないと、他の活動も進めることができません。

守るべき最低限のルールは、チームに規律を与えるとともに、最低限の知識をつけることにつながります。

そして、技術面での改善活動を展開するために必要な知識やスキルを身につけていきます。チーム内の知識やスキルのレベルは、さまざまであるため、知っている人・できる人が積極的に自分の知識やスキルを展開していきます。

チーム内で主体的にコミュニケーションが取られ、守るべき最低限のルールが守られ、ある程度のスキルアップが図られると、チーム再生における次のステップである「テスト駆動開発の導入」を行うことができます。

テスト駆動開発の導入は、品質を安定させるための第一歩となります。具体的には、下図にあるようなプロセスで実施します。ここでのポイントは、「ペアプログラミング」「小規模リファクタリング」「レビュー」を織り込みながら実施するという点です。これは、チームのコミュニケーションがベースとして作られ、ルールという共通認識がなければ、成り立ちません。

レガシー救済の第一段階である「チーム再生」は「共有」「ルール化」「学習」の習慣付けと品質を安定させるための「テスト駆動開発」の導入がポイント"チーム再生"は「共有」 「ルール化」 「学習」 の習慣付けと「テスト駆動」の導入【テスト駆動開発の導入】単体モジュールの作りこみ(1つの機能を実現するために必要なモジュールを、以下を実施しながら段階的に構築し、単体テストを通す・ペアプログラミング・小規模リファクタリング・レビュー)開発範囲の要求を分析⇒開発対象の設計を軽く実施⇒単体テストプログラム作成⇒開発対象のプログラム作成⇒単体テスト実施⇒回帰テストプログラム作成⇒回帰テスト実施⇒一連の機能の確認(1つの機能が回帰テストを通れば、次の機能に着手する)

「自働化・システム化」はCIフレームワークで「軽く」「簡単に」

テスト駆動開発の導入と並行して、ビルド以降の一連の作業を自働化し、その結果を関係者で即座に共有できるようなシステムを導入します。これは、一般的には「継続的インテグレーション(CIContinuous Integration)」と呼ばれます。「継続的インテグレーション」を実現するシステムを導入することで、自働化・システム化し、ムダを排除して、更に品質安定化のベースを作り上げます。

何を自働化するのか?

継続的インテグレーション(CI)では、下図の左側のプロセス(青のプロセス)を自働化します。

開発者は、開発対象のプログラムとテストプログラムを作成してビルドを実行します。ビルドを実行すると、自動的に静的解析・単体テスト・回帰テストを実行し、テストカバレッジを採取します。

静的解析では、最新のメトリクスとトレンドを見ることで、保守性を中心とした品質のデグレードが起こっていないことを確認します。

単体テスト・回帰テストは、要求通りにプログラムが作られていることを確認するとともに、テストカバレッジを採取することで、機能実現の進捗状況を把握することができます。

テスト駆動開発の導入と「継続的インテグレーション(CI)」による自働化により、品質向上と生産性向上を組織文化として定着させるための土台ができました。

【自働化する一連の作業】ビルド実行⇒【得られる成果物】最新の実行可能なソフト|静的解析実行⇒【得られる成果物】最新のメトリクス値、メトリクス値のトレンド|単体テスト実行⇒【得られる成果物】最新の単体テスト結果・テスト結果のトレンド|回帰テスト実行⇒【得られる成果物】最新の回帰テスト結果・テスト結果のトレンド|テストカバレッジ採取⇒【得られる成果物】機能実現の進捗状況・進捗状況のトレンド⇒品質・進捗レポートの作成【品質・進捗レポートにインプット】

自働化を実現するシステムとは?

ビルドにより得られる情報は、システムを通じてプロジェクト関係者全員が即座に共有することができます。それを実現するのが、下図のようなシステムです。

今回の例では、CI(継続的インテグレーション)のフレームワークであるJenkinsに、単体テスト・回帰テスト・静的解析・カバレッジツールを組込み、ビルドからの一連の作業を実行させます。

【CI(継続的インテグレーション) System】単体テスト(google test、xUnit、C++Test、WinAMS)回帰テスト(ユーザによる開発)静的解析(QAC、Adlint、ccfinder)プロジェクト管理(statsvn、redmine)Build(コンパイラ)CI(継続的インテグレーション)フレームワーク(Jenkins)linux simulator(cygwin)

品質と進捗を毎日確認する

下図は、Jenkinsのダッシュボードの画面例です。この例では、ビルド履歴、単体テスト・静的解析のトレンドを見ることができます。これらの情報は、ビルドをする度に自動的に更新され、常に最新の情報を得ることができます。

このようにすることで、品質のデグレードや開発の遅れを素早くキャッチし、早い段階で適切な対応を実施することができます。

ここまでくれば、救済が必要だったレガシー開発は、品質と進捗が制御可能な状態となり、これ以上悪い状態に陥ることはありません。誰もが安心してプロジェクトを進めることができます。

最後の「③コード再生」については、「レガシーリファクタリング」をご参照ください。

レガシーリファクタリング

CI(継続的インテグレーション)フレームワーク(Jenkins)ビルド結果の履歴、静的解析結果の履歴

救済を成功させるためには、リーダの覚悟と根気強さが必要

ここまで、具体的な救済内容について説明してきました。しかし、組織文化までを変えようとしている救済は、そう簡単に進められるものではありません。

「人間の脳は変化を嫌う」ということが、脳科学における数々の実験から立証されています。何か変化を起こそうとすると、必ず抵抗勢力が存在します。また、ほとんどの人はすぐには馴染めません。

リーダとして救済を主導する人は、小さな成果を積み重ね、メンバに安心を与えながら、大きな変化を成し遂げていく粘り強さが必要です。下図に、その心得をまとめました。

良きリーダをアサインすることが、救済への一番の近道と言えます。

【レガシー救済リーダの心得】道の道とすべきは、常の道にあらず~多くの引き出しを持ち、最適なものを使え|着眼大局、着手小局~構想は大きく、できるところからコツコツと|弦将の下に弱車なし~すべてはリーダの責任であり、担当者の責任にしてはいけない|兵は拙速を聞くも、未だだ巧久を睹ざるなり~タイミング・スピードが重要であり、時間をかけすぎると時機を逸する|これを知るものは、これを楽しむものに如かず~何をするにも、率先して楽しむべし

頑張ってるけど、ちっとも楽にならない…何で?

すぐに成果を出すために頑張ってるけど、自前ではもう限界

効果的だろうけど高額なコンサルには手がでない…

あなたに合う一番最適な解決方法を
エクスモーションがご提案いたします。

コンサルタントが教える成功の秘訣

シニアコンサルタント 井上一郎

多くのレガシーコードは、ハードコーディング、グローバル変数、コメントなし、複雑な依存関係、巨大な関数やコンポーネントなど、様々なアンチパターンから形成されています。このようなコードは、開発費の増大、開発速度のスローダウン、出荷後のバグ多発など、多くの問題を頻発させます。

「そういったコードは、『リファクタリング』すればいいじゃないか」という声が聞こえてきそうです。その通り、「リファクタリング」すればいいのです。ただし、何年にもわたってアンチパターンが積み重なったコードの「リファクタリング」には、非常に高度な知識、経験と粘り強さが必要です。簡単に説明できる成功の秘訣などありません。それでもあえて言うとすれば、「リファクタリングのプロを探せ」です。

私と一緒に、レガシーコードを蘇らせましょう。

井上一郎

レガシー救済プロジェクトの関連サービス

適用支援

レガシーシステム開発救済診断

「レガシー開発」の良し悪しを、定量・定性の両面で、経験豊富なコンサルタントが診断し、救済への道筋を提示します。

適用支援

レガシーシステム開発
レスキュー隊派遣サービス

「レガシー開発」を救済するためのプロジェクトを主導していく、通称『レスキュー隊』を派遣します。経験豊富なコンサルタントが、救済プロジェクトを主導していくとともに、「見える化」・「自働化」・「リファクタリング」など、ソフトウェア開発技術の知見と経験を併せ持つレスキュー隊が、実際に手を動かして、「レガシー開発」を救済いたします。

「リファクタリング」による品質改善についての理論を学び、問題発見・コードの変更・CIフレームワークを使ってのテストまでを実践する本格的トレーニングです。テスト自動化ツール「Google Test」とCIフレームワーク「Jenkins」を使用します。

EurekaBoxは、オンラインで学べる総合学習&実践プラットフォームです。このコースでは、これからリファクタリングを学んでいきたいという人から、実践している人に向けて、コンテンツを用意しています。リファクタリングの基礎から応用までをわかりやすく解説します。

レガシー救済プロジェクトに関する記事を見る

他のソリューションを見る

最新コラム