SberTechの埓業員の目を通しおHeisenBug

この投皿では、Heisenbugカンファレンスの15のレポヌトのレビュヌを共有し、䌁業のスタンドで䜕が面癜いかを䌝え、たた、テストプロゞェクトのコヌドをすばやく倉曎するのに圹立぀IntelliJ IDEAのアクションプラグむンの䜜成に関するArtyom Eroshenkoのレポヌトのビデオ資料を共有したいず思いたす。







HeisenBugに関する情報



ハむれンバグ -スペシャリストをテストするための技術䌚議。 基本的に、テスタヌ、テストの゜フトりェア開発゚ンゞニア、自動テストず負荷テストのスペシャリストにずっお興味深いものです。 䞻催者はJUG.RUチヌムで、その背埌にはJoker、HolyJS、SmartData、DevOops、DotNext、Mobiusなどの䌚議がありたす。



䌚堎







5回目の䌚議は、モスクワの地䞋鉄キ゚フスカダ駅のスラビャンスカダラディ゜ンホテルで開催されたした。 ホテルに近づくず、䌚議のロゎが付いた電子バナヌが芋えたした。 さらに、ホテルのロビヌぞの入り口で、参加者にはチェックむンデスクずワヌドロヌブぞの暙識が付いおいたした。 迷子になるこずは䞍可胜です。 参加者ず講挔者の登録は1階で行われ、䌚議のメむンロビヌには、パヌトナヌのスタンド、䌚議宀、コヌヒヌブレヌクのあるホヌル、ランチがありたした。 譊備員のレベルは満足しおいたので、「密茞りサギ」は手に入れられたせんでした。 合蚈で、むベントには玄500人以䞊の参加者が参加し、そのほずんどが開始の2週間前に登録されたした。



プログラム



プログラムはここにありたす 。 JUG.RUは、䜙分な氎や有名な倖囜の専門家ず䞀緒に、プログラムを実甚的にするように垞に努力しおいるこずに泚意したい。 レポヌトは次の蚘号に分かれおいたす。







これがハむれンバッグで講挔者になるこずを初めお蚈画しおいる堎合は、 講挔者のメモを芋おください-それには非垞に倚くの有甚な情報が含たれおいたす。



コミュニケヌションずボランティア







参加者が䌚議で重芁な䜕かを芋逃さないように、電報チャンネルず電報チャットが開催されたした。 ちなみに、埌者では、ビデオを芋るボランティアを探しおいお、無料の䌚議チケットを提䟛したした。



ボランティアになるこずに決めた堎合は、できるだけ早く䞻催者に決定を瀺しおください。 むベントの準備は、䌚議のずっず前に行われたす。 空垭状況に応じお、チヌムに割り圓おられたす。



䌚瀟スタンド



今回のカンファレンスでは、ドむツ銀行、アルファバンク、ラむファむれン、バドゥ、ルク゜フト、SKBコントゥヌル、ゲットなど、倧芏暡なIT䌁業が12瀟以䞊集たりたした。各䌁業は、むベントの参加者ずの亀流の組織にアプロヌチしたした、したがっお、パフォヌマンスの間に退屈する必芁はありたせんでした。 思い出に残る小さなお土産の問題を解決し、ビデオやボヌドゲヌムをプレむし、宝くじに参加するこずができたした。







ラむファむれンはあらゆる皮類のパズルを解くオンラむンク゚ストを䜓隓するこずを申し出たした。たた、幎霢のないクラシックの愛奜家であれば、SegaでMortal Kombat 3をプレむできたす。 アルファバンクの同僚は、タスクを備えた電報ボットを䜜成し、さらに宝くじで倧芏暡なレゎマむンドストヌムを行いたした。 ラむブコミュニケヌションの開発者がタスクを出しお議論に参加したドむツ銀行のブヌスを賞賛したいのですが、他のすべおのブヌスでは答えを確認するだけでした。







倚くの䌁業は控えめに専門家を探し、職務内容を蚘茉した小冊子を配っおいたす慈善掻動に埓事するためにすべお同じではありたせん。



レポヌトの抂芁



1. DevOpsがありたす。 すべおのテスタヌ -Baruch Sadogurskyを解任したしょう 。



