テスト自動化とは?メリットや導入の流れ・向いているテストを解説

  • ソフトウェアテスト・品質保証

テスト自動化とは?メリットや導入の流れ・向いているテストを解説

株式会社SHIFT マーケティンググループ
著者 株式会社SHIFT マーケティンググループ

お役立ち資料

目次

 

システム開発において正常に動作するかどうかをチェックする工程を「テスト」と言います。非常に重要な工程ですが、開発者とクライアントの想定通りに動作するかをチェックする工数は多く、エンジニアにとって大きな負担となっています。その負担を軽減するために使用されるのが「テスト自動化」という手法です。

本記事では、テスト自動化の概要とメリット・デメリット、自動化ツール導入の流れについて解説します。エンジニアの負担軽減や業務効率化を図ろうと考えている方は、ぜひ参考にしてください。

株式会社SHIFTでは、ソフトウェアテストに関して豊富な実績とテストナレッジを保有しており、あらゆるお客様のニーズを満たしたテスト・品質保証を上流~下流(テスト計画・テスト設計・テスト実行・テスト品質管理)まで一気通貫でご依頼いただけます。

>>ソフトウェアテスト・第三者検証のページへ
>>テスト自動化のページへ
>>導入事例ページへ
>>料金についてページへ
>>お問い合わせページへ

テスト自動化とは何かわかりやすく解説

テスト自動化のイメージ

テスト自動化とは、ソフトウェアテストを専用の支援ツールを用いて自動化することです。従来、エンジニアの手によって実施されていたものをオートメーション化することを指します。

ソフトウェアテストには、「テストケースの設計」「テストの実施と結果の確認」「テスト進捗の管理」「レポートの作成」といった作業が含まれます。これらの作業をエンジニアが地道に行うことは大きな負担となっていました。また、開発スピードが下がる原因にもなっており、競合他社と開発速度の点で負けてしまうリスクがあることも問題です。

これらの問題を解消するのがテスト自動化です。テスト自動化により、先にあげたエンジニアへの負担や開発速度への影響を改善できるほか、品質向上なども期待できます。

SHIFTのテスト自動化に関してはこちらをご覧ください。
>>テスト自動化サービスのページへ

テスト自動化で得られる効果

テストを自動化すると、エンジニアの業務負担軽減、開発速度の高速化などが期待できます。前述の通り、ひとえにテストと言っても多くの工程を積み重ねなければならず、その負担は決して軽いとは言えません。また、テストの工程そのものに相当な時間がかかるため、複雑なシステムであればあるほどテストに時間がかかってしまいます。

テスト自動化を実施することで、テストの一部の工程をオートメーション化できるため、大幅な負担軽減につながります。その結果、テストにかかる時間も削減できるため、開発速度そのものを高速化することも可能です。エンジニアの業務負担軽減だけではなく、開発そのものの高速化が期待できるのがテスト自動化で得られる効果と言えるでしょう。

そのほかにもいくつかのメリットがあります。詳細は「テスト自動化のメリット」で解説しています。

テスト自動化が求められる背景とは

テスト自動化のイメージ

テスト自動化は、以下のような理由から求められています。

ソフトウェア開発を取り巻くビジネス環境の変化
・ 開発手法の変化
・ 求められる新規開発と品質保証の両立

具体的にどのような背景があるのか、それぞれ見ていきましょう。

ソフトウェア開発を取り巻くビジネス環境の変化

大きな理由としてあげられるのが、ソフトウェア開発を取り巻いているビジネス環境が、従来よりも大きく変化したことです。「より適切に、より計画通りに、ソフトウェア開発をすることが良い」とされていた時代では、ソフトウェア開発に一年またはそれ以上の長い期間をかけて行ってきました。

しかし、市場の移り変わりが激しい昨今では、開発している間に市場のニーズが変化することも珍しくありません。従来のスピードでリリースする頃には、誰からも求められない製品になってしまう可能性があります。

加えて、デジタルデバイスの普及やIT化・DXの推進にともなう需要の増加と競合他社の増加により、一つのソフトウェアを丁寧に作っていてはニーズに対応できないだけではなく、差別化することも難しくなってしまったのです。そのため、より「高速」で「効率的」なソフトウェア開発のスタイルへと移り変わっていき、テスト自動化にも注目が集まるようになったのです。

