web-dev-qa-db-ja.com

全体として、レガシーシステムをどのように維持しますか?

ニューヨーク-超高層ビルを震わせた爆風で、83歳のスチームパイプは、ニューヨークや他の米国の都市の下にある何マイルにも及ぶチューブ、ワイヤー、鉄が古くなり、危険なほど不安定になる可能性があるという強力なメッセージを送りました。

マンハッタンのバースト蒸気管に関する2007年7月の話


software rot および technical負債 について聞いたことがあります。

そして私達はのようなものから聞いた:

したがって、確かにソフトウェアエンジニアリングコミュニティはこれらの問題を認識しています。


しかし、私たちの集合社会は、これらの問題がどのようにして作業システムやアプリケーションに悪影響を与えるかを理解していないように感じます。

Steve McConnell notes として:

...金融債務とは異なり、技術的債務ははるかに目立たないため、人々はそれを無視しやすくなります。

これが真実であり、私がそうであると私が信じている場合、政府と企業が手遅れになるまで、ハッカーに対する定期的な保守と強化を延期することを恐れています。 [ニューヨークやスチームパイプとよく似ています。]


私の質問:

  • NYCやSteamパイプに相当するソフトウェアを回避する方法はありますか?
15
Jim G.

レガシーシステムのメンテナンスに関連する主な問題は、a)それらのシステムに慣れていて、b)システムのメンテナンスを続行する意思がある人が不足していることです。

私は最近、若いプログラマーがメインフレームにまったく興味を持っているかどうかについて同様の質問をしました。コンセンサスはノーに傾いた。

レガシーシステムを維持することは、キャリアの自殺と見なされます。慣性が支配する多くの企業では、それらのシステムを維持するためのトレーニングスタッフへの投資がほとんどないため、人員側で単一障害点が発生します。私が知っている、同じようなシステムで作業している多くの人々は、システムの長期的な将来は見られず、キャリアの不利益しか見られないため、ルートを探しています。

一部の業界では、データ保守規制が、レガシーシステムの監視を合理的に行うための重要な要素になる場合があります。これは特に金融業界の問題だと思います。これらの規制は-私の知る限り-通常は時間制限があります。

ただし、実際には次のようになります。

レガシーシステムのデメリットを迂回できるより近代的なシステムに切り替わるコストが安くなるため、レガシーシステムを維持するコストを下回るグラフにポイントが現れます。

IBMは現在多くのメインフレームを販売しており、彼らの大型マシンが若い専門家の列を締め出さないようにするために非常に懸命に取り組んでいます。しかし、この段階では十分ではないと思います。彼らは、二酸化炭素排出量と実際の処理能力の面でいくつかのUSPを持っています。

ただし、IBMメインフレームをLinuxで実行できるためにIBMメインフレームを購入するすべての人にとって、電力コストが低く、効率が高いため、その世界に精通しているため、サーバーファームを選択する人がさらに何人かいます。プログラマーも増えています。

最終的には、関係する業界に大きく依存します。私は何年もの間メインフレームに大きく依存してきた特定の業界で働いており、それらはまだ広く使用されています。しかし、ホスト型ソリューションの人気が高まり、大企業でスキルを統合できるようになりました。これにより、個々の企業が直面する問題点のいくつかが障害点から取り除かれます。さらに、一部のサプライヤは、非メインフレームベースのソリューションを非常に強く検討していますその業界に固有の問題のために。

要約すると、私が言っていることは、概して、メンテナンスと移行の経済的ポイントが移行に有利になるとすぐに、レガシーシステムからの移行への動きがあるということです。しかし、それは新しくてファンキーではなく、次の大きなもののように非常に公的な顔をしていないため、多くの人にはほとんど見えません。その移行は、サービスプロバイダーまたは新しいテクノロジー(特に、サービスプロバイダーが直接影響を受けるサービス)への移行である可能性があります。

