タグ付けされた質問 「legacy」

レガシー言語、コード、またはアプリケーションに関する質問。

6
廃止されたデータベース列の廃止に関するベストプラクティスは何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店。 早い段階でクライアントからデータA、B、Cを収集するアプリケーションを設計していますが、後でデータA、B、Dを収集します。 A、B、C、およびDは非常に関連性が高く、現在は単一のデータベースPostgreSQLテーブルTの列として存在しています。 Cが不要になったら、アプリケーションからその参照を削除します(Django ORMを使用します)が、既に入力されたデータを保持します。そうするための最良の方法は何ですか? ABD用の新しいテーブルを作成することを考えましたが、それはテーブルTを参照する行で問題が発生する可能性があることを意味します。 列Cをそのまま残し、コード内の列Cへの参照を削除して、既存のデータが生き残るようにすることができます。 表示されていないより良いオプションはありますか? いくつかの追加の詳細: 行の数は多くなく、おそらくユーザーごとに1〜2です。これは大衆市場のアプリケーションですが、CからDに切り替えるまでに、ユーザーベースはまだそれほど大きくありません。CとDは同時に収集されない可能性がありますが、可能性はあります。CとDは、それぞれ1つだけでなく、複数の列を表している可能性があります。

3
古いOSの開発をサポート
私は、Cで書かれたレガシーコードの大部分を維持しています。このコードは当初、Windows 3 for Workgroupsに対してコンパイルするために書かれ、後にNT用のバージョンが作成されました。このレガシーアプリケーションは現在も使用されており、90年代前半から3.11およびNTワークステーションで快適に実行されています。正常に機能し、本来の動作を行います。また、彼らがまだ生きている理由は、ソリューションに属するカスタムハードウェアの一部のドライバーが後のWindowsと互換性がないためです。 同じ理由でWin2kでのみ動作する別のアプリケーションもあります。 ただし、状況が進むにつれて、これらのレガシー環境を実行することがますます難しくなっています。現在、開発用ソフトウェアがインストールされた物理マシンを保持しているため、ネイティブハードウェアで作業できます。しかし、これらはいつでも死ぬかもしれません(結局25歳です)。 それで、私の質問は、2016年を見て、この古風な環境をより安定した方法で維持するための私のオプションは何ですか?3.11をクラウドホスティングに移行できますか? 仮想化を試しましたが、セットアップの特殊な性質のため、デバイスドライバーで動作させることができなかったため、OSの完全なイメージをそのまま作成してから、 VMはソフトウェアを開発しますか?Win3やNTと同じくらい古いバージョンのゲストOSでは、このようなことは可能ですか? これらのような古いプラットフォームを開発のために生かしながら、より現代的で安全な方法で、私が引き出すことができる経験はありますか? 私の目標は、古い物理マシンを取り除き、仮想化に移行することです。
14 c  windows  legacy 

8
レガシーシステムを推進する管理を処理する方法
現在、私は有料のインターンシップに参加しており、過去5年間にわたって(異なる時期に)複数の開発者によって開発された古いシステムを維持する任務を負っています。経営陣は「システムは生命維持中」に同意しており、現在システムを使用しているエンドユーザーからかなり定期的にバグ報告を受け取っています。 現在、経営陣はプロジェクトをさらに1年間延長したいと考えており、その過程でユーザーベースのほぼ3倍になります。 インターン(または任意のエントリーレベルのポジション)として、「プッシュバック」する方法を教えてください。オープンエンドの文書ではありますが、私は懸念を述べた報告書をすでに書いています。変更を提案するためのプロトコルまたはドキュメントタイプはありますか?私は提案をする立場にありますか、それとも単に古いシステムをサポートし続けるべきですか? 明確にするために、ソフトウェア開発は私の会社の主要なビジネスではありません。そのため、内部プロトコルは存在しません。さらに、プロジェクトには正式な文書もまったくなく、要件文書もありません。開発は非常にアドホックです。

