現在の組込みソフトウェア開発の現場は、多くの製品バリエーションと短い周期でのバージョンアップに追われています。長期間、保守されてきたコードは、多くの人が追加修正し、今では「なぜこうなっているのか?」誰も説明できないものも数多くあります。今のコードを使い続けるべきか、一度捨てて再構築するのか...グローバルに競争が激化した今の経営環境では、再構築を選ぶ余地はなく、大規模あるいは小規模な「リファクタリング」を続けながら、少しずつコードを改善し、状況も改善していく...それが唯一残された道と言えます。
しかし、「リファクタリング」への一歩を踏み出すのは、容易なことではありません。その理由としては、次の3つがあげられます。
- 開発に忙しく、時間が取れない
- 「リファクタリング」するためのノウハウがない
- 検証に不安がある
これらが解決されないまま「リファクタリング」をしてしまうと、「リファクタリング」が失敗に終わるだけでなく、プロジェクト自身にも大きなダメージを与えてしまいかねません。
下記ポイントを理解し、下図の「リファクタリング」プロセスにのっとり、実践できるようにすることが、本トレーニングの目的です。
- 問題の発見と評価は客観的な解析方法を用いる
- 経年劣化を防ぐものなので、抜本的な 原因分析は行わずに、解決策の立案を行う
- コード変更の前後で振舞いが変わっていないことを保証する
- 日常的な活動として「リファクタリング」を実施できるよう効率化する
対象者 | ・人のコードを引き継ぎ、「リファクタリング」の実践が必要な人 ・現状のコードベースの開発を少しでも良くしていきたいと考えている人 ・修正による副作用が心配で、「リファクタリング」に踏み切れない人 |
---|---|
受講前提 | C言語による開発経験 |
必要時間 | 1日間 |
「リファクタリング」は、Before/ Afterで振舞いを変えないことが鉄則です。それを保証するために、テスト駆動のプロセスを使います。
「リファクタリング」をする前に、「リファクタリング」対象範囲の振る舞いを確認するためのテストプログラムを作成し、実行したログを保存しておきます。そこで保存したログが、「リファクタリング」後に満たすべき振舞いの目標となります。
本トレーニングでは、自動テストフレームワークとして "GoogleTest"を使います。
継続的インテグレーション(Continuous Integration = CI)とは、開発における品質と生産性の向上のために、ビルドからテストまでの一連の動作をシステムを使って自動化し、関係者で情報共有して早期に問題賭け欠をする、開発の習慣を指します。
テスト駆動開発による「リファクタリング」では、一連の作業をCI(継続的インテグレーション)により自動化することで、「リファクタリング」を効率的に実施することを狙いとしています。
継続的インテグレーション(CI)を実現するためには、自動化ツールが不可欠です。上図で示しているのは、コードの構成管理も含めたシステムの例です。このよに、複数のツールを連携し、CIフレームワーク上にさまざまなツールを組み込むことで、CI(継続的インテグレーション)を実現します。
下図はJenkinsのダッシュボードの画面です。このように、品質の状況とトレンドをすぐに把握することができます。
本トレーニングでは、CIフレームワークとしてJenkinsを使用します。