開発手法の変化

テスト自動化が注目されている背景にあるもう一つの大きな理由が、開発手法の変化です。古くから多く使われてきた開発手法であるウォーターフォール型開発は、各開発フェーズにしっかりと時間をかけ段階的に進めることで、当初の計画・要件に忠実なソフトウェア開発を実現することを目的とした開発手法です。

しかし、変化の激しい市場において、ウォーターフォール型開発では前述の通り、市場の変化に追いつくことは難しいという懸念があります。

そこで、2000年代中盤頃から、開発現場の主流がアジャイル型開発へと移り変わってきました。2019年に調査会社のガートナーから、「7割の大企業がアジャイル型開発を採用、または採用予定である」(※1) という結果が発表されていることからも、市場と一緒に開発現場も急速に変化していることがうかがえます。

(※1)https://www.gartner.co.jp/ja/newsroom/press-releases/pr-20190221

ウォーターフォール型開発、アジャイル開発についてはこちらをご覧ください。
>>ウォーターフォールモデルとは?メリット・デメリット・特徴をわかりやすく解説のページへ
>>アジャイル開発とは?意味や特徴、メリット・デメリットをわかりやすく解説のページへ
>>ウォーターフォール開発とアジャイル開発の宗教論争のページへ

テスト自動化を行っている企業規模の図
アジャイル型開発手法に関する現在および今後の方針×従業員数規模(ITデマンド・リサーチ)/調査:2018年5月

また、ソフトウェアを取り巻くビジネス環境が激しく変化している昨今、開発途中であっても仕様を市場に合わせて変えるということも増えてきました。これらを踏まえると、複数の要因によって従来のウォーターフォール型開発からアジャイル型開発への取り組みが加速しているともいえるでしょう。

アジャイル開発では小規模のイテレーションと呼ばれる工程のなかで何度もテストを実施します。このテストの負担を軽減する目的でも、テスト自動化が注目されていると言われています。

開発手法における企業の取り組み実態の図
各開発手法に関する現在および今後の方針 出典:ガートナー (ITデマンド・リサーチ)/調査:2018年5月
shiftアジャイル白書2020からの引用
弊社調査資料『アジャイル開発に関する実態調査レポート「SHIFTアジャイル開発白書2020」』より抜粋

求められる新規開発と品質保証の両立

「高速」で「効率的」な開発により、市場に適したソフトウェアの提供が可能な世界に近づくにつれ、数ヶ月おきに機能をリリースし、それを数年つづけている開発現場も増えてきました。また、限られた予算の中で市場に追いついていくために、優先的に『新機能開発』にIT投資することが必然となっています。

しかし、新しい機能、新しいサービスを高速で生み出しつづけることで、システム全体も高速で成長していき、一方で過去にリリースした機能の品質も保たなければなりません。そこで限られた予算内で、短期間、低コスト、高品質なソフトウェア開発をすることが求められるようになりました。

このような時代背景から、変化に対応する手段の一つとして、テスト自動化が求められています。

テスト自動化のメリット

テスト自動化を適切に導入することにより、さまざまな課題を解決することができます。代表的なメリットは以下の5つです。

・問題点の早期発見が可能
・低コストで品質のリスクヘッジが可能
・人為的なミスや誤りを防げる
・テストを高速化できる
・リソースが不足していてもテストが可能

それぞれどのようなメリットがあるのか、詳しく解説します。

問題点の早期発見が可能

テスト自動化の導入により、より早くテストの不具合や問題点を発見することが可能です。

いつでもテストを繰り返し行うことができる自動テスト環境を構築することで、毎週、毎日テストを実行することが可能となり、結果として問題の早期発見が可能になります。業務の無駄を取り除くことにもつながり、時間の短縮、開発リードタイム全体の効率化が進みます。

低コストで品質のリスクヘッジが可能

ソフトウェア全体の品質保証を手動テストで行うと膨大なコストがかかるため、品質保証範囲をスリム化することは珍しくありません。しかし、テストを実施しなかった機能が実は想定外のシステム障害につながる原因だった、という例は少なくありません。

テスト自動化環境を構築することでコスト面から軽視されがちな、ソフトウェア全体の品質保証を常に行うことが可能になります。人員のリソースが割けずにテストがおろそかになり、ミスが生じる可能性を少なくできるのです。人の手によるテストよりも低コストで品質のリスクヘッジを行えるため、より効果的な開発プロセスが実現できるようになるでしょう。