3
「ソフトウェアのサポート終了」状況に対処する方法
ベンダーがソフトウェアのサポートやサービスを提供するつもりはないと宣言した場合(およびアップグレードパスを提供せずにビジネスを終了する意図を述べた場合)、顧客はどのような手段を利用できますか? 顧客の観点からこれを考慮してください。顧客のITスタッフは技術的な選択肢のみを検討する可能性が高いですが、顧客が同様に追求できる非技術的な選択肢が存在する可能性があります。また、契約条件などで混乱を最小限に抑えるために、顧客は事前にどのような合理的な手段を講じることができますか? 私が考えることができるもの: 予備のハードウェアを購入し、ソフトウェアが動作し続けることができる予備環境をセットアップする必要があります。 ベンダーの関与を必要としないさまざまなデータエクスポート方法。(これには、商品データベースのバックエンドに保存されているデータを調べるなどの簡単な手法、スクリーンスクレイピング、画像への印刷、再スキャンなどのより複雑な手法などが含まれます) スタッフが古いデータを手動または半自動で新しいシステムに複製する並列システム ベンダーが金銭的な問題を抱えている場合の法的手段(ソースコードエスクローの場合など) 他のアイデアはありますか? 「迂回」が関係しない(DRMなし、DMCAなし)と仮定すると、データリカバリまたはリバースエンジニアリングは合法/許容可能ですか? 編集したメモ: それは、いくつかの逸話的な、しかし実際の物語の組み合わせです。私はそれらのいずれにも直接関与していません。「ソフトウェアのサポート終了」状況が一般的にどのように処理されるかを知りたいのです。元のストーリーを解決するには「難しすぎる」と思わせるつもりはありません。

3
Poor Man's Dependency Injectionは、レガシーアプリケーションにテスト容易性を導入する良い方法ですか?
過去1年で、Dependency InjectionとIOCコンテナを使用して新しいシステムを作成しました。これは私にDIについて多くを教えてくれました! ただし、概念と適切なパターンを学んだ後でも、コードを分離し、IOCコンテナーをレガシーアプリケーションに導入することは難しいと考えています。アプリケーションは、真の実装が圧倒されるほどの大きさです。値が理解され、時間が与えられたとしても。こんなことをする時間を与えられたのは誰ですか?? もちろん、単体テストをビジネスロジックに組み込むことが目標です! テスト防止のデータベース呼び出しと絡み合っているビジネスロジック。 この記事を読みましたが、このLos Techiesの記事で説明されているように、Poor Man's Dependency Injectionの危険性を理解しています。私はそれが本当に何も切り離さないことを理解しています。 実装には新しい依存関係が必要になるため、システム全体で多くのリファクタリングが必要になることを理解しています。どんなサイズの新しいプロジェクトでも使用することは考えません。 質問: Poor ManのDIを使用して、レガシーアプリケーションにテスト容易性を導入し、ボールローリングを開始しても大丈夫ですか? さらに、Poor ManのDIを真のDependency Injectionへの草の根アプローチとして使用することは、原則の必要性と利点を教育する価値のある方法ですか? インターフェイスの背後でデータベース呼び出しの依存関係と抽象化を呼び出すメソッドをリファクタリングできますか?単純に抽象化することで、そのメソッドをテスト可能にします。これは、コンストラクターのオーバーロードを介してモック実装を渡すことができるためです。 今後、支援が得られると、プロジェクトを更新してIOCコンテナを実装し、抽象化を取り入れるコンストラクタを公開することができます。

5
壊れた古い/レガシーユニットテスト
私は大企業で働いており、何千ものJUnitテストがある大規模なJavaアプリケーションを担当しています。私がこの役割に移行して以来、200〜300のテストが壊れています(何年も壊れている可能性があります)。テストは古くて壊れやすく、通常はライブサンドボックスデータで終わるスパゲッティの依存関係の混乱です。 私の目標はテストを100%合格することで、単体テストの失敗でビルドを中断できますが、失敗したテストに対処するまではできません。メンテナンス予算は主にサポートのためであるため、予算はほとんどありませんが、私のチームは、問題の少ないフルーツテスト(主に構成/ローカルリソースの問題)を特定して修正しました。 ベストプラクティスに関する意見はありますか?テストは価値があるとは思いませんが、テストしているものが何なのか、掘り下げなければ動作しない理由もわかりません。おそらく時間とお金がかかるでしょう。 壊れたテストのステータスを既知のもので文書化し、壊れたテストを完全に削除または無視し、優先順位の低いバグ/作業項目を入力して調査および修正する必要があると考えています。その後、100%になり、他のテストから真の価値を引き出し始めます。メンテナンス/リファクタリングの失敗があれば、それらを再び拾い上げることができます。 最善のアプローチは何でしょうか? 編集:これはこの質問とは異なる質問だと思います。なぜなら、今後書くべきテストの明確な方向性があるからです。しかし、現在の大規模なテストセットが意味を持つようになる前に対処するために、レガシーの失敗したテストを継承しました。

3
非IT管理者は、重要なレガシーソフトウェアの長期的なメンテナンスと開発をどのように保護する必要がありますか?
私たちは、非常に便利で堅牢なソフトウェアのコレクションを備えた、小規模で非常に専門的な福利厚生管理会社です。一部はCOBOLで書かれていますが、ほとんどはBASICです。2人の専任コンサルタントがこのシステムを30年以上にわたって適切に維持および改善してきました。言うまでもなく、彼らはすぐに引退します。(そのうちの1人は数年引退することを切望していましたが、過失に忠実であり、夫がゴルフを優先するべきだと主張しているにもかかわらず、固執しています。) 私たちは、使用している種類のソフトウェアを提供している国内の3社のみのうちの1社によって開発されたシステムへの転換の道を歩み始めました。この会社は理論的には変換プロセスを完了することができますが、タイムリーにそれを行うためのリソースがなく、実行する必要のある種類のサービスを提供できないと信じるようになりました。私たちのビジネス。(自分の優先順位を設定でき、適切と思われるリソースを割り当てる権限を持っていることほど素晴らしいことはありません。) ハードウェアは問題ではありません。最新のサーバーで非常に効果的にエミュレートできます。COBOLとBASICが最新の言語である場合、現在のコンサルタントの代替品が今後見つかる可能性があるというリスクを負うことになります。 このようなレガシープラットフォームに集中し、私たちのようなシステムをサポートするためのプログラミングおよびソフトウェア開発の才能を提供し、適切なプログラミングの才能を見つけるリスクを背部から排除するITサポート会社のビジネスモデルがあるはずです若いプログラマーに生産的でやりがいのあるキャリアを持たせることを納得させる仕事。一部にはBASICのような古くてセクシーではない言語で。 要するに、非IT管理者として、この移行をどのように最適に管理できるでしょうか。
13 legacy 

5
リファクタリングによるマージの競合の解決
最近、リファクタリング全般の処理方法に関する議論に参加しました(それ自体が興味深いトピックです)。最終的に、次の質問が提起されました。 他の誰かが同じコードの機能に取り組んでいる間に誰かがコードの一部をリファクタリングしたために発生したマージ競合をどのように処理しますか? 基本的に、効率的な方法でこれに対処する方法がわかりません。これに関して従うべきベストプラクティスはありますか?レガシーコードが大量にあるシステムでこれを処理する方法に違いはありますか?

2
従来のプレーンなCプロジェクトへの単体テストの追加
タイトルはそれをすべて言います。私の会社は、完全にプレーンCで記述されたマイクロコントローラーデバイス用のレガシーファームウェアプロジェクトを再利用しています。 明らかに間違っており、変更が必要な部分があります。C#/ TDDのバックグラウンドから来たので、機能を変更しないことを保証するためのテストなしでランダムにリファクタリングするというアイデアは好きではありません。また、バグを見つけるのが難しいことは、わずかな変更(多くの場合、回帰テストを使用した場合に修正されると思います)によって導入されたことがわかりました。これらの間違いを避けるために、多くの注意を払う必要があります。コードの周りの多くのグローバルを追跡するのは難しいです。 要約する: リファクタリングする前に、既存の密結合コードに単体テストをどのように追加しますか? どのツールをお勧めしますか?(それほど重要ではありませんが、知っておくといいです) 私はこのコードの作成には直接関与していません(私の責任はさまざまな方法でデバイスと対話するアプリです)が、使用できる可能性がある場合、良いプログラミングの原則が残されていると悪いでしょう。

6
メインフレームの利点は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 メインフレームの欠点はよく踏まれています。高価で、レガシーで、コミュニティの縮小など。 マイナス面には特に興味はありませんが、現在のIntel / AMD&Linux / Windows環境よりもメインフレームハードウェア/ソフトウェアにメリットがあるかどうか興味があります。 MFは、I / O負荷が大きい場合に特に優れている(そして現在のサーバーよりも優れている)と言われています。これはまだ本当ですか?
11 legacy  mainframe 

12
若い開発者として、職場で「スタイル外」の技術を使用しなければならないことを心配する必要がありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私は最近大学を卒業しました(昨年5月!)。まだ学校にいたとき、卒業する前に就職したかったので、就職活動の非常に早い時期(おそらく早すぎる時期)に、学部卒業後に移りたいと思っていた地域に就職しました。 。 しかし、いくつかの理由で、私は今、この決定を数か月間推測しています。1つは、仕事にあまり挑戦していないということです。ここから始めてから、プログラミングの改善はそれほど進んでいません。ただし、仕事以外でもオープンソースで作業する時間を作ることができます(過去に持っていたことがあります)。そのため、この失望を回避する場所があります。さらに重要なことは、私の仕事は、基本的には奇妙な古いPerl Webアプリケーション(メイソンと奇妙な社内ORMを使用)で作業することであるという事実です。 もはや人気がなくなった技術を使って、ここで足を踏み入れていますか?将来、仕事に就くのに本当に役立ちませんか?私はめったにPerlの仕事を目にしません。そして、私がそうするとき、それは通常、私が興味のないことをしています(フロントエンドWeb開発のもの)。 システムプログラミング、視覚化、ネットワークプログラミング、または少なくともバックエンドWeb開発などは、実際に仕事をするのが楽しいトピックのようなものです。現在の仕事の経験が、これらのことを行うポジションに役立っているとは思えません。 。
11 legacy  perl 

