「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
近年ソフトウェアは大規模化しています。大規模なソフトウェアは運用中に変更を加えながら長期間使うことが多いです。
ソフテックにも20年以上前、数十人で製作したソフトウェアがあり、現在も変更を繰り返しながら保守しています。私もその保守を担当しています。
しかし、変更を繰り返すうちにソースコードの可読性が下がり、変更による影響が把握し辛くなるなどの問題が生じてきます。
そのような問題を少しでも取り除いて品質を維持向上するために、外部仕様はそのままでソースコードを改善することをリファクタリングと言います。
今回はVisual Studio(Microsoft社が提供しているソフトウェア統合開発環境ソフト)の機能を使っておこなうリファクタリングを2つ紹介します。
なお、Visual Studioのバージョンは2022、言語はC++を対象に説明します。
上述のとおり、リファクタリングとは、外部仕様を変えずにソースコードの可読性・保守性などを改善することです。
例えば次のようなソースコードはリファクタリングの対象です。
a) クラス・関数・変数などの名前から意味・役割が分からない
b) 同じ処理がたくさんある(クローンコード)
c) 関数が長い
d) 条件分岐が複雑過ぎる
e) ソースにコメントが無い。コメントがあっても何を行うかが把握できない
次項から、上記 a) と b) のリファクタリングをVisual Studioの機能を用いて行う方法を説明します。
この場合はVisual Studioの機能「名前の変更」を使うと便利です。
「検索と置換」で変更したい名前を検索すると、修正するべき箇所だけではなく、修正が不要な箇所も表示されます。
それに対して「名前の変更」は、変更したい名前がある場所から、影響範囲のみに絞り込んだ箇所を変更候補として、プレビュー画面に表示してくれます。
例えば、「クラスが10個あり、そのすべてに同じ変数名があるとします。このなかの1クラスのみ機能が異なるため変数名を変えたい」
このような場合に「名前の変更」を使うことで、変更したいクラスの変数の宣言やその変数を使っている箇所だけが変更できます。
詳細は後述しますが、変更する箇所はプレビュー画面にリストアップされ、事前に確認してから変更を実施できます。
このように、変更するべき箇所のみを変更できるメリットがあります。
それでは実際の操作方法を説明します。
a) 使い方
メンバ変数「m_pFtpConn」を「m_pFtpConnection」に変更する例で説明します。
① 変更したい文字列を選択します。
新しい名前を入力し「検索スコープ」を選択して「プレビュー」を押します。
例えば、
「もともと配列Aの初期化処理があり、その後、仕様変更で配列Bが必要になり初期処理に配列Aの処理をコピー&ペーストして作った。
さらにその後、配列Cの初期化処理も同様にコピー&ペーストで作った」
このように、クローンコードが増えていくと可読性が落ちていきます。
怖いのは、「配列A,B,C全てが修正対象の仕様変更のときに、配列A,Bしか修正しなかった」と見落としが起こり、不適合(バグ)につながることです。
このような場合は、初期化する関数を作ることで、同じ処理の記述を無くすことが出来ます。
Visual Studioの機能「クイックアクションとリファクタリング」は、関数化したい処理を選択することで、
必要となる引数を持つ関数が自動的にコーディングされるためリファクタリングの省力化に貢献します。
ただし、作成された関数は、コメント等を含め人間がカスタマイズするのが現実的な使い方です。
また、関数の呼び出し処理は、人間のコーディングが必要です。そのため、コードの確認は人間がしっかりと行う必要があります。
それでは実際の操作方法を説明します。
a) 使い方
選択した範囲の処理をAryDataUpdateと言う関数にする例で説明します。
① 関数化したい処理を範囲選択します。
「新しい関数またはメソッドの名前」に関数名を入力し、OKを押します。
ヘッダーファイル
今回は、Visual Studioを使ったリファクタリングを2つ紹介しました。
リファクタリングで不適合を出してしまっては、元も子もないです。
そのため、確実な変更が出来る方法が重要です。
今回ご紹介した2つの機能で、100%確実に変更できるわけではありませんが、確実な変更のサポートになってくれると考えます。
2つとも簡単に試せる機能ですので、試してメリットを体感して欲しいと思います。
本レポートが、皆様のリファクタリングの参考になれば幸いです。
最後までお読みいただき、ありがとうございました。
(N.K.)
関連ページへのリンク
関連するソフテックだより