web-dev-qa-db-ja.com

ソフトウェアパッケージのメンテナンスを追い越す

最近、かなり便利なソフトウェアパッケージを使用していますが、内部でどのように機能するのかわかりません。

このパッケージには、数年の間に数人の博士課程の学生と大学の講師によって生成されたソフトウェアが含まれており、コードスタイルに反映されています。このソフトウェアの一部に関連するいくつかの論文があり、私はそれらを読みましたが、それでも、それらを正しく理解したかどうかはわかりません。

私はソースコードの内部を調べて、それが何をどのように機能するかを理解することにしました。
パッケージにテストがない、プログラミング言語がすでに実装している定義済み関数(重要な場合はR)、または機能が重複する2つの関数、ユーザーへの通知方法が異なる(messageを使用)場合があります。 catまたはwrite)、および30個のパラメーターを持つ関数。関数にいくつかのエラーも見つかりました(関数内で定義された変数名の代わりに、基本関数名と同じ変数名を使用しています)。または、新しいクラスを定義しますが、そのようなクラスのメソッドを定義しないため、コードの多くの行が複製されます。

パッケージを理解して一貫性を向上させるために、スタイルを統一してテストを追加することから始めました(初めてテストを使用)が、期待される出力がわからないため、結果に対してテストしているだけです。各オプション、または構造用。しばらくして、いくつかの関数の変更を開始し、すでに作成されているテストでそれらが壊れていないことを確認したいと思います。

パッケージとその理解を向上させるために他に何をすべきですか?パッケージの理解を効率的に向上させるにはどうすればよいですか?

1
llrs

ミッション

さまざまな人々によって長期間にわたって作成されたNiceソフトウェアパッケージがあり(R言語が進化し、最初から最初からプログラミングする必要があった関数が導入されました)、明らかにクリーンコードの原則に準拠していません。 。

そのため、リファクタリングしてコードスタイルを調和させたくなります。

チャレンジ

あなたはそれがどのように機能するかを完全には理解していません。

あなたは主題を完全に習得していないので、あなたは期待される結果を予測することはできません。

アドバイス

これらの条件下で大規模なリファクタリングをすぐに開始することは非常に野心的なようです。

まず、理解を深めることによって、より控えめに始める必要があります。したがって、内部に触れることなく、ソフトウェアとその主要コンポーネントの信頼性の高いテストスイートの構築を開始します。

スイートでコードを実行し、テストスイートでエラーがないかどうかを確認して、スイート、テストデータ、または現在のコードに問題があるかどうかを理解します。

そこに着いたら、リファクタリングを開始することを検討できます。常に、広範なテストスイートで変更をテストします。したがって、少なくとも、作業コードを壊していない(つまり、異なる結果を生成していない)ことを確認できます。

リファクタリング中にユニットテストを追加する機会を利用して、後継者があなたと同じケースになることを回避します。

2
Christophe