人為的なミスや誤りを防げる

人による作業はミスがつきものですが、テスト自動化の適用により、システムが正誤を判断するため、人為的エラーを防ぐことが可能になります。自動化テストと手動テストを比較すると、正確で迅速なテストの実行ができるため、テスト自動化の導入により効率的なテストが可能となります。

ただし、テスト自動化を適切に理解し、導入しなければ、大きなデメリットを生み出してしまうことも、テスト自動化の特徴です。我々が品質保証会社としてご支援する際、すでに自社でテスト自動化に取り組んできたが、うまく運用できていないお客様をよくお見受けします。テスト自動化にはメリットとデメリットがあることを理解しておきましょう。

テストを高速化できる

テストを自動化することで、人が行う判断や手作業によって物理的にかかる時間を大きく削減することが可能です。また、テスト自動化を導入することで、時間の経過とともに起こる効率の低下を避けることができ、24時間テスト実行を行うこともできるため、手動テストでは出せないスピードでテストを行うことが可能です。

テスト実行のスピードは、テスト内容や対象範囲、使用するツールなどによっても変化するため、目的にあったパフォーマンスが得られるかどうかは、事前にしっかりと見極める必要があります。

リソースが不足していてもテストが可能

テスト自動化を適用した範囲においては、人の手を介したテストが必要なくなるため、リソースがひっ迫している状況でもテスト実行が可能です。テストを手動とした場合、何らかの原因でリソースが不足した結果、テストが実施できなくなることもあります。正常に動作するためのテストが行われないとなると、不具合や異常の発生につながります。

テストを自動化することで人的リソースに左右されずテストが実施できるのがメリットとしてあげられます。大規模開発では、人的な原因でテストが実行できないという事態を回避することができます。

テスト自動化のデメリット

テスト自動化によるメリットが多い一方、デメリットがあることも忘れてはいけません。代表的なものは以下の3つです。

・コストが肥大化する可能性がある
・ テスト自動化のみで品質「向上」を狙った結果、形骸化する
・初期構築ばかりに目が行き、運用保守体制が構築できない

それぞれの詳細や対応策を詳しく解説します。

コストが肥大化する可能性がある

もっとも多い思い込みが、「テスト自動化を適用するとコスト削減につながる」という考え方です。テスト自動化のメリットとしては誤りではないものの、テスト自動化が効果を発揮するのは以下の状況です。

・ 高速開発現場に品質保証を適合させるため
・ 見落としがちな領域を効率的に担保するため

つまり、コスト削減だけを目的としてテスト自動化に取り組むとメリットが生まれません。

そもそもテスト自動化を実施する前に、テスト自動化ツールに入力するテストコードを作成するために必要な知識を身につけなければなりません。また、ツール導入のコストも必要になるため、逆にコストの肥大化につながることも多く起こります。コスト削減を実現するためには、自動テストを利用する頻度や求めている効果を明確にし、総合的に使用するかどうかを判断する必要があるのです。

テスト自動化のみで品質「向上」を狙った結果、形骸化する

テスト自動化は、開発業務、品質保証業務における手法の1つでしかありません。テスト自動化のみを適用したからといって、品質が「向上する」という考え方は間違っています。「保証」と「向上」の違いを適切に理解し、それぞれに適切な手法でアプローチすることがとても重要です。

これらを理解しなければ、いつまでたっても目的が達成されず、定めた成果が得られないとして現場のモチベーションも下がり、結果として形骸化してしまいます。せっかく、コストと時間をかけて構築したテスト自動化環境が、無駄になるのです。

初期構築ばかりに目が行き、運用保守体制が構築できない

テスト自動化の構築までのプロセスや体制に目を向けがちですが、もっとも重要なのが、テスト自動化の運用・保守です。テスト自動化は、成長しつづけるソフトウェアの品質保証を効率的に行う手法であるため、構築した時点で終わりではないことは理解できるでしょう。

しかし、実際に自分たちの環境にテスト自動化を適用する際、運用保守まで目を向けられるマネージャーやエンジニアは、多くありません。初期構築ももちろん重要ですが、保守・運用をして自動テストのアップデートやそれに伴うテストコード修正などが必要です。これらを意識していなければ、間違ったテストコードによるテストが行われるなど見落としやトラブルが発生してしまい、テスト自動化で業務効率化ができなくなってしまう可能性があります。

