7

私たちが使用しているいくつかのパッケージの予期しない/望ましくない動作について、同僚と話していました。私たち側には明らかな副作用のない簡単な修正 (または少なくとも回避策) がありますが、彼は関連するコードにハード パッチを適用してパッチをアップストリームに投稿することで、関連するコードを拡張することを強く提案しました。実際、新しいビルドごとに自動的に適用されるいくつかのパッケージの特定のバージョンに対するパッチを維持しています。主な議論は、「醜い」回避策や壊れやすいモンキー パッチとは対照的に、これは正しいことであるということです。一方、私は純粋さよりも実用性を優先し、少なくとも (重大な) バグ修正以外の場合は、「パッチなし」>「モンキー パッチ」>「ハード パッチ」というのが私の一般的な経験則です。

したがって、(ハード)パッチ、モンキーパッチ、または希望どおりに機能しないサードパーティのパッケージを回避する方がよい時期について、コンセンサスがあるかどうか疑問に思っています。それは主に、パッチの理由 (バグの修正、動作の変更、不足している機能の追加など)、特定のパッケージ (サイズ、複雑さ、成熟度、開発者の応答性)、その他の何かに関係しているのか、それとも一般的なルールがなく、ケースバイケースで判断すべき?

4

4 に答える 4

1

私たちが見逃している情報の 1 つは、あなたが説明した予期しない動作が純粋で単純なバグなのか、それともパッケージの一部の消費者が望んでいる動作なのかということです。

ここで他の人が述べているように、それはリスクと労力のトレードオフです。あなたの特定の状況を知らずに、明確な主張をすることはできません。

しかし、私の直感では、パッチを適用してアップストリームにプッシュすることで、パッチが受け入れられると考えている場合、長期的にはリスクと労力が軽減されると思います。ハード パッチかモンキー パッチかに関係なく、コストがかかります。使用するパッケージのバージョンを更新するたびに、パッチがまだ機能するかどうかをテストし、必要に応じて更新する必要があります。パッケージの変更について。ハード パッチでは、パッチを再適用する必要もありますが、いずれかのオプションで行う必要があるテスト/更新よりも作業が少なくて済みます。

私が見ているように、このシナリオではパッチを適用することで 2 つのメリットがあります。

アップグレード時にパッチのことを忘れていた場合、ハード パッチを使用すると、パッチが完全に消えて、破滅的で目に見える障害が発生する可能性が高くなります。一方、モンキー パッチを使用すると、パッチはまだ存在しますが、テストしていない場合でも同じ効果が得られます。これは、ハード パッチが完全に欠落しているよりもはるかに危険な状態だと思います。

ハード パッチのもう 1 つの利点は、ハード パッチを使用すると、最終的にはパッケージに統合され、コストがなくなることです。一方、モンキーパッチは、問題が何らかの形で個別に解決されるまで、無期限に残ります.

予期しない動作が単なるバグではなく、他のパッケージの利用者が望むものである場合、これは私が描く状況を複雑にします。この場合、モンキー パッチ ソリューションは単に動作を削除する必要があります。ただし、ハード パッチは、それを望む人のために動作を維持する必要があります。

この分析は、パッケージのメンテナーや他の消費者に対してあなたが持つかもしれない道徳的義務を無視しています。

また、私は哲学的にモンキーパッチの概念全体に反対していますが、それはこの議論には関係ありません:-)

于 2010-09-25T02:02:31.137 に答える
1

パッチを適用することが「正しいこと」である理由には次のようなものがあります。オープン ソース ソフトウェアでは、本物のバグを発見した場合、または他の人も同様に必要と思われる機能が必要な場合、パッチを適用してアップストリームにパッチを送信することは、コミュニティに還元し、全体としてソフトウェアの改善に貢献します。パッチが承認された場合、あなたまたはあなたの会社の評判に無料で +1 が加算されます。履歴書にコミュニティに貢献した有用なオープンソース コードの例が多すぎて、誰も悲しむことはありませんでした...

塹壕で常に正しいことをしているわけではありません。しかし、ベスト プラクティスについて抽象的な議論を行う場合、適切な優先順位は、「パッチを適用して提出する」 > 巧妙な回避策 > より適切に機能するパッケージを見つける > 醜いサルパッチ ;-) のように思われます。

于 2010-09-17T23:48:47.937 に答える
0

私の意見では:

'予期しない/望ましくない動作'!=バグの場合、モンキーパッチ(またはダックパンチ)が示されます。

それがlibのバグであると思われる場合は、ハードパッチを適用してパッチをアップストリームにプッシュすることは理にかなっています。

「回避策」の定義が、libの動作を補正するためにアプリに複雑さを追加することであると理解している場合、モンキーパッチは間違いなくより良いアイデアであると言わざるを得ません。

私の.2ペソ。

于 2010-03-17T10:38:04.700 に答える
0

まあ、それはかなり古典的なリスク対ベネフィットです。

パッチはリスクフリーですか? そしてメリットが大きい?モンキーパッチ。少しのリスクがあり、ほんの少しのメリットしかない場合は、モンキーパッチを適用せず、通常のリリース プロセスに修正を組み込むだけです。

于 2010-03-17T10:41:24.440 に答える