この䌚議は、JavaずDevopsに関連する䌚議で有名なスピヌカヌであるJFrogの開発者であるBaruch Sadogurskyによっお開かれたした。 レポヌトでは、Baruchは頻繁にリリヌスされるビゞネスニヌズ、貧匱なアヌキテクチャによるコヌドテストの耇雑さ、珟代のアゞャむルチヌムにおけるテスタヌの圹割の近代化に起因する頻繁なリリヌスに盎面しお、゜フトりェア品質の問題に察凊したした。 このレポヌトは、最初から最埌たで倚くのナヌモア、興味深い事実、比范を聞くのが面癜かったです。



レポヌトの䞻な考えを1぀のスラむドにたずめるず、テストの自動化ずDevOpsの実践によりルヌチンプロセスの時間コストが削枛され、新しいタスクの実装により倚くの時間を割けるようになりたす。







2.プロゞェクトをリファクタリングする必芁がありたすか IDEAがありたす -アルテム・゚ロシェンコ。



Artemのレポヌトでは、テストプロゞェクトのコヌドをすばやく倉曎するのに圹立぀IntelliJ IDEAのアクションプラグむンの䜜成に぀いお説明したした。







圌は、プラグむンアクションの入力ポむントであるメむンクラスAnAction、PsiClass、PsiAnnotation、AnActionEvent、JavaCodeStyleManagerに぀いお説明したした。



次のタスクを解決する方法を怜蚎したした。



aプロゞェクトで自動化されおいるものずされおいないもの。 Jiraずの自動同期。





アノテヌションテキストによるず、@ DisplayNameはJiraに行き、必芁なチケットを受け取り、@ TmsLinkを䜿甚しお必芁な接続をすべお停止したした。



bJiraコンテキストから@Tagsを自動的に付加したす。





お気に入りの 回垰チケットには特定のラベルがありたす。 テストに行き、@ TmsLinkアノテヌションがあり、プラグむンを䜿甚し、新しい@Tagsアノテヌションがあり、Junitの助けを借りおこれらのタグでテストを実行できたす。



cテストでは䜕がチェックされたすか





自動テストがあり、ステップがあり、゚クスポヌトし、テストにステップがありたす。 たた、ビデオには2぀のテストの䟋がありたす。



Artyomは、アリュヌル1からアリュヌル2にすばやく切り替える方法も瀺したした。



コヌドの蚘述プロセスの最適化を考えおいる人向けの非垞に実甚的なレポヌト。 プラグむンの゜ヌスコヌドはこちらにありたす 。



3. JavaおよびReactorプロゞェクト -しかし、テストはどうですか -キリル・メルクシェフ。



Cyrilは、囜際的な医療系スタヌトアップのVivyを開発した経隓を共有したした。 圌は、モノリシックシステムのスケヌラビリティの問題が、マむクロサヌビスずReactorラむブラリを䜿甚しおどのように解決されたかを語った。 このラむブラリ、その基本原則、リアクティブシステムのテスト方法、キラヌ機胜リク゚ストチェヌン内のチェックポむントやログ、フック、リトラむリク゚ストなどに倚くの泚意が払われたした。







個人的には、リアクティブシステムのテストを扱っおいなかったため、私にずっおは新しくお興味深いものでした。



4. JSでメモリリヌクを怜玢するためのSealantフレヌムワヌクを曞いたように 、Sergey Dokuchaev。



この講挔では、単䞀ペヌゞのWebアプリケヌションでのメモリリヌクコヌドからはアクセスできるが䞍芁になったオブゞェクトに぀いお説明したす。 Sergeyは、補品のリリヌスバヌゞョンですべおの重芁なメモリリヌクを自動的に怜出するようにタスクを蚭定したした。 圌は、そのような゚ラヌを芋぀けるこずの困難さず、Google Chromeツヌルを䜿甚しお手動でそれを行う方法に぀いお話したした。 次に、著者であるSeaLantツヌルを調べたした。 SeaLantは、Chrome DevToolsプロトコルを䜿甚しおChromeプロセスず察話するこずにより、リヌク怜出を自動化したす。 レポヌトは、ペヌゞがペヌゞをリロヌドするこずなく、1぀のデバむスから、1぀のセッションで埪環スクリプトを実行できる堎合、ほずんどの堎合、それらをテストするこずでほずんどのメモリリヌクを取り陀くこずができるずいう事実で終了したした



5.むンタヌフェむスのビゞュアルテストの機胜 -GeminiツヌルビゞュアルテストツヌルおよびHermioneスクリヌンショットアサヌションを実行できる次䞖代のより汎甚的なツヌルの䞻芁な開発者であるAnton Usmansky。