構築後のプロセスと体制も計画的に確保しておく必要があります。特にテスト自動化を実施する人的・時間的リソースを意識しておくことが重要です。

テスト自動化に向いているテスト

テスト自動化に適しているテストは、以下のようなものだと言われています。

・繰り返し作業が多いテスト
・人的チェックではミスをしやすい内容が含まれるテスト

具体的にはリグレッションテストのような繰り返し行うテストがあげられます。テスト自動化に向いているテストの共通点は、操作項目や手順が事前に決まっているものです。これらのテストは人手を使ってテストを行うよりも、自動化したほうが高い効果が出せる可能性があります。

リグレッションテストについてはこちらをご覧ください。
>>リグレッションテスト(回帰テスト)とは?目的や自動化のメリットを解説のページへ

テスト自動化に向いていないテスト

一方で、次のようなテストは自動化には適していないとされています。

・それほど回数を実施しないテスト
・物理的な作業をともなうテスト

代表的なものは探索的テストやアドホックテスト、ユーザビリティテストです。これらのテストはパターン化が難しく、自動化には適していません。また、ユーザーの使い心地など、機械では判断できない項目もテスト自動化をしないほうがいいと言われるテストのひとつです。これらのテストは自動化できないわけではありませんが、無理に自動化せずに人的なチェックをする方がよいでしょう。

テスト自動化セミナーアーカイブ『成長プロダクトの必須条件~自動化でつくる攻めの品質保証基盤~』

サービスの成長、いわゆるプロダクトライフサイクルの戦略検討に必要な要素の一つとして「品質保証」があげられます。
では、なぜプロダクトの成長において品質が重要なのでしょうか? SHIFTは業界最大手の立場からあらゆる開発手法・業界の開発プロセスに携わってきました。そのなかで、成長期におけるプロダクトが成功するための必須条件として、早期での“品質保証基盤の構築”があげられることを実感しています。
そのなかでも特に“テスト自動化”を導入することが、プロダクトの収益最大化にもっとも寄与するものとSHIFTは考えています。
そこで、当セミナーでは、プロダクトの成長において必要な品質保証の考え方を弊社の経験豊富なコンサルタントからご説明させていただきつつ、具体的にテスト自動化をプロダクトの成長へどうつなげるのか、またその最大のメリットとは何か、を事例を交えて解説します。

サービスの成長、いわゆるプロダクトライフサイクルの戦略検討に必要な要素の一つとして「品質保証」があげられます。
では、なぜプロダクトの成長において品質が重要なのでしょうか? SHIFTは業界最大手の立場からあらゆる開発手法・業界の開発プロセスに携わってきました。そのなかで、成長期におけるプロダクトが成功するための必須条件として、早期での“品質保証基盤の構築”があげられることを実感しています。
そのなかでも特に“テスト自動化”を導入することが、プロダクトの収益最大化にもっとも寄与するものとSHIFTは考えています。
そこで、当セミナーでは、プロダクトの成長において必要な品質保証の考え方を弊社の経験豊富なコンサルタントからご説明させていただきつつ、具体的にテスト自動化をプロダクトの成長へどうつなげるのか、またその最大のメリットとは何か、を事例を交えて解説します。

ダウンロード

テスト自動化導入の流れ

テスト自動化を導入するには、次の3つのステップを踏む必要があります。

1. 目的を決める
2. 対象と範囲を決める
3. 使用するツールを決める

各ステップで何を行うのか、具体的に見てみましょう。

①なぜ自動化を行うのか?目的を決める

テスト自動化を成功させるためには、目的を明確にし、その目的の達成が「本当にテスト自動化で果たせるのか」を事前に検討することが大切です。主な目的として、以下の理由が挙げられます。

・コスト削減(工数削減)
・時間削減(高速開発)
・テストの連続的な実行
・見落としやすい不具合の効率的な発見

目的を決めることで、テスト自動化がふさわしいかを検討することができます。まずはテスト自動化の目的を明確にすることから始めましょう。

②適している対象はどこか?テスト対象と範囲を決める

