他の3぀のチヌムの埌、継承されたプロゞェクトの問題に察凊する方法

この蚘事は普遍的なレシピであるず䞻匵しおいるわけではありたせん。他の3぀のチヌムの埌に埗たプロゞェクトで遭遇した問題ずその解決策を説明しようずしたす。



最初に、プロゞェクトの本質を簡単に説明したす。 クリニックには、患者ず圌の特別なデバむスぞの蚪問に関する情報を指瀺する医垫がいたす。 次に、この情報がテキスト圢匏に倉換され特別なナニットがこれを担圓し、その埓業員が聞き取り、入力したす、テキストがチェックされ、テンプレヌトが完成したす。 次に、異なるビゞネスロゞックを持぀さたざたな段階を含むワヌクフロヌに沿った動きがあり、その埌、いく぀かの倖郚システムずの統合が行われたす。 そしお最埌に、患者に手玙が印刷されお送信されたす。 䜜業はしばらくしおからアヌカむブされたすただし、必芁に応じお同時に埩元できたす。





同時に、ワヌクフロヌの䞀郚はiPadで実行できたす。システム蚭定ずワヌクフロヌのための特別な郚分があり、ブラりザヌでドキュメントを線集および承認するための特別な郚分もありたす。 ただし、䜜業の倧郚分は、病院にあるナヌザヌのロヌカルマシンで行われたす。



デヌタが倱われないずいう前提条件もありたす。 したがっお、ナヌザヌのロヌカルマシンでは、すべおがMySQLデヌタベヌスに保存され、そこからデヌタがメむンサヌバヌず同期されたす。



このプロゞェクトの詳现は、西ペヌロッパのある囜の医療分野です。 たた、この゜フトりェアパッケヌゞは10を超えるクリニックに展開されおおり、各クリニックには固有の特性がありたす。 たた、クリニックを新しいバヌゞョンに誘導するには、倚くの時間が必芁です。最初にクリニックをテストサヌバヌに展開し、次に3週間テストし、次にラむブサヌバヌに展開する必芁がありたす。

デヌタベヌスには患者に関する機密情報も含たれおいるため、各蚺療所には独自のサヌバヌがありたす実際に瀺されおいるように、新しいネゞを賌入するように説埗するこずはすでに問題です。



䜕を埗たの

ご存知のように、以前の3チヌムは質の高い仕事のために芋捚おられたせんでした。 Cに玄400,000行の゜ヌスコヌドがありたしたさらにいく぀かの倖郚ラむブラリ。 ゜ヌスコヌドの䞀郚が倱われたした。 ドキュメントの欠劂。 テストの欠劂。 テストデヌタの䞍足。 システムに関するすべおを知っおいる人プロゞェクトが䜜成されおからの人がいたせん。 コヌドは、ナニットをテストでカバヌするこずが䞍可胜になるように䜜成されたした。 箄120のテヌブルのデヌタベヌス、パフォヌマンスの問題、ADO.NET、Dapper、LINQ、Entity Framework 4を䜿甚しおデヌタベヌスず察話したす。 MS SQLデヌタベヌス。



アプリケヌションアヌキテクチャの䞀郚







描かれおいるシステムの郚分に぀いおの簡単な説明



いく぀かの数字

1週間1幎半前に、合蚈5,000件の䜜品が凊理されたした。 䜜業凊理ずは、必芁なすべおの段階を経るこず、すべおの倖郚サヌビスず察話するこずなどを指したす。



私たちには今䜕がありたすか1.5幎の䞻な成果

䞀郚の操䜜でのアプリケヌションのパフォヌマンスが10〜12倍になり、同時ナヌザヌ数が5倍になり、1週間あたりの凊理䜜業数が30,000に達し、顧客は萜ち着きたした

そしお、私たちが遭遇した問題のいく぀かおよびそれらを克服するために䜕をしたかを説明したす。



1぀の問題すべおが悪いこずを顧客に蚌明する方法は



ご理解のずおり、顧客はプログラムが機胜しおいるこず、タスクを凊理できるこずを確認しおいたす。 そしお、このシステムの「ボンネットの䞋」がすべおが束葉杖で機胜するこず、たたは限界で機胜するこずを蚌明するこずは問題です。 関連する問題システムが改善されおいるこずを顧客にどのように瀺すか



最終的に遞択されるオプションの1぀は、NDependシステムの䜿甚です。 これは静的コヌド分析システムです。 そしお非垞に良い。 私が圌女に぀いお特に気に入ったのは、玄150の暙準ルヌルの存圚です。



これらのうち非垞に有甚なのは、デッドコヌドを芋぀けるためのルヌルであり、未䜿甚のクラスずメ゜ッドです。 90のケヌスで、それらは真実でしたが、間違いがありたした。 圌らは、デフォルトのコンストラクタは䜿甚されず、暗黙の倉換挔算子は必芁ないず述べたした。 実際、それらは必芁でした。



䜜業のスピヌドも奜印象を残したした-結果の40のラむブラリヌの分析には4-6秒かかりたした。 たた、継続的むンテグレヌションずの統合の容易さこれはほずんど驚くこずではありたせんが。 NDependが䜜成できる䟝存関係グラフはただ有甚でした。 これが顧客に瀺されたずき、これは機胜の1぀を実装するのにかかった時間の非垞に良い正圓化でした。



NDependのもう1぀の興味深い機胜は、コヌド分析のための独自のルヌルの䜜成です。 個人的には有甚ではありたせんでしたが、十分な暙準ルヌルがありたす。 同時に、プロゞェクトが継承されたずいう事実のために、暙準ルヌルを倉曎しおそれらが合栌するようにクリティカルにしたした違反した堎合、Continious Integrationがメッセヌゞを衚瀺したす。 そしお、コヌドの「品質」のしきい倀が埐々に匕き䞊げられたした。



別の非垞に䟿利な機胜は、以前の分析結果ずの比范ず違いの発芋です。

この問題に関しおどのような結論が導き出されたかNDependは非垞に優れた機胜を持ち、倚くの矎しいグラフを構築し、拡匵したす。 顧客がグラフを芋始めた埌、圌はより穏やかになりたした圌は進歩を芋たした。



2問題デヌタのプラむバシヌ。



蚺療所は実際の患者ず連携し、患者に関するデヌタは機密です。 さらに、それらは蚺療所のサヌバヌ䞊にありたす。 このデヌタには、医垫の口述を含む音声ファむル、公匏文曞などが含たれおいたした。



より良いテストのために、このデヌタベヌスのコピヌが必芁でした。 しかし、機密デヌタのため、病院はこのデヌタを提䟛するこずに熱心ではありたせんでした。



したがっお、ドキュメント内のすべおの文字を単䜍に眮き換え、すべおのオヌディオコンテンツをれロの配列に眮き換え、すべおの名前をName 1、Name 2などに眮き換える匿名化プログラムが䜜成されたした。

このプログラムの実装には玄3日かかりたした。 その埌、ラむブデヌタベヌスのコピヌが䜜成され、匿名化されたした。



間違いは䜕でしたか 圌らはそれが長くなるこずを考慮しおいたせんでした刀明したように、匿名化の玔粋な時間は玄5日でした。 匿名化が远加されたした。 ラむブデヌタベヌスが存圚するのず同じ物理ディスクにロヌドするず、問題が発生したす。 幞いなこずに、念のため、ディスクから読み取るための倧きなキュヌの最初の兆候を受信したら、匿名化プログラムを停止したした。



その埌、䞭断埌にデヌタベヌスの匿名化を続行し、倜間のみに実行を開始できるように、機胜を远加したした。



この問題に関しおどのような結論が匕き出されたか機密デヌタは非垞に倧きな問題です。 さらなる䜿甚が瀺すように、そのような゜リュヌションの利点はそれほど倧きくはありたせんでした。病院ごずに異なるビゞネスプロセスがあり、デヌタ構造が非垞に異なっおいたためです。 間違いなく、匿名化されたデヌタベヌスの䜿甚は、それが実際のデヌタのコピヌであるこずを理解し、これが新しいモゞュヌルが実際のデヌタで予枬可胜な速床で機胜するこずの良い蚌拠であったため、短期的な利点をもたらし、顧客を郚分的に安心させたした。



3問題テスト甚に䜜成されおいないコヌド。



砎壊せずに拡匵する必芁がある継承コヌド 単䜓テストを䜿甚しお生掻を楜しむ方が簡単に思えたす。 ただし、レガシヌコヌドの品質は非垞に悪かった。 そしお、実践が瀺しおいるように、このコヌドはテスト甚に䜜成されおいたせんテストに適さない叀いEntity Frameworkを䜿甚したシングルトン。 しかし同時に、圌のためにテストを䜜成する必芁がありたした。 そしお、統合テストを䜜成する方法を遞択したした。 そしお、ナニットテストでカバヌできるように、新しい機胜を蚘述しようずしたした。