私の経験-特にネットワーク-は、レガシーシステムへの依存を取り除く動きがあるということです。

12
temptar

ほとんどの企業はすでに技術的負債を認識しておらず、文字通りそれらの周りで崩壊して破産に至るまで(それがその時点に到達した場合)、物事が悪いことに気づくことさえありません。私は実際にそれを見たことがあるが、それはきれいではなかった。さらに悪いことに、私はビジネスオーナーに増え続ける技術的負債を認識させようと繰り返し試み、それを修正する必要があり、修正に必要な時間とリソースを費やすことを望まなかったために拒否されました。それ。最終結果は、10年以上後にシステムが(私がいなくなった後で)破滅的に失敗し、回復できずに倒産したのです。問題を完全に無視するよりも問題を修正するほうがよいでしょう。私はその会社の馬鹿げた愚かさについて何時間も怒鳴ることができました、そして私を最も苦しめたのは、もし所有者が完全に避けられたかもしれないということでしたwere n't他のすべてを完全にカットすることで、短期間で投資を回収します。

彼らのシステムがひどく書かれていて、いくつかの重いリファクタリングが必要である場合、ビジネスにそれを伝えるのは非常に困難です(それがis悪いので通常そうである完全な書き換えではない場合)。ほとんどの場合、変更を加えるのは難しいと警告したり、新しい機能を追加したりする(正しい方法、つまり、単なるがらくたを重ねるだけではない)か、さらには検討さえしたとしても、彼らはあなたを撃墜します- あなた現在の状態のシステムに問題があるため、ビジネスに不利益をもたらします。

私は正直に言って、それは負けた戦いであり、戦いに値しないものだという結論に達しました。技術的な負債について知るのに十分賢い人々は、それについて2度話される必要はなく、最初から危険を認識しています。そして、とにかく手遅れになるまで、他の誰もが何らかの理由や警告に耳を傾けることはありません。最良の(そしてもちろん、最も非現実的な)オプションは、自然な選択を開始し、無知な人々を絶滅させ、インテリジェントなものだけを残すことです。私がこれまでに個人的に試みたすべてのものが完全に無視されたか、会社の目で私の価値を減らしたか(「不満」のため)、あるいは私は「壊れていないもの」を修正することに「焦点を合わせすぎ」ていたために終了しましたが、実際にはwasが壊れていて、壊れているのを見るのに適切な心構えが誰にもありませんでした。

12
Wayne Molina

ニューヨークや他の米国の都市の下にある何マイルにも及ぶチューブ、ワイヤー、鉄が古くなり、危険なほど不安定になる可能性があります。

逸話については、同じ議論が16-17世紀のパリで行われました。非常に多くの穴とトンネルがその下に掘られていて(その地域の地質に起因する自然の穴に加えて)、時折建物が崩れるほどでした。

街区全体が地面に崩壊するまでに、不要な穴やトンネルを砂利や骨で埋めるように指示が出されていました(墓地の混雑の問題もありました)。市はコンクリートが発明されるまでそのように生き残った。

ここでの私のポイントは、多くの組織はソフトウェアのメンテナンスを行うのにぎりぎりまで待つ傾向があるということですが、プログラマー(土木技師など)は多くの場合、仕事を迅速かつ適切に実行します。

Y2kバグを乗り切りました。 Y2036のバグにより、多くの組織はハードウェアとソフトウェアのアップグレードを余儀なくされます。世界は2012年に終了する可能性があります。しかし、コンピューター科学者は社会学者でも 文学評論家 でもありません。

ああ、そしてその間、次のメンテナンスがそうであるように、次のメンテナがあなたがどこに住んでいるかを知っている悪質な精神病者であるかのようにコードを書いてください。

7

これはすでに大きな問題です。そして、それは変化の兆候を示していません。