このレポヌトは、プロゞェクトにビゞュアルテストツヌルを実装するこずを考えおいる人に圹立ちたす。 すでにゞェミニずハヌマむオニヌを䜿甚しおいる人も興味があるかもしれたせん-それはツヌルが内郚にどのように配眮されおいるかを理解したす。 䞀郚の堎所では、著者はかなり基本的なこずを扱っおいたす。



6. Selenium WebDriverのトラブル -Alexey Barantsev。



Alexeyは、Seleniumプロゞェクトの問題ずそれらが発生した理由に぀いお話したした。 圌は、 Bazelコレクタヌを䜿甚しお、モノリポゞトリアセンブリの詳现を共有したした。 芁玠の可芖性のトピックに觊れW3C WebDriver暙準では、芁玠が可芖かどうかをチェックする操䜜はありたせん、関数getProperty、getDomAttriubute、getAttributeの違いに぀いお説明したした。







トラブルを知るこずで、ナヌザヌは機胜をバグず区別し、テストプロゞェクトで効果的な「クランチ」を開発できたす。



7.れロから䜜成するためのレシピず負荷テストシステムの開発 -Anatoly Plaskovsky。



アナトリヌは、Yandex.Moneyパフォヌマンス研究グルヌプを代衚しおいたす。 圌の報告曞では、パフォヌマンス研究の必芁性を刀断する方法、これらの掻動を実斜する人々を芋぀ける堎所、および研究プロセスを構築する方法に関する実践を共有したした。 著者は、パフォヌマンスの調査=負荷テスト、および実皌働環境でのテストのみが関連する結果を瀺すこずができるずいう事実に焊点を圓おおいたす。 同時に、テストルヌトずデヌタを遞択し、シナリオの可胜性のある結果を監芖および予枬するこずにより、顧客に問題なく実隓を行うこずができたす。



Anatolyは、負荷テストず、ヘルプやアドバむスを埗るためのノックできる堎所に぀いお説明する電報チャットロヌドランドを䜜成したした。



8.デバむスメヌカヌの壮倧な倱敗 -Valentine Wylsacom Petukhov。



最初の日は、悪名高いWylsacomの報告によっお締めくくられたした。これは、䞀般の人々にあいたいに受け入れられたしたヘむれンバッグの参加者の電報でのチャットで刀断:)。



私自身は、デバむスずアプリケヌションのベヌタテストに関するレポヌトから䜕も興味深いこずはしたせんでしたが、ファンはそれを気に入ったのかもしれたせん。 写真のディスカッション゚リアが䞊んでいたので、PRは成功したした。







9. TestContainersを䜿甚したマむクロサヌビス動物園ず、グロヌバルSMSプラットフォヌムの䟋を䜿甚したJUnit 5の゚レガントな統合テスト -Andrey Markelov。



著者は、Testontainers+ Junit 5 + MockServerバンドルを䜿甚しお、䌚瀟でマむクロサヌビスがどのようにテストされおいるかを語った。 レポヌトは興味深いように芋えたしたが、そのようなスキヌムは倚数のマむクロサヌビス向けではありたせん。 ゜ヌスコヌドぞのリンク。







10.テスタヌの盗撮、たたは監芖ナヌザヌがどのように圹立぀か -アントニヌナ・キサメトディノバ。



非垞に興味深いレポヌトですが、テストよりもWebデザむンに関連しおいたす。 クラむアントむンタヌフェむスを蚭蚈する際に避けるべきUXプラクティスず萜ずし穎に぀いお説明したす。







Antoninaは、ボタンの無効化、ロヌダヌの䜿甚、ツヌルチップ、䜿い慣れたコンポヌネントなどのUI゜リュヌションでナヌザヌを芳察する際の䞻な゚ラヌを匷調したした。



たた、レポヌトのグラフィックデザむンに、実際のプロゞェクトからの盎芳的な䟋UXに関するレポヌトに適しおいるを蚘茉するこずも重芁です。



11.倖郚䟝存関係のあるシステムのテスト問題、解決策、Mountebank -Andrey Glazkov。



著者は、圌のプロゞェクトで濡れる段階の進化に぀いお話した。 コヌドレベルでのモヌキングの長所ず短所を考慮したした。 圌は、停のサヌビスの実装を䜜成するのが良い堎合の経隓を共有したした。 しかし、停のサヌビスをその堎で再構築し、プロキシし、同時に着信芁求のログを入力したい堎合、AndreyはMountebankツヌルを詳しく調べるこずをお勧めしたす。







䞻な利点





特定されたツヌルの制限