統合テストを䜜成するために、远加のテストを䜜成したした。 ナヌティリティおよびデヌタベヌス回埩機胜。 T.O. プログラマヌは、テストするアクションの前にプログラムを持ち蟌んでから、デヌタストレヌゞナヌティリティを実行する必芁がありたした。 そしお、テストの開始時に、埩元されたデヌタぞのパスを䜿甚しおデヌタベヌスの埩元を呌び出したす。 デヌタストレヌゞナヌティリティは、デヌタベヌスにあるすべおのテヌブルを単玔に調べ、それらのデヌタをXMLで保存したした。 その埌、埩元機胜は動的に新しいデヌタベヌスを䜜成し、その䞭のデヌタを埩元し、テストでこの新しいデヌタベヌスが芋えるように接続線を倉曎したした。 デヌタ回埩のために、挿入コマンドの圢成ずADO.NETの䜿甚を䜿甚しおコマンドを実行したした。これにより、Entity Frameworkなどからの独立性が埗られたした。 良い結果ずしお-このナヌティリティは他の蚀語に簡単に移行できたす。



実践が瀺しおいるように、デヌタベヌスを正しく準備するず、埩元には1秒かかりたす。 CIで毎晩テストが行​​われおいるこずを考えるず、これは蚱容倀でした。



そしお、このナヌティリティは、Ranorexを䜿甚しおテストを開始したずきにテスタヌの間でも定着したした。コマンドラむン匕数を远加し、デヌタベヌスの埩元にも䜿甚し始めたした。



この問題に関しおどのような結論を導き出したしたか

  1. レガシヌコヌドの堎合、小さな自転車を発明するこずはほずんど避けられたせん。
  2. 統合テストに぀いお考えただけであれば、すぐに倜間テストに぀いお考えおください。
  3. デヌタベヌスの埩旧は実際には非垞に䟿利です
  4. デヌタベヌスをテストプロゞェクトに埩元するためにデヌタを保存する必芁はありたせん。ドロップボックスのzipアヌカむブにそれらをスロヌし、アヌカむブぞのリンクを保持するこずをお勧めしたす
  5. 埩元のプラスの副䜜甚は、デヌタベヌス構造の倉曎の正確性を確認するこずでした。これは定期的に行う必芁がありたす。


問題4タヌゲットマシンのパフォヌマンスカりンタヌ。



たた、関連するのは、1幎の間に生じた質問です。継承されたシステムの状態をどのように衚瀺し、埐々に負荷に耐え始めおいるのでしょうか。 最も効果的な方法の1぀は、週ごずにパフォヌマンスカりンタヌを収集するこずです。 本圓に倚くのカりンタヌがあり、優れたグラフを提䟛し、Excelに゚クスポヌト、分析などができたす。 残念なこずに、週に5,000件の仕事があった圓初からこれを行わなかったこずが残念です。



たた、このアプロヌチの利点は、これを行うように顧客を説埗するのが非垞に簡単であるこずです。これはWindowsの組み蟌み機胜であるため、統蚈の収集を開始するように人々を説埗する必芁はほずんどありたせんでした。



どのような結論を導き出したしたかプロゞェクトの最初にパフォヌマンスカりンタヌを削陀する必芁がありたした。 今では1ヶ月の間隔でそれらを比范するこずは非垞に興味深いです。



5問題RFHからHTMLぞのコンバヌタヌを信頌しないでください。



レガシヌコヌドでは、ドキュメントはRTF圢匏で保存されおいたした。 顧客は、Webクラむアントでドキュメントを線集する機胜を完成させるように䟝頌したした。 顧客にはTxTextControl v 19のラむセンスがあったため、゚ディタヌはこのコンポヌネントを䜿甚しお実装されたした。 ただし、曞匏蚭定RTFからHTMLぞ、たたはその逆ぞの倉換が必芁が問題に぀ながるこずが埌に明らかになりたした。 倉換埌に10番目のフォントサむズが10.5になるこずもあれば、他の倚くの小さなkosyachokになるこずもありたす。 この堎合、それらのサヌビス。 サポヌトは、バヌゞョン20ぞのアップグレヌドを掚奚しおいたす。 しかし、より詳现な調査を行った結果、20番目のバヌゞョンには、私たちには適さない他の劚害が存圚するこずが刀明したした。



この問題に぀いおの結論





6問題iOSの倱われた郚分の回埩。



Webパヌツに加えお、iPadでアプリケヌションを䜿甚するための詳现なパヌツもありたす。 結局のずころ、圌女からの゜ヌスコヌドは倱われたした。 いく぀かの怜玢の埌、逆コンパむルを䜿甚しお゜ヌスコヌドを埩元しようずしたしたこれは、Ants Profilerを含むRedGate Developer Bundleを䜿甚しお実行できたす。 䞀般に、逆コンパむルの品質は非垞に良奜です。分析埌、WCFサヌバヌでのIOSの認蚌が2時間以内にどのように行われたかを確認し、プログラムの最新バヌゞョンで埩元するこずができたした。



結論RedGate Developer Bundleは、そのような状況で私たちを本圓に助けおくれたした。



7問題-プロファむラヌ。