5
レガシアプリケーションでコヒーレントアーキテクチャを開始する
私は、Asp.Netベースの大規模なWebサイトを担当しています。現在、これはWebアプリケーション(Webアプリケーションではない)、一部のWindowsサービス、および多数のクラスライブラリです。 データレイヤーは、LLBLGEN とLinq To LLBGenの混合、およびリファクタリングされていないレガシーインラインSQLのインスタンスを使用します。 マネージャータイプの実装がいくつかありますが、多くの場合、アプリケーションはスマートUIアンチパターンを示します(つまり、クラスの背後にあるコードのビジネスロジックが多すぎる) サイトのトラフィックはかなり高く、パフォーマンスは良好ですが、開発能力を約10人のチームにまで拡大しており、既存のミドルウェアの上に包括的な階層化設計が必要であることがますます明らかになっています。 私の質問はどこから始めればいいですか?私たちには10年のコード(ASP Classicのものを移行したものもあります)、さまざまなアプローチ、スタイルがあります。 コードベース全体のリファクタリングは現実的ではなく、おそらく望ましくありません 私はこれが新しい状況ではないことを知っています、この問題にどのようにアプローチするかに関して有用なアイデアや概念はありますか?

6
レガシーソフトウェア以外に、COBOLを使用する理由はありますか?
COBOLは今でも(頻繁に)金融コンピューティングに使用されています。それは古い言語であり、ほとんどのプログラマーはCOBOLを嫌い、または少なくとも嫌いです。これは問題をもたらします:COBOLがまだ使用されている唯一の理由は、レガシーソフトウェアがそれを使用するのですか、それとも他のプログラミング言語に比べて実際の利点があるのですか? ちょっと興味があるんだけど。

3
大きなメソッドをリファクタリングして何も壊さないようにする場合、何が役立ちますか?
私は現在、大規模なコードベースの一部をリファクタリングしており、ユニットテストはまったくありません。私は力ずくでコードをリファクタリングしようとしました。つまり、コードが何をしていてどのような変更が意味を変えないかを推測しようとしましたが、成功しませんでした。コードベースのすべての機能をランダムに破壊しました。 リファクタリングには、レガシーC#コードをより機能的なスタイルに移行すること(レガシーコードはLINQを含む.NET Framework 3以降の機能を使用しません)、コードのメリットがあるジェネリックの追加などが含まれることに注意してください。 費用がいくらかかかるので、正式な方法は使用できません。 一方、少なくとも「リファクタリングされたレガシーコードにはユニットテストが付属する」というルールは、いくらコストがかかっても、厳密に従うべきだと思います。問題は、500 LOCプライベートメソッドのごく一部をリファクタリングするときに、単体テストを追加することが難しいように見えることです。 特定のコードに関連する単体テストを知るのに役立つものは何ですか?コードの静的分析が何らかの形で役立つと思いますが、次の目的で使用できるツールと手法は何ですか。 どのユニットテストを作成すればよいかを正確に把握し、 そして/または私が行った変更が元のコードに影響を及ぼし、今とは異なる方法で実行されているかどうかを知っていますか?

4
大規模なレガシーコードベースを更新して特定の品質基準を満たすにはどうすればよいですか?
レガシーコードベースを改善するためのツールとテクニックについては多くの情報がありますが、実際に成功したケーススタディはありません。ほとんどのアドバイスはミクロレベルであり、マクロレベルで役立つ証拠が不足しているため、役立つものの、多くの人々を納得させるものではありません。 大規模なレガシーコードベースを更新して今日の品質基準を満たすようにし、完全に書き直すのではなく、実際に成功することが証明されている段階的な改善を具体的に探しています。 前: 大:1MLOCより大きい レガシー:自動テストなし 品質が悪い:複雑度が高く、カップリングが高く、回避された欠陥が多い 後 自動テスト より簡単なアップデート/メンテナンス 高品質:複雑さの軽減、コードの分離、少数の回避された欠陥 大規模なレガシーコードベースを完全に書き換えずに、上記の品質基準を満たすように正常に更新するために、実際にどのような段階的な手順が証明されていますか? 可能であれば、バックアップの回答に「成功した」品質改善プロセスを経た大規模なレガシープロジェクトの会社または事例の例を含めてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.