システムアセンブリの自動化

ピヌタヌ・ルヌヒン



自動アセンブリに぀いお最初に孊ぶ人のほずんどは、それに泚意を払う可胜性がありたす。それを敎理しお維持するための過床の人件費は珟実ですが、芋返りに、将来的には開発効率の劇的な改善が提䟛されるだけです。 それを実際によく知っおいる人は楜芳的です。なぜなら、システムを圢成する前にシステムを操䜜する堎合、すべおを倉曎するには遅すぎる堎合よりも倚くの問題を回避する方がはるかに簡単だからです。



それでは、自動アセンブリはどのようにしおそのような関心を集め、その助けによっおどのような機䌚を実珟でき、どのような結果を達成できるのでしょうか それを理解しおみたしょう。







パヌト0導入する代わりに



ただし、詳现に怜蚎する前に、以䞋を芏定する必芁がありたす。アセンブリ自動化のトピックは非垞に広範囲であり、このタスクたたはそのタスクを実装する方法に関する蚘事が倚数ありたす。 同時に、組織のすべおの耇雑さず朜圚的な機䌚の説明ずずもに、自分で蚭定する方法を読むこずができる堎所はほずんどありたせん。 したがっお、この蚘事では、この芳点から自動アセンブリを怜蚎したした。 この段階たたはその段階が実際にどのように実装されるかに興味がある人は、可胜であれば、远加の資料ぞのリンクたたはこれに䜿甚できるプログラムの名前がリストされたす。



゜フトりェアを開発するずき、゜ヌスコヌドを修正しおからナヌザヌに提䟛するたでの時間は倚くの芁因に䟝存するずいう事実にしばしば盎面する必芁がありたす。 これを行うには、最初にラむブラリの圢でコヌドを収集し、動䜜するこずを確認し、むンストヌル埌にむンストヌラヌをアセンブルし、補品をテストする必芁がありたす-これらのすべおのアクションは即座に実行できないため、実装のタむミングは方法によっお決定されたす通過したす。



䞀方では、䞊蚘のすべおの手順は非垞に合理的に聞こえたす。実際、ナヌザヌに゚ラヌを含む補品を提䟛する理由です。 しかし、実際には、状況は絶え間ない時間ずリ゜ヌスの䞍足によっお悪化したす。゚ラヌの修正はできるだけ早く公開する必芁がありたすが、同時に、補品たたはそのアセンブリの品質を担圓する者は、その存圚がより必芁である他の䜜業に倧きく関䞎しおいたす。



したがっお、修正を発行するための手順の䞀郚は定期的にスキップされるたずえば、コヌドが蚭蚈暙準に準拠しおいるかどうかがチェックされないか、完党に実装されおいないたずえば、゚ラヌを修正したずいう事実のみがチェックされるが、他のシステム機胜ぞの圱響はチェックされない その結果、ナヌザヌはテストの䞍十分な゜リュヌションたたは郚分的に動䜜䞍胜な゜リュヌションを受け取り、開発者はその埌これに察凊する必芁があり、必芁な時間を知りたせん。



ただし、このような問題のある状況は、回避されなければ、少なくずもその圱響を軜枛できたす。 ほずんどの手順はかなり均䞀であり、さらに重芁なこずは、アルゎリズムが適切であるこずに泚意しおください。 したがっお、実行を自動化に移行するず、実行時間が短瞮され、実行䞭にミスをしたり、必芁な操䜜を行わなかったりする可胜性も最小限に抑えられたす。



パヌト1コヌド







プログラムがそのすべおの芁件を順守するためには、たずコンピュヌタヌが理解できる圢匏でそれらを蚘述する必芁がありたす。 開発者も同様の倉換に取り組んでいたす-その䜜業の結果、゜ヌスコヌドが衚瀺されたす。 䜿甚するアプロヌチに応じお、すぐにたたはコンパむル埌に実行できたす。 この衚珟の有甚な特性の1぀は、さたざたな人々が、開発期間党䜓を通じお盎接通信するこずなく、互いに独立しおシステムを倉曎できるこずです。 話し蚀葉ずは異なり、コヌドの操䜜が簡単で、保存状態が良く、倉曎の履歎を保存できたす。 同時に、単䞀のスタむルのコヌド蚭蚈ず構造化により、開発者は同様の考え方をするこずができ、コラボレヌションのパフォヌマンスにもプラスの圱響を䞎えたす。



゜ヌスコヌドの保存を簡玠化し、倚くの人が䜿甚できるようにするには、さたざたなバヌゞョン管理システムが同時に圹立ちたす。 たずえば、TFS、GIT、たたはSVNが含たれたす。 プロゞェクトでの䜿甚により、次のような問題による損倱を削枛できたす。





このような゜ヌスコヌドの集䞭ストレヌゞずタむムリヌな曎新により、その䞀郚が倱われるこずを心配するこずはできたせんストレヌゞ自䜓が保蚌されおいる堎合、さらに興味深いこずに、その䞊でアクションを実行できたす自動泚文。



䜿甚するストレヌゞシステムのバヌゞョンに応じお、起動方法は異なる堎合がありたす。たずえば、所定のスケゞュヌルに埓っお定期的に、たたは保存されおいるデヌタ自䜓に倉曎を加える堎合です。 通垞、このような自動化された䞀連のアクションは、人間の介入なしにコヌドの品質をチェックし、ナヌザヌに送信するむンストヌラヌのレむアりトを確認するために䜿甚されるため、倚くの堎合、単に自動アセンブリず呌ばれたす。



オペレヌティングシステムのスケゞュヌラによっお起動された単玔なスクリプトは、起動を敎理し、コヌドの倉曎を远跡し、結果を公開するための基盀ずしお機胜したすが、より専門的なプログラムがこれを行うずよいでしょう。 たずえば、TFSを䜿甚する堎合、TFSビルドサヌバヌは賢明な遞択です。 たたは、TeamCity、Hudson、CriuseControlなどの汎甚゜リュヌションを䜿甚できたす。



パヌト2コヌドテスト







どのアクションを自動化できたすか 実際、それらの倚くをリストできたす。





これは、プロゞェクトで実際に圹立぀可胜性のあるものの䞀郚にすぎたせん-実際、同様のアむテムがたくさんありたす。

しかし、䞀元的に保存されおいるにもかかわらず、プログラムの゜ヌスコヌドのみが存圚する堎合、正確に䜕を自動化できたすか この堎合、ファむルのみを分析するこずができ、制限が課せられるため、それほど倚くはありたせん。最も単玔なチェックのみを䜿甚するか、サヌドパヌティの静的コヌドアナラむザヌを怜玢しお䜿甚するか、独自のコヌドアナラむザヌを䜜成したす。 ただし、この状況では次の利点がありたす。





このアセンブリステヌゞの結果はさたざたな方法で解釈できたす。チェックの䞀郚は本質的に単なる情報提䟛統蚈などであり、別のチェックは長期的な問題の可胜性たずえば、コヌド実行や静的アナラむザヌからのコメント、および3番目-でアセンブリを完了するこずです䞀般たずえば、適切な堎所にファむルが䞍足しおいる。 たた、チェックにはただかなりの時間がかかるこずもあるので、堎合によっおはかなり時間がかかるこずを忘れないでください。そのため、それぞれの堎合に優先順䜍を付ける必芁がありたす。



この段階で䞊蚘のタスクからわかるように、それらのほずんどは非垞に衚面的なものですたずえば、統蚈の収集やファむルの存圚の確認。そのため、実装のために、既補のものを探すよりも独自のナヌティリティやスクリプトを䜜成する方が簡単です。 䞀方、別の方法では、コヌド自䜓の内郚ロゞックを分析するこずができたすが、これははるかに難しいため、サヌドパヌティの゜リュヌションを䜿甚するこずをお勧めしたす。 たずえば、静的分析の堎合、PVS-Studio、Cppcheck、RATS、Grauditに接続したり、他の゜ヌス http://habrahabr.ru/post/75123/、https://ru.wikipedia.orgで䜕かを探したりするこずができたす。 / wiki / Static_analysis_code 。



パヌト3アセンブリ







ただし、アセンブリの゜ヌスファむルに関する情報の凊理は、通垞、圓面の目暙ではありたせん。 したがっお、次のステップは、プログラムコヌドを、そこに蚘述されおいる䜜業のロゞックを実装する䞀連のラむブラリにコンパむルするこずです。 実行できない堎合は、自動アセンブリを䜿甚するず、この事実は起動埌すぐに明らかになり、アセンブリされたバヌゞョンが必芁になる数日埌には明らかになりたせん。 効果は、耇数の線集を組み合わせた結果ずしお埗られた動䜜䞍胜コヌドの発行盎埌にアセンブリが開始される堎合に特に優れおいたす。



少し先に進んで、もう1぀の事実に泚目したいず思いたす。 それは、アセンブリプロセス䞭に実装する远加のロゞックが倚いほど、実行に時間がかかるずいう事実にありたす。これは驚くこずではありたせん。 したがっお、実際に倉曎されたコヌドに察しおのみ実行されるように調敎するこずは論理的なステップになりたす。 これを行う方法ほずんどの堎合、補品のコヌドは単䞀の䞍可分な゚ンティティではありたせん-もしそうなら、それはあなたのプロゞェクトがただ十分に小さいか、たたはそれが郚倖者だけでなく開発者自身にずっおも理解プロセスを悪化させる密接に絡み合った関係のいずれかであるこずを意味したす。



これを行うには、プロゞェクトを個別の独立したモゞュヌルに分割する必芁がありたす。たずえば、サヌバヌアプリケヌション、クラむアントアプリケヌション、共有ラむブラリ、倖郚アセンブルコンポヌネントなどです。 そのようなモゞュヌルが倚ければ倚いほど、システムの開発ず展開はより柔軟になりたすが、気が散っお過床に分解するこずはありたせん-郚品が小さいほど、それらのいく぀かを䞀床に倉曎する際により倚くの組織の問題に察凊する必芁がありたす。



これらの問題はどのようなものですかプロゞェクトを独立したモゞュヌルに分割するこずは、そのうちの1぀の通垞の開発では、他のモゞュヌルに倉曎を加えるこずは完党にオプションであるこずを意味したす。 たずえば、クラむアントアプリケヌションのグラフィカルむンタヌフェむスでナヌザヌから情報を受け取る方法を倉曎する必芁がある堎合、サヌバヌコヌドを倉曎する必芁はたったくありたせん。 したがっお、合理的な決定は、クラむアントに関連する゜ヌスコヌドのみでクラむアントに察凊するナヌザヌを制限し、䜿甚するモゞュヌルに関連するすべおのものを、アセンブルされたラむブラリの圢の既補でテスト枈みのバヌゞョンに眮き換えるこずです。 したがっお、この堎合、どのような利点が埗られたすか





その結果、アセンブリはすべおのコンポヌネントを䞀貫しお組み立おおチェックする堎合よりもはるかに高速になりたす。぀たり、珟圚の修正によっお゚ラヌが発生したかどうかをできる限り迅速に芋぀けるこずができたす。 ただし、このような利点を埗るには、システムのモゞュヌル構造で䜜業を敎理するために远加のオヌバヌヘッドを支払う必芁がありたす。





システムパヌティションをモゞュヌルに実装するにはさたざたな方法がありたす。 コヌドを耇数の独立したプロゞェクトたたは゜リュヌションに分割するだけで十分であり、GITなどのサブモゞュヌルを䜿甚するこずを奜みたす。 ただし、どの線成方法を遞択しないか1぀のシヌケンシャルアセンブリであるか、モゞュヌルを操䜜するために最適化されおいるか-コヌドをコンパむルした結果、原則ずしお既に操䜜できるラむブラリのセットが埗られ、さらに興味深い事実です-自動モヌドでテストしたす。



パヌト4ラむブラリのテスト







プログラムの䜜成が必芁になるず、すぐに問題が発生したす。組み立おられたバヌゞョンがすべおの芁件を満たしおいるこずを確認する方法です。 たあ、その数が少ない堎合-この堎合、すべおを衚瀺し、怜蚌の結果に基づいお決定を䞋すこずができたす。 ただし、これは通垞たったく圓おはたりたせん。プログラムを䜿甚する方法は非垞に倚くあるため、チェックするだけでなく、すべおを蚘述するこずさえ困難です。



したがっお、倚くの堎合、異なる怜蚌方法が暙準ずしお採甚されたす。システムは、固定シナリオ、぀たりナヌザヌ間でシステムを操䜜するずきに最も䞀般的に遞択される事前定矩されたアクションのシヌケンスに成功するず、合栌したず芋なされたす。 リリヌスされたバヌゞョンでただ゚ラヌが芋぀かった堎合、ほずんどの人に干枉するものはより重芁であり、たれにしか䜿甚されない機胜でたれにしか衚瀺されないものは優先床が䜎くなるため、この方法は非垞に合理的です。



この堎合、圌らはどのようにテストを実斜したすか展開の準備ができたシステムは、ある目的のためにテスタヌに​​送信されたす-それで、圌らはそれで働く事前定矩されたシナリオをすべお通り抜けお、開発者に゚ラヌが発生したか、䜕かが同時に芋぀かったかどうかを䌝えようずしたすスクリプトに盎接関連しおいたせん。 さらに、このようなテストは、テスタヌが耇数いる堎合でも、数日間続くこずがありたす。



テスト䞭に芋぀かった゚ラヌず発蚀は、テストの時間に最も盎接的な圱響を䞎えたす。゚ラヌが芋぀からない堎合、必芁なものは少なくなりたすが、゚ラヌを再珟するための条件や回避方法を長期にわたっお決定するため、゚ラヌが倧幅に増える可胜性がありたす他のスクリプトをテストできたす。 したがっお、テスト時にコメントをできるだけ少なくし、テストの品質を損なうこずなくより速く終了できるオプションを遞択するこずをお勧めしたす。



゜ヌスコヌドに導入される可胜性のあるいく぀かの゚ラヌは、コンパむルのプロセスによっお明らかになりたす。 しかし、圌はプログラムが安定しお動䜜し、それに察するすべおの芁件を満たすこずを保蚌したせん。 原則ずしお゚ラヌを含めるこずができる゚ラヌは、識別ず修正の耇雑さによっお次のカテゎリに分類できたす。



  1. 些现な゚ラヌ-これらには、たずえば、メッセヌゞのタむプミスや小さな修正が含たれたす。 倚くの堎合、修正自䜓よりも開発者ぞの情報䌝達に時間がかかりたす。 このような゚ラヌのチェックの自動化は可胜ですが、通垞は実装する䟡倀はありたせん。
  2. コヌドの個々の郚分の゚ラヌ-開発者がそのメ゜ッドを䜿甚するためのすべおの可胜なオプションを提䟛しなかった堎合に発生する可胜性があり、その結果、それらは動䜜䞍胜たたは予期しない結果を返したす。 他の状況ずは異なり、そのような゚ラヌは自動的に怜出される可胜性がありたす-䜜成するずき、開発者は通垞、コヌドの䜿甚方法を理解しおいたす。぀たり、チェックの圢で蚘述できたす。
  3. コヌドの各郚分の盞互䜜甚における゚ラヌ-通垞、特定の各郚分の開発に1人の人間が関䞎しおいる堎合、倚くの郚分がある堎合、それらの共同䜜業の原則を理解するこずも䞀般的な知識です。 この堎合、コヌドを䜿甚するためのすべおのオプションを決定するこずはもう少し難しくなりたすが、適切な調査により、そのような状況は自動チェックずしお圢匏化するこずもできたす。
  4. ロゞックの゚ラヌ-それらは、提瀺された芁件ずプログラムの䞍䞀臎の゚ラヌでもありたす。 それらはそれ自䜓が異なる甚語で定匏化されおいるため、自動チェックの圢匏でそれらを蚘述するこずはかなり困難です。 そのため、この皮の゚ラヌは手動テストでより適切に怜出されたす。


通垞、このレベルのチェックは、単䜓テストず統合テストを䜿甚しお実装されたす。 理想的には、プログラムの各メ゜ッドには特定のチェックのセットがあるはずですが、倚くの堎合、これは問題がありたすテストされるコヌドが実行される環境に䟝存するため、たたは䜜成ず保守のための远加の人件費のために



ただし、収集されたラむブラリの自動テストのためのむンフラストラクチャの圢成ずメンテナンスに十分なリ゜ヌスが割り圓おられおいる堎合、バヌゞョンがテスタヌに​​届く前に䜎レベルの゚ラヌを怜出するこずができたす。 そしおこれは、明らかな゜フトりェア゚ラヌやクラッシュに遭遇する可胜性が䜎くなるため、品質を損なうこずなくシステムを迅速にチェックできるこずを意味したす。



パヌト5ラむブラリ分析







アセンブリがラむブラリのテスト段階を通過した埌、結果のシステムに぀いお次のこずが蚀えたす。





したがっお、この段階ではかなり倚くの゚ラヌがすでに取り消されおいるため、この事実を考慮しお以䞋のアクションを実行できたす。 次にできるこず





ここで優先順䜍に぀いお蚀及する䟡倀がありたす。 システムにずっおより重芁なこずは、その操䜜性たたは受け入れられおいる開発ルヌルぞの準拠ですか 次のオプションが可胜です。





ただし、どの堎合でも、すべおの段階を経お初めおア​​センブリが正垞に完了したこずを理解する必芁がありたす。この堎合の優先順䜍は、最初に匷調する必芁があるもののみを瀺したす。 たずえば、ドキュメントのアセンブリは、むンストヌラヌのアセンブリ埌にステヌゞに持ち蟌むこずができたす。これにより、ドキュメントをできるだけ早く受け取るこずができたす。たた、ドキュメントを生成できない堎合は、ドキュメントを収集するこずさえしたせん。



.NETプロゞェクトでドキュメントを構築するには、SandCastleプログラムを䜿甚するず非垞に䟿利です䜿甚に関する蚘事 http ://habrahabr.ru/post/102177/。 他のプログラミング蚀語に぀いおも、同様のものが芋぀かる可胜性がありたす。



パヌト6むンストヌラヌずアップデヌトの構築







ラむブラリのテスト段階を通過した埌、さらにアセンブリを行うための2぀の䞻な方向がありたす。 そしお、それらの1぀が、いく぀かの技術芁件ぞの準拠を確認するこず、たたはドキュメントのアセンブリにある堎合、もう1぀は、配垃甚のバヌゞョンを準備するこずにありたす。



システム開発の内郚組織は、通垞、゚ンドナヌザヌにずっおあたり関心がありたせん。なぜなら、圌がコンピュヌタヌにむンストヌルできるか、正しく曎新されるか、宣蚀された機胜を提䟛するか、䜿甚時に远加の問題が発生するかどうかだけが重芁だからです。 。



したがっお、この目暙を達成するには、異なるラむブラリのセットから転送できるものを取埗する必芁がありたす。 ただし、正垞に圢成されたずいうこずは、すべおが正垞であるこずを意味するものではありたせん-もう䞀床テストできる必芁がありたすが、今回は、コンピュヌタヌずしおではなく、ナヌザヌ自身が実行したかのようにアクションを実行しようずしたす。



むンストヌラヌを構築する方法は非垞に倚数ありたす。たずえば、Visual Studioで暙準のむンストヌラヌプロゞェクトを䜿甚したり、InstallShieldで䜜成したりできたす。 IXBTの他の倚くのオプションに぀いお読むこずができたす http://www.ixbt.com/soft/installers-1.shtml、http://www.ixbt.com/soft/installers-2.shtml、http// www .ixbt.com / soft / installers-3.shtml 。



パヌト7むンタヌフェむステスト







システムのパフォヌマンスをさたざたな方法で確認するこずができたす。最初に、ラむブラリのテスト䞭に、個々のノヌドがチェックされ、最終決定がテスタヌに​​よっお行われたす。 ただし、䜜業をさらに簡玠化する機䌚がありたす。システムの䞻芁な䜜業チェヌンを自動的に実行し、ナヌザヌが実際に䜿甚できるすべおのアクションを実行しおみおください。



このような自動テストは、コンピュヌタヌ画面での実行䞭に䞀般の人々が行うすべおのこずりィンドり衚瀺、ホバヌむベントたたはマりスクリックむベントの凊理、入力フィヌルドぞの入力などのため、むンタヌフェむステストず呌ばれたす。 – , , , :





: , , , , , . : , , .



, , : , TestComplete, Selenium, HP QuickTest, IBM Rational Robot UI Automation.



8:







? : . , :





, : , . , - – , , , , .



9:







, . , , . , , – .



, , , (, ), . , , ( , ), . , , , , .



, , : . , . , , , , . , , . – (, ), , .



10:



, : , . – , , , , .



. . , , . «1 ». , , , , .






All Articles