保守可能なソフトウェアの手段の1つは、それを作成した開発者以外の開発者が後で変更を受け入れることです。しかし、ソフトウェアがしばらく生産されていて、クライアントが新しい開発者に機能の追加やバグの修正を求めている場合、ソフトウェアにはどのような特徴がありますか? 6か月後にソフトウェアを「保守可能」にするために、どのような活動、態度、技術、および/または慣行が貢献していますか?
自動テスト
自動化されたテストの包括的なスイートは、事前の知識がない人でも大幅な変更を行えるようにする場合、コードベースのおそらく最も便利な機能です。
通常、新しいコードベースを入力するときは、変更が意図しない影響を与えないという確信が低いため、小さなことから始めて、システムの動作を理解することに自信が持てるようになると、大きな変更を加えます。
自動テストは、「正しい」動作とは何かを同じように理解し、それから逸脱していないことを確認することで、この信頼醸成期間を本当にスピードアップできます。
自己文書化コード
外部のドキュメントとコードレベルのドキュメントは素晴らしいですが、多くの場合、それは読みにくいコードに対するバンドエイドソリューションです。
コードを読みやすくすることを優先し、それでも不十分な場合は、追加のドキュメントが役立つ場所を検討してください。
通常、読み取りを開始するコードを見つけるための高レベルのシステムの説明または概要は役立ちますが、それでもディレクトリとファイルに名前を付けて、人々がどこが望ましいかを簡単に推測できるようにします。
信頼性の高い自動ビルドツールと開発環境
コードベースでの開発を開始するプロセスが迅速で、自動化されており、信頼できることを確認してください。
これは特にアプリケーションの実行に当てはまります。実行するためだけに10個の異なるパスを更新したり、20個の異なるIDEメニュー]をクリックしたりする必要はなく、本番環境と簡単に一致できることを確認してください。環境。
プロジェクトを構築または展開するための指示がどれほど優れていても、可能な限り自動化することで、新しい誰かがステップを見逃す可能性を大幅に減らすことができます。
既存の回答に加えて、私は追加したいと思います:
シンプルで、小さく、明確で、制限されている。
正当化:
これらの説明のそれぞれが否定され、ソフトウェアの一部に適用されると、そのソースコードを理解することがますます困難になることを意味します。
モジュール式であり、(1)LSPおよび(2)POLAに準拠しています。
これらは、 漏れのある抽象化 として知られているものを防ぐために必要な(しかし十分ではない)条件です。
漏れのある抽象化は避けられませんが、モジュール性、LSP、POLAに違反すると、ソフトウェアプログラマーがソフトウェアを操作するときに調整しなければならない詳細の量が増え、精神的な負担が増大します。
コーディングスタイルはプログラマーにはなじみがあります。
正当化:
これにより、プログラマーの学習負担が軽減されます。
コードは非常にナビゲート可能です。
与えられたタスク:
お客様は、ソフトウェア機能に小さな変更を加えたいと考えています。顧客は、顧客がユーザーインターフェイスから学んだ用語とメンタルモデルを使用して、変更要求について説明します。ソフトウェアプログラマーは、ユーザーが説明した内容に対応するソースコードのさまざまな部分を理解する必要があります。
評価基準:
ソフトウェア機能の用語、メンタルモデル、および編成は、ユーザーインターフェイスとアプリケーションのソースコードの間で非常によく似ています。さらに、ソースコードは、確立されたソフトウェアアプリケーションアーキテクチャの原則に従って編成されているため、プログラマーの理解とソースコードの関連部分へのナビゲーションが高速化されます。
ソフトウェアは追跡可能です。
与えられたタスク:
顧客は、ユーザーがユーザーインターフェイスで一連の手順を実行したときにトリガーされる可能性のあるソフトウェアのバグを発見しました。バグを調査して修正してください。
評価基準:
ソフトウェアアプリケーションを追跡可能にするには、プログラマーは、ユーザーが一連の手順を実行したときに、その実行を追跡できる必要があります。実行が追跡されたら、実行パスの追跡調査により、根本原因の手がかりとバグの解決策が提供されることが期待されます。
トレーサビリティを達成するための典型的な方法: