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

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

4
腐敗防止レイヤーとは何ですか、またどのように使用されますか?
腐敗防止レイヤーの本当の意味を理解しようとしています。私はそれがレガシーコードまたは悪いAPIを移行/回避する方法であることを知っています。私が理解していないのは、それがどのように機能し、何が望ましくない層からきれいに分離するのかということです。 私はいくつかの検索を行いましたが、簡単な例や説明が見つからないため、それを理解し、簡単な例で説明できる人を探しています。私の質問を満足させる答えは、単純なものである必要があり(必ずしも短くはありません)、実装と使用のわかりやすい例を提供する必要があります。 私のユースケースについては、この質問を参照してください。


11
レガシーコードを引き渡すためのベストプラクティス
数か月後に同僚が新しいプロジェクトに移り、私は彼のプロジェクトの1つを引き継ぎます。準備するために、私はすでにMichael FeathersのLegacy Codeでの効果的な作業を注文しました。 しかし、この本は、私がこれまで見つけたレガシーコードに関するほとんどの質問と同様に、コードをそのまま継承する場合に関係しています。しかし、この場合、私は実際に元の開発者にアクセスでき、秩序あるハンドオーバーのための時間があります。 私が継承するコードの一部の背景: 機能している:既知のバグはありませんが、パフォーマンス要件が上昇し続けるにつれて、それほど遠くない将来にいくつかの最適化が必要になります。 文書化されていない:メソッドおよびクラスレベルでの文書化はほとんどありません。しかし、私は長年そのAPIに対して(ブラックボックスとして)書いてきたので、コードがより高いレベルで行うことになっていることはよく理解されています。 上位レベルの統合テストのみ: APIを介した他のコンポーネントとの適切な相互作用をテストする統合テストのみがあります(再び、ブラックボックス)。 非常に低レベルで速度が最適化:このコードはアプリケーションシステム全体の中心であるため、その多くは長年にわたって数回最適化され、非常に低レベルです(一部には特定の構造体用の独自のメモリマネージャーがあります) /記録)。 コンカレントおよびロックフリー:コンカレントおよびロックフリープログラミングに非常に精通しており、実際にこのコードにいくつかの部分を提供しましたが、これにより複雑さがさらに増します。 大規模なコードベース:この特定のプロジェクトは1万行を超えるコードであるため、すべてを説明する方法はありません。 Delphiで書かれています。この問題を言語に依存しないと信じているので、私はこれをそこに置くつもりです。 彼の出発までの時間をどのように費やすのが最適か疑問に思いました。ここにいくつかのアイデアがあります: マシン上ですべてをビルドする:すべてをソースコード管理にチェックインする必要がありますが、たまにファイルをチェックインすることを忘れていないので、これがビジネスの最初の順序になるはずです。 より多くのテスト:変更を行うときに導入したバグを早期にキャッチできるように、より多くのクラスレベルの単体テストが必要ですが、現在のコードはテストできません(巨大なクラス、長いメソッド、多すぎる相互依存関係)。 何を文書化するか:まず最初に、低レベル/高度に最適化された性質などのために理解するのが難しいコードの領域に文書を集中するのが最善だと思います。見苦しくてリファクタリング/リライトが必要なものがいくつかあるのではないかと心配していますが、実際には私が見逃すかもしれない正当な理由でそこにあった最適化です(Joel Spolsky、Things You Should絶対にしない、パートI) 文書化の方法:いくつかの散文を伴うアーキテクチャのクラス図と重要な機能のシーケンス図が最適だと思います。 誰が文書化するのか:私は彼に文書を書いてもらうか、彼にそれを私に説明してもらうために、何が良いだろうと思っていたので、文書を書くことができます。私は、彼には明らかであるが私ではないものが適切にカバーされないことを恐れています。 ペアプログラミングを使用したリファクタリング:これは時間の制約のために実行できない場合がありますが、多分私は彼のコードの一部をリファクタリングして、物事がそうである理由についての入力を提供するために彼がまだいている間にそれをより保守可能にすることができます。 これにコメントして追加してください。このすべてを実行するのに十分な時間がないため、特に優先順位を付ける方法に興味があります。 更新:引き渡しプロジェクトが終了したので、以下の回答で自分の経験を使ってこのリストを拡張しました。

10
コードはいつ「レガシー」ですか?[閉まっている]
すべて完了しました。一部のコード(多くの場合、継承したもの)を「レガシー」とラベル付けしましたか?しかし、それはまだ実稼働システムで使用されています-それは本当にレガシーですか?そして、何がレガシーなのでしょうか?完全に機能するコードのこの不当なラベル付けを避けるべきでしょうか。ラベリングは純粋な利便性であり、新しいものを押し通して上層部の経営陣を満足させることができますか? 回答の要約 答えを見ると、4つの一般的なテーマがあります。内訳は次のとおりです。 配信されたコード:6 デッドシステム:2.5 単体テストなし:2 開発者がいない:1.5

14
「非表示のIT」を禁止または制御するアドホックソフトウェアアプリケーションを作成および保守する必要があるのは誰ですか?
大企業は通常、問題を抱えています。スタッフとお金が足りないため、従業員が望むすべてのプログラムを(時間を節約し、プロセスを最適化するために)書くことは不可能です。 その後、(少なくとも一部の)コーディング経験を持つ一部の人々(または安価な学生/インターン...)によって隠されたプログラムが作成されます。状況によっては、これらのアプリケーションの重要性が高まり、1人のユーザーから部門全体に広がります。 次に、重要なポイントがあります:アプリケーションを保守し、新しい機能を追加するのは誰ですか?そして、このアプリは重要です。それが必要とされています。しかし、インターンは会社を辞めました。それがどのように機能するかは誰にもわかりません。たくさんのソースとある種のドキュメントしかありません。 IT部門の外でアドホックに行われるアプリケーション開発(Excelマクロなどのマイナーなものを除く)を試行または制御または禁止することは理にかなっていますか?

5
専用のメンテナンス作業はプログラマのキャリアを妨げますか?[閉まっている]
過去3年間の私の仕事の大部分は、再販売する前にパッチの適用や時折の改良が必要なレガシーシステムの維持に主に取り組んできました。 多数のプロジェクトを抱え、開発者が限られている企業では、専任のメンテナンスプログラマが果たすべき重要な役割を理解しています。 しかし、私が現在のキャリアの進歩を判断し、仲間を見ると、請負業者と企業開発者の両方; 私が触れた領域の面でかなりの幅を獲得したので、私ははるかに遅れているように感じますが、深さはあまりありません。ブログを始め、自分の小さなgit-hubプロジェクトに取り組み、仕事の後に定期的に個人的なコーディングを行う時間があるように私の人生を再スケジュールすることで、これに対処し始めました。 メンテナンス作業から逃れるために他の会社に面接したのは、特定のことに焦点を当てた3年の経験を持つ人に必要な深い知識レベルがないので、スキルレベルがかなり後輩であると自分自身を表さなければならないだろうと思う機能開発のパスは。ですから、私の現在の仕事の経験の半分は、長期的には無駄になります。 しかし、これは私の個人的なジレンマにあまりにも集中していると感じたら謝罪する私の主な質問につながります: 専用のメンテナンスプログラミングの役割は、初期のキャリアにとって不利になりますか?他のプログラマは、このような役割を避ける権利がありますか?この作業を行うと、後輩としてやり直す準備ができていない限り、同様のタスクを実行できなくなりますか?

8
時代遅れの技術で開発する利点は何ですか?[閉まっている]
少しの背景: 私は大企業で働いており、Windows XPを使用し、VB6 / VB.NetでWinformsをコーディングし、VB.NetでいくつかのWebFormsをコーディングしています(95%のメンテナンスコード)。4:3 19インチの画面が1つあります。Windowsの最新バージョンは近日中にリリースされる予定ではありません。 入社時にこれについては何も言われていませんでしたが、もっと最新のテクノロジーやフレームワークを使って作業することになると誤解されていました。 私は以前の仕事で、より現代的なフレームワークと他のプログラミング言語の両方でより多くの最新の経験があり、他の会社の開発者の友人に追いつくとき、彼らが最新のASP MVCフレームワークをどのように使用しているのかを耳にしますVagrant / Ruby on Rails /など、私は緑色の目をしています! 私は別の仕事でかなり早く自分を整理することができましたが、これにもう少しチャンスを与えるべきだと感じています。 質問: 私は自分の現在の仕事がそれほど悪くないことを自分自身に納得させようとしています。それでは、このような役割の利点は何ですか?時代遅れのテクノロジーを使用する利点はありますか?おそらく、私はもっと新しいものを使って作業するのを拾わないいくつかのテクニックですか?または、これは職業が死ぬ場所であり、私はまだ魂を持っている間に出るべきです?
28 skills  legacy 

5
ユニコードではなく日本語固有のエンコーディングを使用するように導く問題は何ですか?
職場では、Shift-JISなどのエンコーディングの日本語のテキストファイルがたくさんあります。それは多くの原因が文字化け(判読できない文字)すべてのコンピュータユーザのための問題を。Unicodeは、すべての言語に単一の文字セットを定義することでこの種の問題を解決することを目的としており、インターネットでの使用にはUTF-8シリアル化が推奨されます。それでは、なぜ皆が日本語固有のエンコーディングからUTF-8に切り替えないのでしょうか?UTF-8のどのような問題や不利な点が人を引きつけていますか? 編集:W3CはUnicodeに関するいくつかの既知の問題をリストしていますが、これも理由でしょうか?

4
自動テストを使用してレガシーコードを改良するためのベストプラクティス
比較的大きくて古いコードベースで、既に定義されているインターフェイス(C ++ヘッダーファイルのセット)を再実装するタスクを引き受けようとしています。これを行う前に、可能な限り完全なテストカバレッジを取得したいので、再実装エラーをできるだけ早く簡単に検出できます。問題は、既存のコードベースが、(非常に)大規模なクラスと関数、高度な結合、(多くの)副作用を伴う関数などで簡単にテストできるように設計されていないことです。 同様のタスクの以前の経験や、自動化されたテスト(ユニット、統合、回帰など)をレガシーコードにどのように改良したかについての良い具体的なヒントを聞いていただければ幸いです。
22 testing  legacy 

6
ユニットテストを追加することは、よく知られているレガシーコードにとって意味がありますか?
私はTDDの意味でのユニットテストについて話している。(自動化された「統合」ではなく、テストと呼ぶのが好きです。) レガシーコード:(C ++)テストなしのコード。(参照:マイケルフェザーズのレガシーコードでの効果的な作業) しかし、次のようなレガシーコード:私たちのチームが過去10〜5年間作業してきたコードです。そのため、何かを変更するためにどこに置くべきかについて非常によく考えています。 私たちは何のために(Boost.Test経由)の場所でのユニットテスト持ち、いくつかの後に来たか、ユニットテストのための「自然な」フィットされているモジュール(一般的なアプリの特定のコンテナ、文字列のもの、ネットワークヘルパーなど) 適切な自動受け入れテストはまだありません。 さて、最近、3つの新しいユーザー向け機能を実装する「喜び」がありました。 それらのそれぞれは、私が変更するのに必要なコード部分に慣れるのに約1〜2時間、変更するのに必要な(小さな)コードを実装するのに1〜2時間、そしてアプリを確認するのにさらに1〜2時間かかりましたその後正しく実行され、実行するはずでした。 今、私は本当に小さなコードを追加しました。(各機能に対して1つのメソッドといくつかの呼び出し行があると思います。) このコードを(WEwLCで提案されている方法のいずれかを介して)除外するので、単体テストが理にかなっている(完全なトートロジーではない)ために、さらに2〜4時間は簡単にかかっていました。これにより、各機能に50%〜100%の時間が追加され、すぐにメリットは得られません。 コードについて何かを理解するのに単体テストは必要ありませんでした コードがアプリの他の部分に正しく統合されているかどうかをテストする必要があるため、手動テストは同じ量の作業です。 確かに、あれば、後に、「誰かが」に沿って来て、そのコードに触れ、彼は理論的には、そのユニットテストからいくつかの利点を持つことができます。(テストされたコードの島はテストされていないコードの海に住んでいるので、理論的にのみ。) したがって、「今回」は、ユニットテストを追加するというハードワークを行わないことを選択しました。テスト対象のものを取得するためのコード変更は、機能を正しく(そしてクリーンに)実装するためのコード変更よりもはるかに複雑でした。 これは、強く結合されたレガシーコードの典型的なものですか?私は怠け者ですか/チームとして間違った優先順位を設定していますか?または、オーバーヘッドが高すぎないものだけをテストするのが賢明ですか?
21 c++  tdd  legacy  unit-testing 

7
Fortranベースの大きな数値演算コードベースをどのように近代化できますか?
学界の友人からアドバイスを求められました(私はC#ビジネスアプリケーション開発者です)。 彼は、Fortranで医療画像分野で書いたレガシーコードベースを持っています。ベクトルを使用して膨大な数の計算を行います。彼はクラスター(30のコア)を使用し、現在は500のGPUを持つ単一のワークステーションに向かっています。 ただし、次にコードベースを使用する場合: 他の人々は次の10年サイクルにわたってそれを維持することができます ソフトウェアの調整を高速化 再コンパイルせずに異なるインフラストラクチャで実行できます 私からのいくつかの研究の後(これは非常に興味深い分野です)、いくつかのオプションがあります: Nvidiaの PythonとCUDAを使用します 関数型言語で書き直してください。たとえば、F#またはHaskell クラウドベースに移行し、HadoopやJava などを使用する Cを学ぶ これについてどのような経験をしましたか?私の友人は彼のコードベースを近代化するために何を見るべきですか? 更新:@Markと回答してくれたすべての人に感謝します。私の友人がこの質問をしているのは、レビューを行うのがプロジェクトのライフサイクルの中で最適な時期だからです。Fortranでリサーチアシスタントを高速化するには時間がかかります(私はC#、特にツールが好きで、古い言語に戻ることは想像できません!!) Fortranで純粋な数値を処理し続けることをお勧めしますが、それを新しいものでラップすることをお勧めします。おそらくPythonは、かなり簡単に習得できる汎用プログラミング言語として学界の拠点になっているようです。 Medical ImagingとCUDAのFortranラッパーを書いた人を参照してください。Fortran90ラッパーをNvidiasのCUFFTライブラリ(CUDA SDKから)に合法的に公開できますか?。
21 math  legacy  fortran 

6
恐ろしく設計されたデータベースの上に良いコードを書く希望はありますか?
これが私の苦境です。私が最近継承したいくつかのプログラムの1つは、バックエンドに恐ろしいデータベースで構築されています。尊敬されているクリエイターは、どうやらリレーショナルコンセプトを高く評価していなかったようです。一意のクライアントIDとして名前が付けられた、すべてのクライアントのテーブル。83の暗号化された名前のフィールド。コードはすべて手続き型であり、多数のインラインSQLステートメントが連結されています。 同じデータベースから実行される重要な補助アプリケーションが提供されなかったため、私はそれをゼロから再作成するという任務を負っていました。私は唯一の開発者であり、少なくとも半分の時間は運用に費やされているため、私の第一の責任でもありません。これから30日間の避けられない期限が設定されます。 私は経験が浅いにも関わらず、このデータベースと既存のアプリケーションを以前よりもはるかに良く設計できたと確信していますが、データベースを変更し、既存のアプリケーションを調整し、私がそうしなかったことを確認するのは現実的ではないと思います追加のアプリケーションをこれほど迅速に作成する必要がある間、何も壊しません。 だから私はひどいデータベースにこだわっていると仮定しましょう。このような悪い構造で作業する必要がある場合、それに準拠するものを書くと、何かが完全に壊れたり新しい機能が必要になるまで技術的な負債が山積みになってしまいますか?どうすればこの状況にアプローチし、うまくいけば機能するアプリケーション以外に何か良いものを得ることができますか? 編集:誰かが興味を持っている場合、この恐ろしいデータベースとそれを実行したアプリケーションを廃棄することになりました。補助的なアプリケーションの作成を外部委託しました(私はこの設定には関与していませんでした)が最終的に2人の異なる請負業者に委託されました。私は、今日もまだ使用されている3日間で、部分的に機能する恐ろしい修正のハックを急いで行かなければならなくなりました。

5
エイダは本当になくなった?
人々はまだエイダを使用していますか?(ほとんどが国防省で使用されていました) すべてのアプリケーションはAdaの「レガシー」で作成されていますか? Adaナレッジはまだ販売していますか
17 legacy  ada 

4
クラシックASPからASP.netまたはASP.net MVC
古典的なASPで開発されたWebアプリケーションがあり、5年間で100ページの巨大なデータベースと毎日少なくとも10ページ以上を通過する10000人以上のアクティブユーザーを含む現在の形式に進化しました。 ここで、最新バージョンの.netにアップグレードしたいと考えました。最初はアプリ全体を書き直すことを考えていましたが、シナリオを分析した後、多くの専門家によって提案されていない実行可能なオプションではないことがわかりました。他の方法でそれを行う方法についてはまだ決定していませんが、顔の書き換えを達成する方法についていくつかの考えを持っています。 オプション1: このアプリケーションのメインモジュールを識別し、データベース(既存)、ビジネスロジック、ビューなどの異なるレイヤーにアプリケーションを分離することで、それらを1つずつ書き換えることを考えました。これにより、新しく開発されたモジュールが既存のシステムに追加され、特定のモジュールの古いページが新しいページに置き換えられます。同時に、古いシステムと一緒に新しいレイヤーをテストし、自信が持てたらリリースします。また、ビジネスロジック用のAPIのような構造を開発することも考えました。これは、外部アプリケーションとしてビューによってアクセスされます。 オプション2: 現時点では、単純なモジュールを作成し、IFrameを介して従来のASPページで使用していますが、従来のASPとIFrameの新しいページとの間でデータを送信するのは非常に面倒でした。 これは、ユーザーベースに影響を与えずにアプリケーション全体を書き換える方法を計画している段階です。 そのようなシナリオでアプローチすべきかどうかについて、他のプログラマーの意見、意見、提案を取得したいですか?誰かがこの種のシナリオに直面した場合、あなたの意見も共有してください。 また、ASP.net MVCの使用がこれに役立つことを知りたいですか? 更新:あなたの意見を述べるための両方の答えをありがとう。アプリケーションを従来のaspからasp.netまたはasp.net mvcに移行する際に、上記で指定した両方のオプションでより多くの入力を取得したいです。asp.netまたはasp.net mvcを選択するという点ではなく、移行の部分についての意見、ポイント、および考えをすべて理解できれば、私にとって大きな助けになります。

9
全体として:レガシーシステムをどのように維持しますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または詳細な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 ニューヨーク-超高層ビルを震わせた爆発により、83年前の蒸気パイプは、ニューヨークや他の米国の都市の下にある何マイルものチューブ、ワイヤー、鉄が古くなり、危険なほど不安定になる可能性があるという強力なメッセージを送りました。 マンハッタンのバースト蒸気パイプに関する2007年7月のストーリー ソフトウェアの腐敗と技術的負債について聞いたことがあります。 そして、私たちは次のような人から聞いたことがあります: 「ボブおじさん」マーティン-「混乱させることの結果」について私たちに警告した人。 Michael C. Feathers- 「レガシーコードで効果的に作業する」ためのガイダンスをくれた人。 したがって、ソフトウェアエンジニアリングコミュニティはこれらの問題を認識しています。 しかし、私たちの社会全体は、これらの問題が稼働中のシステムやアプリケーションをどのように悩ませるのか理解していないように感じます。 Steve McConnellが指摘するように: ...金銭的負債とは異なり、技術的負債ははるかに目立たないため、人々はそれを無視する方が簡単です。 もしこれが真実であり、そうだと思うなら、政府や企業は手遅れになるまでハッカーに対する定期的な保守と強化を延期するのではないかと恐れています。[NYCや蒸気パイプによく似ています。] 私の質問: NYCや蒸気パイプに相当するソフトウェアを回避する方法はありますか?

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