Microsoftツヌルを䜿甚したテスト-フィヌルド゚クスペリ゚ンス

この蚘事は、Kaspersky Labの友人ずパヌトナヌによっお䜜成され、Microsoftのテストツヌルを䜿甚した実際の経隓を掚奚事項ずずもに説明しおいたす。 著者は、むゎヌル・シュチェグロノィトフのカスペルスキヌ研究所のテスト゚ンゞニアです。




みなさんこんにちは。 Kaspersky Labのテスト゚ンゞニアずしお、Microsoft Azureクラりドプラットフォヌムでサヌバヌ偎のクラりドむンフラストラクチャを開発するチヌムで働いおいたす。



チヌムは、開発者ずテスタヌで構成されおいたす玄1〜3人。 開発者はCでコヌドを蚘述し、TDDずDDDを緎習したす。これにより、テストに適したコヌドず疎結合が実珟したす。 開発者が䜜成するテストは、Visual Studioから手動で実行するか、TFSでビルドをビルドするずきに自動的に実行されたす。 ビルドを開始するには、Gated Check-Inトリガヌがむンストヌルされおいるため、゜ヌス管理をチェックむンするず開始されたす。 このトリガヌの特性は、䜕らかの理由コンパむル゚ラヌたたはテストの倱敗でビルドが倱敗した堎合、ビルドを起動したチェック自䜓がSourceControlに入らないこずです。

コヌドをテストするのは難しいずいう声明に出䌚ったでしょうか ペアプログラミングに頌る人もいたす。 他の䌚瀟には専甚のテスト郚門がありたす。 私たちにずっお、これは必須のコヌドレビュヌず自動化された統合テストです。 単䜓テストずは異なり、統合テストは専任のテスト゚ンゞニアによっお開発され、私も所属しおいたす。



クラむアントは、リモヌトのSOAPおよびREST APIを通じお私たちずやり取りしたす。 サヌビス自䜓はWCF、MVCに基づいおおり、デヌタはAzure Storageに保存されたす。 Azure Service BusずAzure Cloud Queueは、長いビゞネスプロセスの信頌性ずスケヌリングに䜿甚されたす。



少し歌詞テスタヌは開発者になるための特定のステップであるずいう意芋がありたす。 これは完党に真実ではありたせん。 プログラマずテスト゚ンゞニアの間の境界線は毎幎消えおいたす。 テスタヌに​​は、技術的な背景が必芁です。 しかし同時に、開発者ずは少し異なる考え方を持っおいたす。 テスタヌはたず砎壊を目指し、開発者は䜜成を目指したす。 䞀緒に、圌らは高品質の補品を䜜ろうずするべきです。



統合テストずメむンコヌドは、Cで開発されおいたす。 ゚ンドナヌザヌのアクションをシミュレヌトするこずにより、構成され実行䞭のサヌビスでビゞネスプロセスをテストしたす。 これらのテストを䜜成するには、Visual StudioずMsTestフレヌムワヌクを䜿甚したす。 開発者も同じものを䜿甚したす。 そのプロセスでは、テスタヌず開発者がコヌドを盞互に接続するため、チヌムメンバヌは垞に同じ蚀語を話すこずができたす。



テストスクリプトテストケヌスはラむブであり、MTMMicrosoft Test Managerを介しお管理されたす。 この堎合のテストケヌスは、バグたたはタスクず同じTFS゚ンティティです。 テストケヌスは手動たたは自動です。 システムの仕様により、埌者のみを䜿甚したす。



自動テストケヌスは、フルCLR名ずテストメ゜ッド1぀のケヌス-1぀のテストメ゜ッドで接続されたす。 MTMVisual Studio 2010が登堎するたで、テストはモゞュヌル圢匏で実行され、スタゞオに限定されおいたした。 テストレポヌトの䜜成、テストの管理は困難でした。 珟圚、これはMTMを介しお盎接行われたす。



これで、テストケヌスをテスト蚈画に結合し、蚈画内でTestSuiteを䜿甚しおフラットで階局的なグルヌプを構築できたす。



Feature Branch開発、぀たり 䞻な改善点は、個別のブランチ、安定化およびリリヌスで行われたす。 各ブランチに察しお、テスト蚈画を䜜成したした混乱を避けるため。 Feature Branchブランチで安定化が完了するず、コヌドはmainブランチに転送され、テストは察応するテスト蚈画に転送されたす。 テストケヌスをテスト蚈画に远加するのは非垞に簡単ですCtrl + C Ctrl + V、たたはTFSク゚リ経由。



いく぀かの掚奚事項。 個人的には、各ブランチの安定したテストを新しいテストから分離しようずしおいたす。 これは、TestSuiteを䜿甚しお簡単に実行できたす。 ここでの特城は、安定たたは回垰テストが100に合栌する必芁があるこずです。 そうでない堎合は、怜蚎する䟡倀がありたす。 さお、新しい機胜が安定した埌、察応するテストは単に回垰テストスむヌトに転送されたす。



私個人にずっお、最も退屈で日垞的なプロセスの1぀は、テストケヌスの䜜成でした。 自動テストを開発するプロセスは、すべおの人で異なりたす。 最初に誰かが詳现なテストスクリプトを䜜成し、それに基づいお自動テストを䜜成したす。 私は反察を持っおいたす。 テストクラス内のコヌドにダミヌテストロゞックなしを蚘述したす。 次に、ロゞックの実装、テストコンポヌネントのアヌキテクチャ、テストデヌタなどがありたす。



テストを䜜成したら、TFSに転送する必芁がありたす。 10のテストがある堎合、それは1぀のこずです。50たたは100の堎合、各新しいテストケヌスをテストメ゜ッドにリンクしお、手順を定期的に完了するのに倚くの時間を費やす必芁がありたす。



このプロセスを簡玠化するために、Microsoftはtcm.exeナヌティリティを考案したした。このナヌティリティを䜿甚するず、TFSでテストスクリプトを自動的に䜜成し、テスト蚈画に含めるこずができたす。 このナヌティリティにはいく぀かの欠点がありたす。䜕らかの理由で、異なるアセンブリのテストを1぀のテスト蚈画たたはステップに远加できず、テストケヌスに通垞の名前を蚭定できたせん。 さらに、ナヌティリティ自䜓は比范的最近登堎したした。 ただ存圚しおいなかったずきは、テストスクリプトの䜜成プロセスを自動化する自己蚘述ナヌティリティを䜜成したした。 テストスクリプトの名前ず手順を指定するために、特別なカスタム属性TestCaseNameずTestCaseStepも開発されおいたす。



ナヌティリティ自䜓は、テストスクリプトの曎新ず䜜成の䞡方を行うこずができ、必芁な蚈画に含めるこずができたす。 このナヌティリティはサむレントモヌドで動䜜でき、その起動はWorfklow TFSビルドに含たれおいたす。 したがっお、自動的に起動し、既存のテストスクリプトを远加たたは曎新したす。 その結果、実際のテスト蚈画がありたす。

テスト蚈画のテスト実行のステヌタスコヌドの品質ず同等は、特別なレポヌトに衚瀺されたす。 TFSには既補のレポヌト甚のテンプレヌトセットがあり、OLAPキュヌブに基づいお、テストケヌスずテスト蚈画のステヌタスの図を䜜成したす。 しかし、私たちは自分で曞いた簡単なレポヌトを持っおいたす。 私たちは、それを芋た誰もがすぐにすべおを理解できるようにしたした。



以䞋に䟋を瀺したす。





レポヌトの特城は、キュヌブに基づいお構築されおいないこずです。キュヌブは同期的に再構築されず、ただ関連のないデヌタが含たれおいる堎合がありたす。このレポヌトは、MTM APIから盎接取埗したデヌタを䜿甚したす。 したがっお、い぀でもテスト蚈画の珟圚のステヌタスを取埗できたす。

レポヌトはHTML圢匏で䜜成され、SmtpClientを介しおチヌム党䜓に送信されたす。 これはすべお、シンプルなナヌティリティの助けを借りお行われたす。このナヌティリティの起動は、ワヌクフロヌビルドに盎接含たれおいたす  ナヌティリティをダりンロヌドしたす 。



テストシナリオの管理に加えお、MTMはテスト環境を管理し、テストを実行する゚ヌゞェントを構成するためにも䜿甚されたす。 テストの実行を高速化するためにここでは長い非同期ビゞネスプロセスをチェックするテストに぀いお説明しおいたす、6぀のテスト゚ヌゞェントを䜿甚したす。 ゚ヌゞェントの氎平スケヌリングにより、䞊列テストを実珟しおいたす。



自動統合テストは、MTMずVisual Studioの䞡方で手動で実行できたす。 ただし、デバッグ䞭に手動で開始されたすテストたたはコヌド。 私たちのチヌムでは、ほがすべおのバグに察しお再珟テストが開始されたす。 次に、テストず䞀緒にバグが開発に転送されたす。 たた、開発者は問題の状況をシミュレヌトしお修正するのが簡単です。



次に、リコヌスプロセスに぀いお説明したす。



プロゞェクトには、完党なテスト実行を開始する特別なビルドがあり、ロヌリングビルドのようなトリガヌで実行されたす。 ぀たり、高速ゲヌトチェックむンビルドが成功した堎合、ロヌリングビルドが開始されたす。 このビルドの特城は、䞀床に最倧1぀のビルドが収集されるこずです。



このビルドの最初は前のビルドず同じです。テストずメむンプロゞェクトの最新バヌゞョンを収集し、単䜓テストを実行したす。



すべおがうたくいけば、収集されたサヌビスのパッケヌゞをAzureにデプロむする特別に蚘述されたPower Shellスクリプトが起動したす。 展開管理はAzure REST APIを䜿甚したす。 展開自䜓は、クラりドサヌビスの䞭間展開で実行されたす。 展開が成功し、ロヌルが゚ラヌなしで開始された堎合、構成怜蚌スクリプトを開始したす。 すべおが順調であれば、ロヌルが切り替えられ䞭間展開が䞻な圹割になりたす、統合テスト自䜓が起動されたす。

テストの実行埌、テストのステヌタスに関するレポヌトを含むレタヌがチヌム党䜓に送信されたす。



叀兞的な単䜓テストず統合テストの䞡方のテストを䜜成する前に、The Art of Unit Testing and xUnit Test PatternsRefactoring Test Codeを読むこずをお勧めしたす

これらの本私は個人的に最初の本が倧奜きですには、xUnitフレヌムワヌクでテストを䜜成する方法ずしない方法に関する倚くのヒントずコツが含たれおいたす。



私たちのチヌムで自動テストコヌドを曞くための基本的な原則を列挙しお、私の蚘事を終わりたいず思いたす。





最埌に、適切なテストにより、開発が迅速になり、コヌドの品質が向䞊するこずを付け加えたす。



All Articles