問題タブ [legacy]

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.

0 投票する
17 に答える
4251 参照

refactoring - レガシーコードの書き換え

私の部署は現在、かなり大きな COBOL コード ベースを維持するというタスクの責任に直面しています。ビジネス ニーズに対応するために新しい機能を追加する方法を考えています。最近は COBOL プログラマーを獲得するのが難しく、Java や C# などの最新の言語を使用することで生産性が向上すると考えています。

次の 4 つのオプションがあると考えています。

  1. すべてをゼロから書き直して、古いアプリケーションを置き換える準備が整うまで放置します
  2. すべてをゼロから書き直し、一部の人に古いアプリケーションを維持してもらい、新しいアプリケーションが構築されているときに新しいビジネス ニーズに対処する
  3. すべての新しい機能を最新の言語で記述し、新しいコードを古い機能と統合する方法を見つけます。
  4. 古いアプリケーションを維持し続けます。

私たちにとって最良の選択肢は何だと思いますか、またその理由は何ですか?

0 投票する
5 に答える
4969 参照

java - レガシー Java コードのユニットテストの自動生成

Java単体テストを自動生成するための最良の、できれば無料/オープンソースのツールは何ですか? 単体テストは、システムの設計を文書化して推進する通常のTDD単体テストと同じ目的を実際に果たすことはできません。ただし、自動生成された単体テストは、巨大なレガシー コードベースがあり、必要な変更が望ましくない不明瞭な副作用をもたらすかどうかを知りたい場合に役立ちます。

0 投票する
5 に答える
9922 参照

ms-access - Ms Accessアプリケーションを.Netアプリケーションに変換するためのいくつかの良いテクニックは何ですか?

コア在庫の倉庫保管および請求システムに使用する12年前のMsAccessアプリがあります。すでにSQLServerバックエンドで実行されていますが、すべての「ロジック」、フォーム、およびレポートはAccessにあります。在庫トランザクションを非一時的なものから一時的なものに変えるために必要な大量のメンテナンススラッジを経験した後、私はいつかこれをコードに変換して、はるかに保守可能でテスト可能な環境でロジックをより適切に管理できるようにする必要があることに気付きました。

管理しやすく効率的な方法で.Netアプリケーションに変換できるようにするためのテクニックは何ですか?

1つのアイデアは、クエリをストアドプロシージャに変換してから、アプリをAdpプロジェクトに変換することでしたが、フォームとレポートの処理方法についてはまだわかりません。

また、それが重要な場合、私は私の会社の唯一の開発者です。

0 投票する
15 に答える
841 参照

legacy - コードがレガシー コードであると言うのはいつですか?

有用なメトリクスであれば問題ありません

0 投票する
11 に答える
4350 参照

refactoring - 品質の向上に最も大きな影響を与えるレガシー コードベースに対して何ができますか?

レガシー コードベースで作業する場合、コードベースの品質を向上させるために時間の経過とともに最も大きな影響を与えるものは何ですか?

  • 未使用のコードを削除
  • 重複したコードを削除
  • 単体テストを追加して、カバレッジが低い場合のテスト カバレッジを改善します
  • ファイル間で一貫したフォーマットを作成する
  • サードパーティのソフトウェアを更新する
  • 静的解析ツール (ieFindbugs) によって生成される警告を減らす

コードベースは、さまざまなレベルの専門知識を持つ多くの開発者によって長年にわたって書かれており、多くの領域がテストされておらず、テストの作成にかなりの時間を費やさないとテストできない領域もあります。

0 投票する
8 に答える
2982 参照

.net - MS は .Net 4.* または 5.* で XP のサポートを終了しますか?

開発者にとって、.Net の現在および新しいバージョンが Windows 2000 をサポートしていないことは問題ですか?

私のクライアントの何人かがまだ Windows 2000 を使用していると思うと恐ろしくなります。いつか Windows 2000 のサポートをやめるかもしれませんが、Microsoft が人々の製品に Windows 2000 を押し付けているのは好きではありません。

Vista 以降の販売を促進するために、Microsoft が将来的に XP でこれを行うと予想できる人はいますか?

はっきりさせておきますが、これは MS をバッシングしているわけではありません。

対照的に、C++0x の実装者が「Windows 2000 では動作しない」と言っているのを見ることはできません。

私は本当に.Netに切り替える必要があることを自分自身に納得させようとしていますが、これは私の懸念の1つです.

0 投票する
6 に答える
1364 参照

database - ソートされたデータベースビューの効果を得る方法は?

データベースビューを(効果的に)並べ替えることができるようにしたい-データベースビューでの概念的な順序が無効であることはわかっていますが、次のシナリオで対処する必要があります。

  • select(*)fromtablenameステートメントを使用してデータベーステーブルからデータを読み取るサードパーティのレガシーアプリケーション
  • レガシーアプリケーションは、レコードの順序に非常に敏感です
  • ユーザーがテーブル内のデータをより簡単に管理できるようにするために作成したアプリケーションですが、テーブルへの挿入と削除により、レコードの順序が自然に混乱します。

レガシーアプリケーションのステートメントを変更して、テーブル名からフィールドごとに(*)を選択すると、問題は解決しますが、オプションではありません。

つまり、データを正しい順序でエクスポートできるステージングテーブルを設定しましたが、これはリソースを大量に消費するオプションであり、データがレガシーアプリケーションで「ライブ」ではなく、ユーザー。

これらの制約のあるテーブルの注文バージョンを入手できるようにしたいと思います。どのようにアイデアはありますか?