テスト自動化の目的を整理したら、それを踏まえながら対象と範囲を決めていきます。前述の通り、手動に向いているテストと自動に向いているテストがあるため、自動化したいテスト対象がどちらにあたるのかしっかりと見極める必要があります。精査が済んだら、改めて最初に定めた目的に合っているかの確認も行いましょう。

③最適なツールは何か?実装するツールを決定する

テスト対象と範囲を決めたら、最後に導入するツールについて検討を行います。対象とするシステムやテスト内容、対象範囲によっても選定基準は異なりますが、先々の運用を見据えた選定や、導入・運用コスト、メンテナンスコストを踏まえて費用対効果を考慮した選定もしておくことが重要です。

テスト自動化における課題

テスト自動化によるメリット・デメリットを解説してきましたが、テスト自動化を導入した途端、今行っているテストの工数が削減されて開発コストが軽減する、開発業務が楽になる、品質が向上するというのは誤った認識です。

前述の通り、テスト自動化は次の2点に力を発揮します。

・高速開発現場に品質保証を適合させるため
・見落としがちな領域を効率的に担保するため

自動化で削減した工数で、人の手で行わなければならない開発やテストに工数を効果的に配分させることが最大の目的になります。テスト自動化の適用範囲を拡大することも非常に重要です。

「ただ便利になるから」と目的があいまいな状態でテスト自動化を導入した結果、従来の手動テストよりも融通が利かなくなったり、テストデータの共有が面倒になったりしてしまう可能性があります。自動化したことによってかえってテスト実行に手間がかかってしまう可能性もあるでしょう。

テスト自動化は品質保証を行うための1つの手法であり、すべてではないことを強く意識しなければなりません。

テスト自動化導入成功の鍵

テスト自動化成功のイメージ

すでにこれまでの記事を読まれた皆さんは、テスト自動化を検討するうえで気にしなければならないポイントを自然と理解いただけているのではないでしょうか。

同時に、導入におけるハードルの高さ、検討の難しさも感じられているかもしれません。

この章では、テスト自動化を成功に導くためのポイントを2つご紹介します。

「求める主要な結果」の設定、啓蒙こそ重要

実際、テスト自動化導入における失敗事例は多く存在しており、9割が失敗するとまでいわれているものです。失敗例の多くは、次の要素から発生するものです。

・テスト自動化に対し、誤った認識のもとスタートをしてしまう
・「テスト自動化を導入する」ことのみが目的(Objective)となり、主要な結果(Key Results)が定まっていないため、導入効果が不明瞭になる
・時間とコストを試算せず、即日効果を求める

では、そうならないためには何をすべきか。失敗要因の裏返しで考えると、以下が重要であるといえます。

「何ができれば達成した、成功したといえるのか。」
「何を目的にテスト自動化の検討を始めるのか。」
「どの程度の時間とコストをかけて、いつまでに成果を出したいのか。」

これらを考え、設定し、現場に啓蒙する。これこそが1つ目の成功のポイントです。

開発現場の取り巻く環境やカルチャーに合わせて目的・結果を定め、それらを達成することが「成功」と考えています。それは、達成までの予実を管理し、効果測定をつづけ、適切に推進していくことが重要であるともいえるでしょう。また、即効性を求めることも危険です。結果が出るまでには、定めた目的・求めた結果に応じて、まとまった期間がどうしても必要になります。

つまり、テスト自動化が『成功』するか『失敗』するかは、ある程度の時間とコストを想定し、目的を定め、実行していくしかないのです。

導入タイミングは早ければ早いほうがよい

「テスト自動化のメリット」では、以下のように述べました。

テスト自動化環境を構築することでコスト面から軽視されがちな、ソフトウェア全体の品質保証を常に行うことが可能になります。人員のリソースが割けずにテストがおろそかになり、ミスが生じる可能性を少なくできるのです。人の手によるテストよりも低コストで品質のリスクヘッジを行えるため、より効果的な開発プロセスが実現できるようになるでしょう。

2つ目のポイントは、このメリットを最大化させるために、テスト自動化の導入を早めることです。

以下の図は、ローンチ後のソフトウェア開発・運用に必要な工数(累積)を、テスト自動化を取り入れなかった場合と取り入れた場合でシミュレーションした結果です。

ソフトウェア開発の運用に必要な工数のグラフ
図. ローンチ後のソフトウェア開発・運用に必要な工数(累積)