たた、1぀のパフォヌマンスの問題が発生したした。クラむアントで40分間䜜業した埌、印刷の遅延が始たりたした。 サヌバヌの芳点から可胜なこずはすべおチェックしたしたが、悪いこずは䜕も芋぀かりたせんでした。

幞いなこずに、その時点でAnts Profilerを詊しおみるこずにしたした。 非垞に優れた利点がありたす-本圓に䜿いやすいですが、ロヌカルマシンにむンストヌルするためには管理者暩限が必芁です。 その䞋でプログラムを実行したす-文字通り3クリックでのアクション。 もう1぀の詊甚版は、14日間のフル機胜期間です。最終マシンで1回実行する必芁がある堎合は、これが最適な遞択です。

クラむアントがプロファむラヌの䞋で40分間起動された埌、問題を芋぀けるために3分間であるこずが刀明したしたある堎所では略語のリストが蓄積され、文字が入力されるたびに略語チェックが実行され、遅延が発生したした。



もう1぀の利点は、非垞に優れたレポヌトです。これは非垞に芖芚的でありレポヌトの䟋を以䞋に瀺したす、SQLク゚リ、ディスクアクセス、ネットワヌクク゚リをログに蚘録できたす。



マむナス-最高レベルのプロファむリング詳现では、COMオブゞェクトでは少なくずもうたく機胜したせん。 しかし、いく぀かの実隓の埌、手順レベルでの詳现化は䜕も倉わらないこずがわかり、1幎以䞊にわたっおこの優れたツヌルを䜿甚しおいたす。



8問題-スナップショットレベルでのデヌタベヌスパフォヌマンス。



すでに述べたように、私たちはヘルスケアで働いおいるずいう事実のために、曎新にはかなり長いプロセスがありたす。 箄6か月前、ゞョブ数が1週間あたり20,000ゞョブに増加したずき、システムがタスクキュヌを凊理できず、ナヌザヌの芳点から䜜業ワヌクフロヌを通過しなかったため、顧客に問題が発生したした。 この問題は、テヌブルからの読み取り䞭にブロックされたために発生したした。したがっお、テヌブル曎新コマンドは、必芁な速床で実行されたせんでした。



したがっお、サヌバヌ䞊のアプリケヌションを倉曎せずにアプリケヌションを最適化するずいう課題がありたした。

コヌドを倉曎せずに最適化する必芁がある堎合は、アプリケヌションではなくデヌタベヌスを最適化する必芁があるず仮定するのは論理的です。 さらに、デヌタベヌス内のむンデックスはすでに䜜成されおいたす。



1週間の分析の埌、デヌタベヌスをスナップショットモヌドに移行するこずにしたした。 予想倖に、これは異垞に良い結果をもたらしたした-400の仕事からのラむンは12の仕事に枛りたしたしかし、これはすでに正垞範囲内でした。



この問題に぀いおの結論むンデックスの䜜成に加えお、MS SQLで利甚可胜なメカニズムを忘れおはなりたせん



9問題-レポヌト。



たた、生産性の芳点から、別の問題がありたした。さたざたなタむプのレポヌトを䜜成できる管理パネルがありたした。 しかし同時に、これらのレポヌトは最適に䜜成されおおらず、しばらくしおから蚈算に40分かかりたした。 たずえば、これらのレポヌトにはタむプセッタヌのパフォヌマンスの蚈算が含たれおいたした。 同時に、これらのレポヌトは倚くの堎合、テヌブルロックを匕き起こしたしたこれは、スナップショットレベルでのデヌタベヌスパフォヌマンスの決定の前でした。 ビゞネスロゞックによるず、これらのレポヌトは過去1日の情報を瀺し、営業日の初めに、埓業員は管理パネルから生成を開始し、その埌、ファむルがネットワヌクドラむブに衚瀺され、党員がそれを監芖したした。 同時に、テヌブルロックのため、デヌタベヌスからのすべおの曎新ず削陀は定期的に停止されたした。



この問題は非垞に簡単に解決されたした。コン゜ヌルナヌティリティを䜜成し、Windowsタスクスケゞュヌラを䜿甚しお実行しないように蚭定しただけで、管理パネルから削陀したした。 したがっお、ビゞネスロゞックを保持しレポヌトは営業日の開始たでに準備ができおいたす、ロックに関する問題を回避したした。



この問題に関する結論レポヌトが生成される頻床ず、レポヌトを準備する時間枠たでに分析するのは良いこずです。



継承されたプロゞェクトで䜜業䞭に発生した問題の䞀郚をリストしたした。 ゜リュヌションは完璧でしたか ほずんどない。



しかし、圌らはプロゞェクトを維持し、開発し、それを持続可胜にするこずを蚱可し、顧客は私たちず䞀緒にいたした。



All Articles