更新-Sybase12.5を使用していますが、特定のRDBMSと緊密に結合されたソリューションを避けたいのですが-変更される可能性があります。

このウィキペディアのエントリで参照されているSQL標準のため、ビューに「orderby」句を追加できません

0 投票する
11 に答える
33716 参照

c++ - C ソースを C++ に変換する

かなり大きく (>300K)、かなり成熟した C コードベースを C++ に変換するにはどうすればよいでしょうか?

念頭に置いている種類の CI は、モジュールにほぼ対応するファイルに分割され (つまり、典型的な OO クラスベースの分解よりも粒度が低い)、プライベート関数とデータの代わりに内部リンケージを使用し、パブリック関数とデータには外部リンケージを使用します。グローバル変数は、モジュール間の通信に広く使用されます。非常に広範な統合テスト スイートが利用可能ですが、ユニット (モジュール) レベルのテストはありません。

私は一般的な戦略を念頭に置いています:

  1. C++ の C サブセットですべてをコンパイルし、それを機能させます。
  2. モジュールを巨大なクラスに変換して、すべての相互参照がクラス名によってスコープされるようにしますが、すべての関数とデータを静的メンバーとして残し、それを機能させます。
  3. 適切なコンストラクターと初期化された相互参照を使用して、巨大なクラスをインスタンスに変換します。必要に応じて、静的メンバー アクセスを間接アクセスに置き換えます。そしてそれを機能させます。
  4. 次に、問題のある OO アプリケーションとしてプロジェクトにアプローチし、依存関係が扱いやすいユニット テストを作成し、そうでない場合は個別のクラスに分解します。ここでの目標は、変換のたびに 1 つの作業プログラムから別のプログラムに移行することです。

明らかに、これはかなりの作業になります。この種の翻訳に関するケーススタディ/戦争の話はありますか? 代替戦略?その他の役立つアドバイスはありますか?

注 1: プログラムはコンパイラであり、おそらく何百万もの他のプログラムがその動作が変更されないことに依存しているため、大規模な書き換えはほとんどオプションではありません。

注 2: ソースはほぼ 20 年前のものであり、おそらく 1 年あたり 30% のコード チャーン (変更された行 + 追加された行 / 以前の合計行数) があります。言い換えれば、それは大幅に維持および拡張されています。したがって、目標の 1 つは保守性を高めることです。

[質問のために、 C++への変換は必須であり、C のままにしておくことは選択肢ではないと仮定します。この条件を追加するポイントは、「C に残す」という回答を除外することです。]

0 投票する
19 に答える
13640 参照

legacy - 大規模なコードベースに慣れるための最良の方法は何ですか?

大規模なコードベースが既に配置されている既存のチームに参加することは、困難な場合があります。最善のアプローチは何ですか;

  • ブロード; コードから、すべてがどのように相互にリンクしているかの概要をつかむようにしてください
  • 狭い; 一度にコードの小さなセクションに集中し、それらがどのように機能するかを完全に理解する
  • 開発する機能を選択し、作業を進めながら学習します
  • クラス図と UML が利用可能である場合 (および最新の場合) から洞察を得るようにしてください。
  • まったく別の何か?

私は現在、約 20k 行の C++ アプリとライブラリに取り組んでいます (編集: 物事の壮大な計画では小さい!)。業界では、経験豊富なプログラマーから紹介を受けると思います。しかし、そうでない場合、できるだけ早く付加価値を開始するにはどうすればよいでしょうか?

--
回答の要約:

  • デバッグ モードでコードをステップ実行して、その動作を確認します
  • あなたよりもコードベースに精通している人とペアを組んで、コーディングする人と見たり議論したりする人を交代で行います。チーム メンバー間でパートナーをローテーションして、知識が広まるようにします。
  • 単体テストを書きます。コードがどのように機能すると思うかについての主張から始めます。期待どおりの結果が得られた場合は、おそらくコードを理解しています。そうでない場合は、パズルを解くか、問い合わせを行う必要があります。(ドナルに感謝します。これは素晴らしい答えです)
  • 上記と同様の方法で、機能コードの既存の単体テストを実行します
  • UML、Doxygen によって生成されたクラス ダイアグラム、およびその他のドキュメントを読んで、コードの全体像を把握してください。
  • 小さな編集やバグ修正を行い、徐々に積み上げていきます
  • メモを取り、飛び込んで開発を開始しないでください。面倒なコードや不適切なコードを生成するよりも、理解に時間を費やす方が価値があります。

この投稿は、 the-best-way-to-familiarize-yourself-with-an-inherited-codebaseの部分的な複製です

0 投票する
5 に答える
2057 参照

c++ - 単体テストを既存のプロジェクトに追加する

私の質問は以前に尋ねられたことと非常に関連していますが、実際的なアドバイスが必要です。

私は「レガシーコードを効果的に扱う」を手にしており、取り組んでいるプロジェクトで読んだ本からのアドバイスを使用しています。このプロジェクトは、いくつかのライブラリで構成される C++ アプリケーションですが、コードの大部分は単一の実行可能ファイルにコンパイルされます。何かに触れる必要があるときに、既存のコードに単体テストを追加するために googletest を使用しています。

私の問題は、「テスト中」のアプリケーションからライブラリにコードを抽出できないときにコードを共有する必要がある2つの異なる実行可能ファイルがあるため、ユニットテストをビルドできるようにビルドプロセスをセットアップする方法です。現在、メイン アプリケーションのビルド プロセスから生成されたオブジェクト ファイルに対する単体テスト リンクを保持するアプリケーションのビルド プロセスを作成しましたが、それは本当に嫌いです。何か提案はありますか?