(1)一時的に、テスト自動化の環境構築、準備工数がかかり、テスト自動化を取り入れない場合より、工数が上がっています。
(2)旧機能(すでにリリース済みの機能)は成長しつづけ、QA工数はN (1.0以上)倍で増加しつづけます。
(3)旧機能のQAはテスト自動化環境によって担保され、工数増加が抑制。年月が経つにつれてその差(効果)は大きくなっていきます。

図内の(3)の通り、年月が経つほど効果が大きくなります。

「テスト自動化における導入ハードルが高い。」
「まだまだ継続的に機能追加が見込まれている状況で、今構築してもメンテナンスが大変になってしまうはずだ。」

など、さまざまな要因で導入検討を先延ばしにする現場も多くあると思いますが、それは、生み出される成果期待値を下げてしまっているのと同義です。

テスト自動化 費用対効果からみる推奨領域の図
図. テスト自動化 費用対効果からみる推奨領域

上の図では、テスト自動化を適用するのに、コストと効果のバランスがもっとも適切であり、導入ハードルが低いのは、「スモーク」「マネーパス」であるということがわかります。

ここで注目したいことは、テスト自動化に適していると考えている「スモーク」と「マネーパス」は、ローンチからの経過年数の長短に限らず、ほとんどのシステムにおいて、大きな変更が行われていないということです。

みなさんの身の回りのシステムをイメージしてみてください。対象システムの根幹である「スモーク」「マネーパス」領域に関連する機能、例えばECサイトであれば、ログインの操作や、商品の購入操作は、ローンチ初期から頻繁に刷新されるものではありません。

よって、早い段階でテスト自動化を導入したとしても、構築・メンテナンスにかかる労力や難易度は、皆さんが想像するほど多くありません。

いち早くテスト自動化を導入し、システムの成長と並走する形で、品質のリスクヘッジを長期的に行えたほうが、より効果的であるといえます。

関連サービスについて

テスト自動化ツールのご紹介

テスト実行のテスト自動化ツールと種類

テスト実行(ブラウザベース)

Selenium:ブラウザの自動操作フレームワーク。さまざまなテストフレームワークのベース。

Nightwatch.js:対応するメンバーがJavaScript/Node.jsを得意としている際に利用。
Geb:対応するメンバーがJava/Groovyを得意としている際に利用。
Selenide:対応するメンバーがJavaを得意としている際に利用。

テスト実行(スマートフォンアプリケーションベース)

Appium:Android/iOS両アプリケーションにE2Eテストを自動実行する際に利用。
UI Automator:AndroidアプリケーションにE2Eテストを自動実行する際に利用。特にブラックボックステストで用いられる。
XCTest/XCUITest:iOSアプリケーションにコンポーネントテストやUIテスト、E2Eテストを自動実行する際に利用。

テスト自動化の導入に関する相談はSHIFTにお任せ

テスト自動化が求められる背景やメリット・デメリット、導入する際の流れやポイントについて解説してきました。テスト自動化は、ただ導入するだけで効果が期待できるわけではありません。メリット・デメリットを理解するとともに、自動化する目的は何なのか、自動化して問題ないのかどうかを判断する必要があるでしょう。アジャイル開発が全盛の時代になったからこそ、自動化できる部分は自動化し、業務の効率化を図る必要があります。適切にテスト自動化を導入し、開発の高速化や品質向上につなげていきましょう。

>>テスト自動化のページへ
>>ソフトウェアテスト・第三者検証のページへ
>>導入事例ページへ
>>料金についてページへ
>>お問い合わせページへ

資料ダウンロード/動画視聴

この記事を書いた人

株式会社SHIFT マーケティンググループ
著者 株式会社SHIFT マーケティンググループ

SHIFTは「売れるサービスづくり」を得意とし、お客様の事業成長を全力で支援します。無駄のないスマートな社会の実現に向けて、ITの総合ソリューションを提供する会社です。

サービスサイト:https://service.shiftinc.jp/
コーポレートサイト:https://www.shiftinc.jp/
X(旧Twitter):https://twitter.com/SHIFT_cp

ご支援業種

  • 製造、金融(銀行・証券・保険・決済)、情報・通信・メディア、流通・EC・運輸、ゲーム・エンターテイメント

など多数

関連コラム

Top