60年代と70年代には、あらゆる種類の大規模な機関が紙の会計からコンピューティングシステムの会計に移行しました。彼らは圧倒的にCOBOLを選びました。 ほとんどは、これらのCOBOLシステムの更新されたバージョンをまだ使用しています。これに関するいくつかの統計については http://cis.hfcc.edu/faq/cobol を参照してください

アーノルドシュワルツェネッガーが数年前に6か月の開発なしでは200,000人の州労働者の給与を単純に削減できないことを発見したときなど、時々、これについてランダムな通知を受け取ります( を参照してください)http検証のための://www.infoworld.com/d/developer-world/californias-cobol-conundrum-067 )。

切り替えのリスクを考えると、これらのシステムの変更を正当化することは非常に困難です。ずっと。それが私の生涯の現実でした。しかし、私がその事実が私の子供たちの人生の中で変わる理由はないと思います。または彼らの子供の生涯のどちらか。

古いバージョンのコードをメンテナンスしている友達がいます。彼女が最初にそこで働いてから30年後に会社に戻った友人がいます。彼女のプログラムは変更されず、まだ 言語 で実行されていました。覚えておいてください!

最後に、両方が発生する可能性のある実話を紹介します。

1970年代に、トレーダーにオンライン市場を提供するために company が設立されました。 PDP-11は彼らにとって適切な価格/パフォーマンスであったので、彼らはそれを選びました。彼らはマシンのパフォーマンスの限界を押し広げていたため、高度に最適化されたPDP-11アセンブリでシステムを作成しました。数年後、PDP-11は販売されなくなりました。しかし、ビジネスは素晴らしく、機械は長持ちし、中古の交換は簡単に手に入れることができました。彼らはプラットフォームを維持した。その数年後、代替品を入手するのが難しくなりました。主要なプロジェクトは、取引プラットフォームを置き換えるために行われました。失敗した。彼らはもう一度試した。そして再び失敗した。失敗の主な原因は、誰も彼らの取引システムがどのように機能するかを知らなかったこと、そしてもはや誰もPDP-11アセンブリを読むことができなかったことでした。その後、救いが当たりました。誰かがLinuxで動作するPDP-11アセンブラを作成しました。

したがって、2000年に、年間10億ドル規模のビジネスに入る取引は、イーサネットデクネットブリッジを介してLinuxマシンに行き、高度に最適化されたPDPで記述されたソフトウェアシステムで取引を実行するPDP-11マシンをエミュレートしました。 11アセンブリ。スピードのために。

この10年間、私はその会社とは関係がありませんでした。したがって、エミュレートされたPDP-11でまだ実行されているかどうかはわかりません。 10進数化がマージンを痛めつけていたことを知っているので、彼らは移行するためにさらに別の努力をしました。 (私はそこから解雇された何人かの人々にインタビューしたので、私は話を学びました、そして私は何が起こったのか尋ねました。)しかし、以前の失敗を考えると、彼らがそのシステムをうまく入れ替えなかったということを、奇妙なことよりも良くします。

4
btilly

私は最近、レガシーコードをどう思いますか?昨年のコード、過去10年間のコード、または前世紀のコード?

お金は、レガシーシステムのメンテナンスに関する会話を促進します。技術的負債は、システムを変更するためのコストの増加としてその形を取ります。

私は設計が不十分でインテリジェントに設計されたシステムを使用してきました。興味深いのは、それらを維持するためのコストがそれほど変わらないことです。最大の問題は、現在使用されているアーキテクチャが正しくないことです。これは通常、スケーリングの問題や大きな変更が必要な場合に発生します。コードの主要な領域をシングルスレッドからマルチスレッドに簡単に変換することはできません。

私が経験する最も重要な問題は、使用される開発言語です。古いシステムは現在あまり人気のない言語で書かれているため、より多くのトレーニングを行うか、より熟練した(高価な)希少なリソースを採用する必要があります。どちらの場合も、プールが小さいため、解決策と同じくらい多くの問題を引き起こす傾向がある熟練した個人を見つけるのに苦労します。