12.モバむルアプリケヌションの゚ンドツヌ゚ンドテストのプロファむルを䜜成する理由 -Vyacheslav Frolov。



Vyacheslavは、Badooでの自動テストのステヌタス、぀たり1぀のシミュレヌタで30マシン時間かかるモバむル1,500テストの䞊列化の問題をどのように解決したかに぀いお報告したした。 その結果、30分の結果を達成するこずができたため、1日あたり8䞇件のテストを実行できたした。 消費電力の盎線的な増加に加えお、シミュレヌタを再起動する代わりに最適化を適甚しお、アプリケヌションキャッシュをクリアしたした。 プロファむラヌもレポヌトで蚀及されおおり、テストでのボトルネックの特殊なケヌスを怜出するためにどのように䜿甚されたしたか。たずえば、ios 11.0のlong_pressメ゜ッドは5秒間実行され、最適化埌すぐに実行が開始されたした。 -alive "接続の再確立を回避できるため、すべおのテストを䞀床に倧幅に高速化できたす。 著者はたた、FlameGraphおよびFlameChartツヌルを䜿甚しおプロファむラヌの結果を衚瀺する方法を話したした。







13.ナニットテスト理論から実践たで -Vadim Pushtaev。



著者は、UnitTestsの開発経隓を共有しおいたす。 レポヌトは3぀の郚分で構成されおいたした。



  1. UTから䜕を望むか→回垰コヌドの倉曎、チェック、アヌキテクチャぞの圱響開発者がテストを曞くずコヌドが良くなる、理解レガシヌコヌドを凊理する;
  2. 原則→ノァディムは、理論は実践ほど良くないこずを想起したす。 実装には倚くのロゞックが存圚する可胜性があるため、「実装ではなくむンタヌフェむスをテストする」ずいう原則を拒吊したした。 さらに、「単䜓テストはテストメカニズムではありたせん」ずいう原則がありたす。 圌は、これを匷力で非垞に䟿利な䞀皮のアヌキテクチャヌ手法ず考えおいたすが、これはコヌドのチェックず正確性のためのメカニズムではありたせん。
  3. 実装→䜜成者が䜜業で䜿甚する手法に関するストヌリヌクラスごずに1぀のテストクラス、独自のマッチャヌの䜜成、必芁に応じお倖郚䟝存関係の䜿甚など。






14.スプリングブヌトテストでのテストず泣き声 -Kirill Tolkachev



Cyrilは、私たちをIoC、DI、Springの䞖界に戻し、JUnit 5ずSpringBootを䜿甚しお単䜓テストずコンポヌネントテストを䜜成する方法を説明するこずにしたした。







このレポヌトの倧きな利点は、スピヌカヌがほずんどのテストをリアルタむムで曞いたこずです。 Springアノテヌションでテストをラッピングする段階的なプロセスを明確に瀺したした。 しかし、倧量のコヌドがあるため、瀺されおいるすべおのテクニックを頭に入れるこずは困難でした。 Cyrilは、プロファむル、MockSpy Beanの操䜜、およびコンテキスト構成の蚭定に関するSpring機胜を調べたした。 私にずっおは、Springはそのようなタスクのためのかなり重いフレヌムワヌクであり、経隓豊富なナヌザヌだけが単䜓テストを開発するずきに熊手を螏むこずはできたせん。



15.モバむルオヌトテスト -Ekaterina Bateevaを利甚しおいたす。



レポヌトでは、著者はiOSアプリケヌションを自動化するためのXCTestツヌルを怜蚎したした。 このツヌルを他のプロゞェクトに耇補するのは䞍䟿でした。







぀たり、次の欠点が特定されたした。





次に、キャサリンは問題を解決したオヌプン゜ヌスのFastlaneフレヌムワヌクに぀いお話したした。



たずめ



䞀般的に、私は䌚議が奜きだった。 関心のある質問に察する感情ず回答を受け取った。 BoFセッションでは、ほずんどの参加者が「仮面」を脱ぎ、BoFトピックの枠組み内で掻発な議論を亀わしたした。 コヌヒヌブレむクずディナヌは完璧で、い぀も䜕か食べるものがありたした。 たた、むベントの構成に泚意したいです-JUG.RUチヌムは、毎回、ハむれンバグをたすたす良くしおいたす。 最埌に-䌚議に参加しお、埗た知識を共有し、スキルを向䞊させおください



PS蚘事の準備に参加しおくれたAlexei Rumyantsevず、ビデオ玠材のArtem Eroshenkoに感謝したす。



All Articles