問題タブ [legacy-code]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - Perl コードを非推奨としてマークするにはどうすればよいですか?
私のプロジェクトでは、現在、レガシー コードから、適切に設計およびテストされた新しいモジュールへの段階的な移行を準備しています。すべての仲間のプログラマーが私の仕事に厳密に従っているわけではないので、古いコードが使用されている場合は警告を発したいと思います。また、古いコードを移植する方法に関する推奨事項を出力できることを強く望んでいます。
私はそれを行う2つの方法を見つけました:
Attribute::Deprecated、関数には問題ありませんが、完全なモジュールが非推奨の場合はかなり面倒です。また、警告以外の追加情報はありません。
Perl::Critic::Policy::Modules::ProhibitEvilModules
Perl::Critic
モジュールの場合、または関数またはメソッドレベルでのより細かい非推奨のためのカスタムルールかもしれません。このメソッドは問題ありませんが、非推奨であることはコード自体からすぐにはわかりません。
これを適切かつ簡単に行うための他の提案やトリックはありますか?
java - ソケットの入力と出力のスレッドを分離
私は、マルチスレッド Java サーバーのパフォーマンスとランダム クラッシュの問題に取り組むように割り当てられました。スレッドとスレッド セーフは、私にとってまったく新しいトピックではありませんが、新しいマルチスレッド アプリケーションを設計することは、おそらくレガシー コードを微調整することの半分の難しさであることがわかりました。答えを求めてよく知られている本をざっと読みましたが、奇妙なことに、それについて読んで提供された例を分析する限り、すべてが明確に見えます. しかし、自分が取り組むべきコードを見た瞬間、何もわからなくなってしまいました! 理論的な知識が多すぎて、実際の経験がほとんどないに違いありません。
とにかく、話題に戻ると、オンラインで調査を行っていたときに、このコードに出くわしました。私を悩ませ続けている質問は、同期せずに 2 つの別々のスレッドからソケットで getInputStream() と getOutputStream() を呼び出すのは本当に安全かということです。それとも、スレッドセーフの問題全体について少し偏執的になりすぎていますか? 連続して 5 冊目の本のように、同時実行で問題が発生する可能性があることがいくつあるかを説明しているときに、それが起こると思います。
PS。質問が少し長かったり、あまりにも「初心者」だったりして申し訳ありませんが、お手柔らかにお願いします - これが私の最初の投稿です。
編集:明確にするために、ソケットが全二重モードで動作し、入力ストリームと出力ストリームを同時に使用しても安全であることを知っています。メイン スレッドでこれらの参照を取得し、それらを使用してスレッド オブジェクトを初期化する場合は問題ないように思えますが、これらのストリームを 2 つの異なるスレッドで取得しても安全ですか?
@rsp:
だから私はSunのコードをチェックPlainSocketImpl
して、あなたが言ったように、これら2つの方法で同期しています。Socket
ただし、そうではありません。getInputStream()
とgetOutputStream()
は のラッパーにすぎないSocketImpl
ため、おそらく同時実行の問題によってサーバー全体が爆発することはありません。それでも、少し不運なタイミングで、問題が発生する可能性があるようです(たとえば、メソッドが既にエラー状態をチェックしているときに、他のスレッドがソケットを閉じた場合)。
ご指摘のとおり、コード構造の観点から、ソケット全体ではなく、各スレッドにストリーム参照を提供することをお勧めします。close()
各スレッドがソケットのメソッドも使用するという事実がなければ (たとえば、ソケットが「シャットダウン」コマンドを受け取ったとき)、作業中のコードをすでに再構築していたでしょう。私が知る限り、これらのスレッドの主な目的は、送信または処理のためにメッセージをキューに入れることです。そのため、単一責任の原則に違反している可能性があり、これらのスレッドはソケットを閉じることができないはずです (分離されたモデム インターフェイスと比較してください)。)? しかし、あまりにも長い間コードを分析し続けると、一般的に設計に欠陥があり、全体を書き直す必要があるように見えます。経営陣が代償を払っても構わないと思っていたとしても、レガシー コードを真剣にリファクタリングし、単体テストをまったく行わず、デバッグが困難な同時実行性の問題に対処することは、おそらく有益よりも害を及ぼすでしょう。そうじゃない?
php - PHPでのデッドコードの検出
私は非常に厄介なコードを含むプロジェクトを持っています-あちこちにたくさんの重複とデッドコードがあります。
以前は単体テストによるコードカバレッジはゼロでしたが、現在はすべての新しいコードをTDD方式で記述し、「古い」コードも単体テストでカバーすることで技術的負債を削減しようとしています(テストラスト手法)。
ビジネスロジックの複雑さは非常に高く、一部の方法が使用されているかどうかにかかわらず、だれも答えられない場合があります。
このデッドコードメソッドはどのようにして見つけることができますか?広範なロギング?テストカバレッジが高いですか?(顧客は新機能のリリースを望んでいるため、簡単ではありません)
tdd - リファクタリング/最適化から迅速な開発を分離する
私は 2 人のフロントエンド開発者のチームで、Web ベースの後期段階のスタートアップ プロジェクトに取り組んでいます。
このサイトは非常にうまく機能しますが、コードが非常に乱雑で整理されていないため、コードに関しては改善の余地がたくさんあります。
テストを作成し、何かを壊さないように慎重にリファクタリングすることで、徐々に物事を整理したいと思います。(書籍「レガシー コードを効果的に使用する」の原則を使用)
しかし、私が一緒に仕事をしている開発者は、優先度の高い多くの機能作業を任されているため、保守作業で彼に負担をかけたくありません。多くの場合、彼は単に時間の制約のために、面倒なコードを書かなければなりません。
チームが成長するにつれて、さまざまな懸念事項をどのように管理するかが気になります。
チームを2つのグループに分けることを考えています:
- コードの品質をあまり気にせずに、新機能の開発を迅速に行います。
- 単体テストを作成し、コードをリファクタリングし、一般的に物事を最適化します。
私が目指している結果は、新機能開発のペースを維持しながら、できるだけ多くのコードをテスト対象にすることです。
これは以前に試されましたか?何かご意見は?
asp.net - Web アプリケーションからレガシ コードへの相互運用性
シンプルな WinForms アプリを ASP.Net Web アプリに移行しようとしています。WinForms アプリは、基本的に複雑な単純な C アプリのプレゼンテーション レイヤーにすぎず、COM 相互運用機能を介してレガシ コードと対話します。私は、ASP.Net、javascript、jQuery についてはある程度の経験があり、WinForms と相互運用については多くの経験があるため、基本的なことは知っています。設計上の決定を下す必要があるだけです。
現在のアプリの外観は次のとおりです。
変更して再コンパイルできるレガシー C (C++ でさえない) コードがたくさんありますが、移植はオプションではありません。これはビジネス+データレイヤーです。好きなように呼んでください。これをレガシー コードと呼びます。
レガシ コードを起動すると、プレゼンテーションとユーザー インタラクションに使用される COM サーバーがインスタンス化されます。プレゼンテーション データはシリアル化されて、この COM オブジェクトに送信され ( 「I'm send you some output.」 )、サイクリック ポーリング ( 「Do you have some input for me?」 ) によってユーザー インタラクションが実現されます。最も美しい解決策ではありませんが、地獄のように簡単です。
COM オブジェクトは、実際には COM として公開された .NET 2.0 WinForms アプリです。このアプリは、.NET Remoting を介して他の .NET アプリにも一部の機能を公開しますが、これもそれほど重要ではありません。
システムはかなり複雑ですが、WinForms アプリは実際には対話のみに使用されるため、Web への切り替えは非常に簡単です。私が確信していないのは、Web サーバー <---> レガシー コードの相互作用を行うための最良の方法です。
(既に .NET Remoting を実装しているため) 最初に思いつくのは、ローカルの .NET Remoting を介して WinForms 機能を Web パーツに公開し、レガシ コードと Web アプリの間のある種のプロキシのように動作させることです。実際には、フォームなしでコミュニケーション部分だけが必要です。その場合、Web アプリは .NET Remoting を介して (ローカルで) この機能にアクセスする必要があります。
Web アプリが .NET Remoting を使用してローカルで別のアプリと通信するのは賢明ですか? また、アプリを Windows サービスに変更することもできますが、その機能を COM を介してレガシ コードに公開することはできますか?
これを達成するためのより良い方法は何でしょうか? 必要に応じて、レガシー コードにいくつかの変更を加えることもできます。
c# - `using` ステートメントを使用してメソッドを単体テストする方法は?
using ステートメントを持つメソッドの単体テストを作成するにはどうすればよいですか?
たとえば、 method があるとしFoo
ます。
上記のコードのようなものをテストするにはどうすればよいですか?
using
ステートメントとDispose()
オブジェクトを手動で使用しないことを選択することがあります。誰かが私に使えるトリックを教えてくれることを願っています。
ruby-on-rails - Ruby on Rails:レガシーコードをどうするか?
Rails1.2.3で構築されたポータルプロジェクトがあります。2006年の終わりに終わりました。
プロジェクトは次のプラグインを使用しています:acts_as_attachmentacts_as_ferret betternestedset simple_http_auth
すべてのプラグイン(または依存関係)が今日変更されたか、もう存在しないことを知っています。DHHは次のように述べています。バージョンの能力を過大評価しないでください。しかし、私はこれについて心配しています。
Railsのバージョンを更新すると、すべてが失敗します。新しいrailsバージョンで動作するようにアプリケーションを変更できます。現在廃止されているものを読んで変更できると思います。しかし、今は自分ですべての依存関係をサポートするか、他の依存関係に変更する必要があります(例:acts_as_attachment to atachment_fuまたはpaperclip)。明日について何を言う?
私の疑問は、Railsだけではなく、依存関係を使用して生産性を向上させることです。他のプロジェクトでは、純粋なPythonコード、さらには純粋なRubyコード、または純粋なPhpコードを使用しました。今日、私はそれを「言語/環境」の最新バージョンで(またはほとんど)変更せずに実行できます。
これらのプロジェクトには外部依存関係はなく、単なるアプリケーションコードです。たぶん、スケルトンと同じようにいくつかのWebフレームワークを使用していますが、外部プロジェクトは使用していません。
あなたはこのことについてどう思いますか?
.net - 従来の VB6 関数呼び出しを .NET に変換するユーティリティ
従来の VB6 関数の呼び出しを .NET に相当するものに変換するためのユーティリティ/ツールを探しています。
たとえば、これを変換します...
これに...
誰か知っていますか、それとも自分でロールバックする必要がありますか?
legacy-code - 既存のコンポーネントに新しい機能を追加するには?
私たちのプロジェクトには、正常に動作しているこの従来の画像ビューアー コンポーネントがありますが、そのソースは本当に混乱しています。このコンポーネントに新しい機能を追加して、人々がライト ペンを使用して画像に注釈を追加できるようにする必要があります。これは、それ自体は複雑な作業ではありませんが、既存のコードを扱うのは悪夢になる可能性があります。
私は今本当に混乱しています。どこから始めればよいかわかりません。既存のコードをリファクタリングする必要がありますか?そうでない場合、他に何ができますか?
では、私の質問は次のとおりです。そのような状況に対処するための最善の (痛みの少ない) アプローチは何でしょうか?
mysql - MySqlでvarcharの長さを増やすと考えられる結果?
varchar(40) フィールドを持つ古いテーブルを使用しています。そのフィールドにもっと多くの文字を挿入できるようにしたいので、長さを増やしたいです。
長さを長くする前に考えておくべき悪影響はありますか?