約束された書き換えについては、莫大な投資があったほとんどのシステムは書き換えを正当化しません。ソフトウェアがどれほど長く機能し続け、機能強化できるかは驚くべきことです。ハードウェアの変更(私の会社がサポートする一部のシステムでは専用ハードウェアを使用しています)が最大の問題になる傾向があります。拡張機能は、多くの場合、レガシーコードを新機能と統合するメカニズムによってのみ制限されます。

4
Jim Rush

ユーザーの観点からは、非常に純粋な懸念のように聞こえます。腐敗を遅らせる、または回避するためには、問題のソフトウェアに束縛がないようにする必要があります。その発行元は、ソースコードを無料に設定するか、最後のユーザーが使用を停止するまでソースを維持およびアップグレードするビジネスに従事している必要があります。それ以外の場合は、ビジネスの世界で同様の腐敗が原因で彼らが廃業する可能性が非常に高いため、ソフトウェアを腐敗に対して完全に開いたままにしておきます。

つまり、ソフトウェアの著作権とライセンスの制限の期間は非常に短くなければなりません。その期間の終わりに、ソフトウェアとそのコードベースはパブリックドメインに入り、そこに留まります。したがって、ユーザーがソースをアップグレードし続けること、または誰かにそれを行うように依頼することを可能にし、それによって腐敗を遅延および/または回避する。

または、フリーソフトウェアのアイデアに少しでも心がけている場合は、AGPLやGPLなどのフリーライセンスまたは他のフリーソフトウェアライセンスの下でプログラムを作成できます。私が見てきたように、ソフトウェアのソースが何らかの理由でそれを改善するために開発者にこれ以上興味を示さなくなったとき、ソースベースは人食いになり、新しい生活を始めます。 Debianオペレーティングシステムのパッケージは、私が見た限りでは、このライフサイクルに従う傾向があります。

3
vpit3833

さまざまな政府および民間業界のアプリケーションをサポートしてきたので、ほとんどの企業と少なくとも米国政府は、コードをローテーションさせ、最新のセキュリティトレンドを維持しないことの危険性を十分に認識しています。

私たちは定期的にソフトウェアをさまざまな感受性に対して認定する必要があり、ほとんどの政府の電子システムは、古いものでも、それらを安全に保つために定期的な更新を取得します。

もちろん例外はあり、ハッカーは常に動いていますが、概して人々はあなたが何かを投げ出して二度と触ることはできないということをかなり知っていると思います。

2
Bill Leeper

警告:これは少し自由形式になります...

あなたの懸念を見る方法は2つあると思います。

考えてみれば、一部のスペースシャトルや衛星は、最初にそれらを起動したのと同じコードを実行しています。一方、一部のリモートは(非常に)リモートであっても更新できるように設計されています。

重要なのは環境です。もちろん、環境を変更しない限り、コードが古くなることはありません。この場合、コードの腐敗は実際には存在しません。コード自体(または生成されたバイナリ)は腐敗することはありません。まったく別の角度から攻撃を開始すると、壊れる可能性があります。それは腐敗しているということではなく、環境に順応していないということです。それを進化論的な問題と考えてください。

しかし、私たちの環境は変化します。そして、どういうわけか、問題の鍵となるのは解決策でもあります。私たちの環境は急速に変化するため、今日ではソフトウェアソリューションが時間の経過とともに進化しないとは考えていません。過去1年間に更新されていないソフトウェアプロジェクトを見落とし、明確なロードマップを作成しない製品およびカスタマーサポートについてうめき声を上げます。そして、これがうまくいくときでさえ-あなたは明確なロードマップ、良いサポート、定期的なアップデートを手に入れます...-チャレンジャーが指数関数的に成長して浮上する可能性は常にあります。私たちはしばしば、確立された大企業が常に支配的であるという考えを間違えます。ただし、群れの支配的な要素が古くなるのと同じように、超大規模なソフトウェア/ハードウェア/ベンダーが古くなるにつれ、何でもです。または少し怠惰。そして、挑戦者がやって来て、確立されたドミナントが5または10年前にそれをしたかもしれないよりもさらに速く物事を好転させます。あるいは、市場が混乱している間(経済的に言えば、さまざまな分野に影響を与える)、優勢な人がうまく打って、ほとんど生き残ってから、状況は続くでしょう。多分それは不完全に見えますが、それ自体は有機的なプロセスです。

したがって、ユーザーの観点からは、それほど大きな問題ではないと思います。ユーザーが別の方法を使用できるようになるため(おそらく、シームレスな移行/移行で...うまくいけば)、コードの腐敗は発生しません。

ここで、ユーザーの視点から物事を見ていない、または不明な理由、政府の開発、空間旅行などの理由で、競争に対して免疫があり、本当に想定されているシステムについて話していると仮定します。非常に長い間存続/存続するように構築するには、参照したテキストを調べる必要があります。そしておそらく、信頼できるシステムとフォールトトレラントシステムに関するいくつかの文献があります。さらにプッシュしたいと思うかもしれませんが。私たちはフォールトトレランスだけを求めているのではなく、進化的なシステムを求めています。

進化の問題は、変更が導入され、変更により障害点が導入されることです。ここで、これらと、それらに対処するために何ができるかを見てみましょう。

インフラストラクチャ/アーキテクチャ/エンジニアリングという比喩は依然頼ることができます(結局のところ、私たち全員がソフトウェアエンジニアですが、今のところ、ソフトウェアエンジニアリングなどというものはありません)。ビッグベンがまだ動作している(グリッチがいくつかある)か、エッフェル塔がまだ立っている間に、チューブシステムがまだアクティブである(いくつかのグリッチがある)間は理由があります。それは、インフラストラクチャの重要な(またはそれほど重要ではない)要素を使用して、ソフトウェアで実行する必要があること、つまり継続的な検査を行うためです。これらのエンティティは必ずしもこれほど長持ちするように設計されたわけではありませんが、永続的な監視と必要に応じたタイムリーな改善と修復の恩恵を受けています。必要であれば、修正プログラムを呼び出します。

一方、継続的な検査が不可能であることを知っていても、中断することなく永続的に実行できるように設計された設計もあります。この場合、優れたデザインと正式なモデルに目を向けます。信頼性の要素(可用性、信頼性、安全性、完全性、保守性)は、特定の環境に対して定量化できます。統計は残りの部分と将来を計画するために残りを行います。これが問題をもたらします。本当の意味で、進化的なシステムを構築することさえ可能ですか?

1
haylem

Clean CodeのJeff Langerが同様の質問をしています... Steamパイプへの言及なし:)

作業中に優れたデザインを作成するのに役立つ、4つの簡単なルールに従うとしたらどうでしょうか。これらのルールに従うことにより、コードの構造と設計に関する洞察を得て、SRPやDIPなどの原則を適用しやすくした場合はどうでしょうか。これら4つのルールが優れたデザインの出現を促進したとしたらどうでしょうか。

ケントベックのシンプルデザインに関する4つのルールは、適切に設計されたソフトウェアを作成する上で非常に役立つと私たちの多くは感じています。

Kent(Extreme Programming Explained)によると、次のルールに従えば、デザインは「シンプル」です。

  • すべてのテストを実行します
  • 重複はありません
  • プログラマーの意図を表現する
  • クラスとメソッドの数を最小限に抑える

すべてのテストを実行するには...実行するテストが必要であり、それは技術的負債の1つの大きな指標です。たとえば、Mercury Quality Centerのようなシステムに10,000のテストケースがあり、それらのテストのnoneが自動化されている場合、これは蓄積された技術的負債の1つの明確な指標です。

そこで、Fathersと彼の著書「レガシーコードを効果的に使用する」が登場します。

0
Dakotah North