fbpx

Get your 6-month No-Cost Opt-Out offer for Unlimited Software Automation?

У цій статті ми розглянемо, що таке тестування продуктивності, разом із багатьма доступними типами та інструментами, труднощами та перевагами тестування продуктивності та багато іншого. Цей вичерпний посібник також включатиме аналіз автоматизованого тестування продуктивності, яке стає все більш поширеним із подальшим розвитком технологій.

Що таке тестування продуктивності?

Тестування продуктивності, іноді скорочене до «тестування продуктивності», — це процес, який виконується для визначення того, чи буде певний продукт добре виконувати очікувані процеси за різних робочих навантажень. Це може приймати форму тестування продуктивності веб-сайту або тестування продуктивності під час тестування програмного забезпечення, залежно від задіяного продукту.

Тестування продуктивності в основному призначене для виявлення несправних параметрів продукту, які можна змінити на ранніх етапах життєвого циклу продукту, щоб уникнути більших проблем у майбутньому. Це часто називають виявленням вузьких місць, що відноситься до одного компонента, який стримує загальну продуктивність програмного забезпечення.

Тестування продуктивності може проводитися в лабораторії або у виробничому середовищі та зазвичай оцінює швидкість, швидкість, масштабованість, стабільність, швидкість реакції та надійність продукту.

 

Чи відрізняється тестування продуктивності від функціонального?

Переваги від створення Центру передового тестування. Чи відрізняється тестування продуктивності від функціонального?

Тестування продуктивності відрізняється від функціонального тестування, яке перевіряє, чи працюють певні функції програми, наприклад кнопка «додати до кошика» в інтернет-магазині.

Тестування продуктивності перевіряє, наскільки добре функція працює під сильним тиском, наприклад, чи продовжить працювати кнопка, якщо багато людей додають до кошика одночасно?

Обидва ці типи тестів підпадають під парасольку тестування продуктивності API, що означає, що їх метою є визначення загальної продуктивності інтерфейсу системи за певних обставин із серверної частини програмного забезпечення. У цій статті буде розглянуто багато типів інструментів тестування продуктивності API, наприклад тестування продуктивності моделі робочого навантаження.

 

Навіщо нам тестування продуктивності?

Веб-тести продуктивності є важливими, щоб розробники могли надати зацікавленим сторонам надійну інформацію про продуктивність програми та передбачити, як вона реагуватиме на різні рівні трафіку.

Тестування продуктивності також показує, що потрібно покращити, перш ніж продукт потрапить на полиці або після того, як він буде запущений, уникаючи низької продуктивності, невідповідностей і поганої зручності використання. Він перевіряє очікувану кількість користувачів, щоб можна було покластися на його роботу, як очікувалося.

Переваги тестування продуктивності

Перелік перевірок програмного забезпечення

Ми вже коротко згадували про переваги тестування продуктивності, просто визначаючи, що це таке, але нижче ми розглянемо список конкретних переваг тестування продуктивності.

 

1. Реалістична інформація

Як коротко згадувалося вище, тестування продуктивності використовується для надання зацікавленим сторонам надійної, реалістичної інформації про те, як працюватиме програма. Без цього існує ризик зіпсованої репутації компанії.

Точне тестування продуктивності означає, що можна отримати надійні цифри, які можна покращити в процесі тестування, тобто продукт може мати перевагу над іншими продуктами на ринку та підтвердити це надійною продуктивністю, що призведе до збільшення продажів.

 

2. Дозволяє підготуватися

Тестування продуктивності можна використовувати, щоб визначити, де можуть статися збої, пов’язані з програмним забезпеченням, коли є велика кількість користувачів, тобто програму можна оптимізувати таким чином, щоб ці проблеми були вирішені та витримували більше використання. Це ідеально підходить, наприклад, для сайтів електронної комерції, яким може знадобитися підготуватися до очікуваних великих подій, таких як Чорна п’ятниця.

Проведення тестування продуктивності дозволяє уникнути збоїв, коли сайт працює в критичні моменти. Інтернет-магазин, який не може впоратися з кількістю користувачів у Чорну п’ятницю, занадто довго завантажується або має збої, швидше за все, втратить великі прибутки.

 

3. Покращений досвід користувача

Тестування продуктивності слід проводити регулярно, щоб веб-сайт або програмне забезпечення з найвищою продуктивністю продовжували виконувати очікувану функцію. Постійне тестування продуктивності означає, що будь-які проблеми, які можуть виникнути в режимі реального часу, вирішуються якомога швидше. Важливість цього залежить від досвіду користувачів, навіть поза основними подіями, які ми окреслили вище.

Якщо веб-сайт незмінно зручний для користувачів із покращеннями, які гарантують, що він ніколи не відстає, клієнти будуть часто відвідувати його.

 

4. Порівнюючи

Тестування продуктивності також можна використовувати для порівняння одного продукту з іншим. Це може бути корисним для розробника, який прямує до дуже конкурентоспроможної галузі, який хоче бути впевненим, що він дорівнює або може перевершити свого основного конкурента на ринку.

Це можна використовувати як пропозицію, щоб отримати перевагу, або просто як еталон під час процесу тестування, щоб переконатися, що програма працює достатньо добре.

Проблеми та обмеження тестування продуктивності

виклики навантажувального тестування

Незважаючи на те, що тестування продуктивності має низку значних переваг, через його складний характер є деякі проблеми та обмеження, які ми розглянемо нижче.

1. Час

Щоб скористатися всіма цими перевагами, організації повинні бути готові приділяти час тестуванню продуктивності. Це може включати налаштування апаратного забезпечення та інфраструктури, яких вони не очікували, або призначення співробітників для тестування продуктивності.

Щоб тестування продуктивності було ретельним, не слід поспішати, і деяким компаніям може бути важко відкласти цей час замість запуску наступної фази проекту, оскільки це може призвести до тривалих затримок.

 

2. Гроші

Існують дорогі інвестиції, які потрібно зробити для тестування продуктивності. Ціна інструменту тестування продуктивності залежить від масштабу веб-сайту чи програмного забезпечення, а також від того, чи обирає організація інструменти тестування продуктивності вручну чи автоматично.

Безкоштовні інструменти тестування продуктивності існують, але вони мають обмежений функціонал і не працюють так добре, як платні.

Крім того, тестування продуктивності може виявити несподівані проблеми, які потребують дорогого оновлення або додаткової потужності системи, які спочатку не були враховані в бюджеті.

Для невеликих підприємств інструменти тестування продуктивності можуть бути витратами, які вони не бажають платити, незважаючи на те, що це може значно вплинути на їх ефективність у довгостроковій перспективі.

 

3. Обмеження інструментів

Можуть бути обмеження залежно від інструменту тестування продуктивності, який обирає розробник.

Як ми вже зазначали, вибір безкоштовного інструменту тестування продуктивності економить бюджет, але може втратити важливі аспекти. Деякі інструменти, навіть платні, можуть мати обмежену сумісність, наприклад, деякі з них можуть підтримувати лише тестування продуктивності веб-сайту чи тестування продуктивності браузера, але не можуть тестувати продуктивність програмного забезпечення.

Крім того, деяким інструментам тестування продуктивності може бути складно перевірити складні або дуже великі додатки та вимагати ретельного контролю з боку співробітників.

Види тестування продуктивності

види тестування продуктивності

Існує кілька типів тестування продуктивності, які стосуються методів, які використовуються для тестування системи. Використовуваний метод вибирається виходячи з масштабу і типу системи, що тестується, а також передбачуваних цілей, які переслідують розробники.

Тут ми визначимо основні типи тестування продуктивності, які використовуються, і як вони працюють.

 

1. Навантажувальне тестування

Інструменти тестування продуктивності навантаження дозволяють розробникам зрозуміти, як буде поводитися система за попередньо визначеного конкретного значення навантаження.

Цей процес передбачає моделювання очікуваної кількості одночасних користувачів протягом певного періоду часу. Це перевіряє очікуваний час відповіді програми та визначає потенційні вузькі місця до того, як веб-сайт або програмне забезпечення запрацюють. Це можна зробити, щоб перевірити, чи може система в цілому впоратися з очікуваним використанням, або перевірити, як впорається певна функція, як-от приклад «додати до кошика», який ми згадували вище. Це іноді називають «модульним тестуванням».

 

2. Стрес-тестування

Стрес-тестування є іншою формою тестування продуктивності моделі робочого навантаження, і його часто можна проводити за допомогою тих самих інструментів, але воно змушує сайт збільшувати потужність тестування, поки він не зламається, замість того, щоб мати обмежене, визначене значення навантаження.

Це використовує більший, ніж очікувалося, трафік, щоб розробники могли дізнатися, яка його точка збою, і побачити, як він справляється з високими рівнями обробки даних. Це допомагає розробникам зрозуміти масштабованість програмного забезпечення та показує, скільки часу потрібно ключовим показникам ефективності (KPI), щоб повернутися до нормального робочого рівня після великої події даних.

IS YOUR COMPANY IN NEED OF

ENTERPRISE LEVEL

TASK-AGNOSTIC SOFTWARE AUTOMATION?

Стрес-тестування може проводитися до або після запуску системи.

 

3. Спайкове тестування

Це підмножина стрес-тестування, але більш конкретно аналізує продуктивність системи в умовах раптового значного збільшення кількості кінцевих користувачів. Ці тести продуктивності допомагають визначити, чи здатна система впоратися з різкою зміною кількості користувачів протягом короткого періоду часу та неодноразово.

 

4. Випробування на замочування

Цей тип тестування продуктивності також відомий як тестування на витривалість, і він призначений для перевірки довгострокової продуктивності системи та того, наскільки добре вона може впоратися з часом. Вони аналізують пропускну здатність і час відгуку після тривалого використання, щоб перевірити, чи показники продуктивності є послідовними та чи є якісь збої.

Що ми повинні перевірити за допомогою тестування продуктивності?

Що таке модульне тестування?

Мета тестування продуктивності — виявити проблеми, але головна мета — знати, що їх викликає.

Нижче наведено список речей, які в основному перевіряються за допомогою тестування продуктивності.

1. Вузькі місця

Тестування продуктивності завжди має бути спрямоване на пошук вузьких місць, які впливають на загальну продуктивність системи. Це може бути пов’язано з будь-якими показниками тестування продуктивності, які ми перерахуємо в наступному розділі.

2. Час завантаження

Це означає виділення, необхідне для початку застосування. Затримка має бути якомога коротшою, щоб запропонувати найкращу взаємодію з користувачем – все, що триває більше ніж кілька секунд, може відштовхнути користувачів.

3. Час відповіді

Поганий час відповіді – це коли час, який проходить між введенням інформації користувачем і відповіддю на дію, занадто довгий. Як і надмірний час завантаження, це розчарує користувача та спонукає його залишити сайт або програму.

4. Масштабованість

Необхідно перевірити масштабованість системи, тобто її адаптивність до різних вимог використання даних. Обмежена масштабованість буде визначена, якщо система може добре працювати з декількома одночасними користувачами, але під час навантажувального або стрес-тестування погіршується, коли кількість користувачів збільшується.

Показники тестування продуктивності

переваги створення центру передового тестування (TCoE)

Одна справа – мати можливість перевірити ці речі та побачити, коли вони йдуть не так, але як саме вони вимірюються?

Існує незліченна кількість показників, які розробники використовують для тестування продуктивності, тому ми вибрали основні з них і надали їх короткий опис нижче.

1. Пропускна здатність

Це вказує, скільки одиниць інформації система здатна обробити за певний час.

2. Використання пам’яті

Пам’ять з точки зору веб-сайту або розробки програмного забезпечення означає робочий простір для зберігання, доступний для процесора або робочого навантаження.

3. Пропускна здатність

Це означає обсяг даних за секунду, який може переміщатися між робочими навантаженнями, часто через мережу. Низька пропускна здатність призводить до низького часу завантаження.

4. Переривання процесора в секунду

Це вимірює вплив апаратного забезпечення на процес, вимірюючи кількість апаратних переривань, які воно отримує за секунду.

Характеристики ефективного тесту продуктивності

Хороший тест продуктивності дозволить розробникам усунути помилки, але конкретні характеристики ефективного тесту продуктивності є більш специфічними та їх важко досягти.

1. Реалістичне тестування

Найкращі тести продуктивності – це ті, які передбачають реальні сценарії, з якими може зіткнутися система.

Це означає, що його можна оптимізувати для роботи в умовах, для яких він був розроблений, щоб він міг досягати своїх цілей продуктивності та не стикався з проблемами в критичні моменти.

2. Швидкий аналіз

Оптимальні тести продуктивності дозволяють якомога швидше внести зміни відповідно до результатів.

Незважаючи на те, що він має бути ретельним, дані мають бути легкими для аналізу та виконуватися якомога швидше, щоб можна було вжити заходів. Це особливо важливо, якщо тестування проводилося після того, як програма або сайт були активні.

3. Надійні результати

Хоча швидкість є важливою для оптимізації процесу тестування продуктивності, отримані дані мають бути надійними та точними, щоб можна було прийняти правильне рішення.

Щоб провести надійний і швидкий аналіз, багато хто звертається до автоматизованого тестування продуктивності, про яке ми розповімо докладніше пізніше.

 

Процес тестування продуктивності

Що таке ручне тестування ПЗ

Процес тестування продуктивності відрізнятиметься для кожної організації залежно від чинників, які ми вже визначили.

Однак є шість основних кроків, які окреслюють те, за якими слідує більшість процесів тестування продуктивності, які дозволять отримати ефективний результат.

1. Стратегії тестування продуктивності

Першим кроком до початку процесу тестування продуктивності є знання середовища тестування. Дізнайтеся, які інструменти тестування у вас є, включно з рішенням щодо того, чи проводитиметься воно вручну чи автоматизовано, а також визначте потенційні стратегії тестування ефективності.

Переконайтеся, що ви розумієте деталі будь-якого обладнання та програмного забезпечення, а також будь-які мережеві конфігурації, які використовуватимуться.

 

2. Критерії ефективності

Далі важливо визначити цілі тесту та критерії успіху, над якими ви працюєте, які будуть різними для кожного тесту. Наприклад, визначте обмеження пропускної здатності та очікуваний час відповіді та розподіліть ресурси.

На цьому етапі може бути корисним визначити схожу систему для порівняння, щоб встановити цілі продуктивності.

 

3. План перевірки продуктивності

Після визначення критеріїв можна починати планування та розробку тесту ефективності.

Визначте, яке використання програма, імовірно, матиме, і ключові сценарії, які ви можете змоделювати, щоб переконатися, що система реагує належним чином. Сплануйте дані тестування продуктивності, які ви збираєтеся отримати, як ви їх отримаєте та які показники використовуватимуться.

 

4. Дизайн тесту продуктивності

Після повного завершення всього планування ви можете почати фізично проектувати та налаштовувати тестове середовище та організовувати необхідні інструменти та ресурси.

Потім створіть тести продуктивності відповідно до дизайну, готові до їх запуску.

 

5. Тест

Це точка, де буде виконано тест продуктивності. Важливо, щоб ви спостерігали за процесом і створювали журнали, в яких документувалися KPI.

 

6. Проаналізуйте та перевірте повторно

Закріпіть результати та почніть процес аналізу.

Як це було у порівнянні з вашими очікуваннями, які показники вимірювалися та як відреагувала система? Потім змініть тест продуктивності та повторіть тестування, щоб визначити покращення або зниження продуктивності. Поліпшення мають зменшуватися з кожним повторним тестуванням.

Зареєструйте всі поточні результати.

Приклади тестування продуктивності

що таке автоматизація тестування програмного забезпечення

Існує багато потенційних сценаріїв тестування продуктивності залежно від системи, що тестується, її призначення, використовуваних інструментів і типу тестування продуктивності.

Давайте повернемося до нашого прикладу сайту електронної комерції.

сайт електронної комерції

Розробники, можливо, захочуть використати тестування продуктивності моделі робочого навантаження, щоб переконатися, що час відповіді не перевищує трьох секунд, коли 2000 користувачів одночасно відвідують веб-сайт за допомогою тесту навантаження.

Наступним кроком може бути перевірка того, що час відповіді все ще знаходиться в межах прийнятного діапазону в п’ять секунд, коли з’єднання з мережею повільне.

Готуючись до Чорної п’ятниці, розробники можуть використати стрес-тест, щоб визначити максимальну кількість користувачів, яких може прийняти сайт, перш ніж він зазнає збоїв, таких як збій або дуже повільний час відгуку. Під час цього вони перевірятимуть використання пам’яті та процесора веб-сайту, а також те, як сервер бази даних реагує в умовах пікового навантаження.

Потім вони повторно перевірять усі ці параметри за різних умов, можливо, використовуючи тестування на стрибки або тестування на затримку, щоб визначити, як вони реагуватимуть протягом різних часових проміжків.

Розробники також використовуватимуть модульне тестування функції «додати в кошик», наприклад, перевіряючи, як система реагує на одночасне виконання транзакції 100 користувачами.

Чи варто автоматизувати тестування продуктивності?

комп'ютерний зір для тестування програмного забезпечення

IS YOUR COMPANY IN NEED OF

ENTERPRISE LEVEL

TASK-AGNOSTIC SOFTWARE AUTOMATION?

Автоматизоване тестування продуктивності — це процес автоматизації, який дозволяє заздалегідь створеним інструментам, програмному забезпеченню та коду запускати процес автоматизації, а не виконувати його вручну.

Автоматизація тестування продуктивності стає незамінною в наш час, коли деякі організації використовують роботизовану автоматизацію процесів , а деякі навіть рухаються до гіперавтоматизації .

Програмне забезпечення для автоматизації тестування продуктивності має безліч як переваг, так і недоліків, які ми розглянемо нижче.

Переваги автоматизованих тестів продуктивності

Тестування продуктивності забирає багато часу та грошей, які можуть бути витрачені на створення коду тестування та повторення його вручну, підвищуючи ефективність циклу тестування.

Це також часто означає, що розробники можуть розпочати тестування продуктивності й перейти до чогось іншого, а не постійно контролювати його, що робить можливою віддалену роботу, а це означає, що тестування можна проводити навіть протягом ночі.

Крім того, як ми вже зазначали, через природу автоматизації процес тестування продуктивності не просто стає швидшим, але стає більш точним і надійним, здатним завершувати комплексні процеси без ризику людської помилки.

Усі ці фактори, звичайно, економлять дорогоцінний час і гроші бізнесу, часто вихваляючись вищою рентабельністю інвестицій.

Обмеження автоматизованих тестів продуктивності

Автоматизовані тести продуктивності можуть мати обмеження щодо реальних досягнень. Для дуже складних тестів і для виправлення помилок, які можуть виникнути в автоматизованому процесі, часто потрібне введення людини.

Людське спостереження може бути важливим для виявлення збоїв і сприяння покращенню взаємодії з клієнтом, що не може бути гарантовано автоматизованим тестуванням.

Ручне тестування часто краще підходить для дослідницького тестування, тестування зручності використання та спеціального тестування.

Висновок: тестування продуктивності вручну проти автоматизованого

Щоб вибрати між ручним і автоматичним тестуванням продуктивності, вам потрібно ретельно оцінити свої критерії продуктивності та бюджет. Автоматизоване тестування продуктивності часто є бюджетнішим і швидшим, особливо для великих потреб тестування, але ручне тестування може виявити проблеми, яких автоматизована система не зможе.

Інструменти тестування продуктивності

засоби автоматизованого управління продуктивністю

Існує багато типів інструментів тестування продуктивності, але в основному їх можна розділити на дві категорії: інструменти тестування продуктивності API та інструменти тестування продуктивності інтерфейсу користувача.

Інструменти тестування продуктивності API аналізують, чи виконуються правильні процеси у серверній частині програми. Інструменти тестування продуктивності REST API — це певний тип, який виконує перевірку веб-продуктивності, надсилаючи різні запити HTTP/S.

З іншого боку, інструменти тестування продуктивності інтерфейсу користувача перевіряють клієнтську сторону, тобто оцінюється досвід користувача.

Найкращими інструментами для тестування продуктивності є ті, які виконують обидва ці дії, оскільки вони пропонують повне уявлення про те, чи працює система. Окрім цього, доступні як безкоштовні інструменти, так і платне програмне забезпечення для автоматизації тестування продуктивності на корпоративному рівні , тож як вам прийняти рішення?

Безкоштовні інструменти тестування продуктивності: переваги та обмеження

На ринку є низка безкоштовних послуг тестування продуктивності.

Очевидна перевага цього полягає в тому, що вони відкривають тестування продуктивності для менших компаній або стартапів, які можуть не мати бюджету, щоб заплатити за корпоративний інструмент тестування. Це означає, що вони можуть отримати доступ до основних можливостей тестування продуктивності та відповідно редагувати свою систему.

Однак обмеження безкоштовного програмного забезпечення для автоматизації тестування продуктивності полягають у тому, що воно часто не працює так добре, як платне. Їх функціональні можливості, ймовірно, будуть обмежені, і буде складніше розробляти та підтримувати сценарії.

Безкоштовні інструменти тестування продуктивності можуть бути несумісними з усіма платформами чи типами тестування або не мати функції звітування. Деякі функції можуть бути заблоковані платним доступом, наприклад доступ до тестування API.

Інструменти тестування продуктивності підприємства: переваги та обмеження

Інструменти для тестування продуктивності підприємства – це програмне забезпечення, розроблене для роботи в усьому бізнесі. Вони часто варті своєї ціни, оскільки вони, ймовірно, будуть сумісні з багатьма типами тестування, мовами та платформами для підвищення гнучкості та масштабованості.

Корпоративний інструмент тестування продуктивності є потужним, тож може виконувати більші тести за менший період часу та поставляється з майбутніми оновленнями для покращення продуктивності, чого не можуть отримати безкоштовні версії.

Однак підприємства можуть не мати бюджету, щоб виділити ці послуги тестування продуктивності, особливо для програмного забезпечення, яке має багато функцій, які вони не використовуватимуть, або якщо їхній бізнес відносно невеликий.

Інструменти тестування продуктивності підприємства також можуть бути важчими для доступу та повільнішими для впровадження, ніж прості безкоштовні версії.

Однак провідні інструменти тестування програмного забезпечення, такі як ZAPTEST, пом’якшують це обмеження, пропонуючи модель інструмент + послуга. Таким чином, експерт ZAP тісно та віддалено співпрацює з клієнтською організацією (як частина їхньої команди), підтримуючи їх у впровадженні плану тестування продуктивності, інструменті ZAPTEST та оптимізації процесу тестування.

 

Коли слід використовувати корпоративні, а не безкоштовні інструменти тестування продуктивності?

Оцініть свої варіанти на основі обставин вашої організації. Іноді може бути рентабельніше вибрати безкоштовну версію, яка містить основні функції, які вам потрібні, наприклад, для одноразового тестування веб-сайту.

Якщо ви є частиною великої організації, яка може отримати вигоду від складної системи тестування з великою кількістю даних, яку ви використовуватимете багато разів для різних систем, інструмент для тестування продуктивності підприємства, швидше за все, допоможе вам найбільше.

Контрольний список тестування продуктивності

1. Бюджет

Щоб визначити найкращий інструмент для тестування продуктивності, необхідно мати докладний бюджет, щоб мати можливість визначити, чи можете ви дозволити собі корпоративну або іншу платну версію.

Дослідіть різні доступні інструменти та прийміть рішення на основі ваших критеріїв ефективності та тестового середовища.

2. План

Коли ваш бюджет буде встановлено, ви можете спланувати процес тестування продуктивності, наприклад вибрати найкращу стратегію, вирішити, які критерії ви тестуєте, і визначити, які показники використовувати.

Процес планування має бути ретельним незалежно від того, чи ви обираєте ручне чи автоматичне тестування продуктивності.

3. Проаналізуйте

Проведіть перевірку продуктивності з ретельним аналізом під час тестування та після нього.

Щоб тест продуктивності був ефективним, ви повинні вміти діяти на нього найкращим чином, тому уважно подивіться на дані та продовжуйте тестувати й аналізувати життя системи.

Висновок

Ми розглянули деякі типи та інструменти тестування продуктивності, а також основні переваги та обмеження тестування продуктивності.

Тестування продуктивності залишається особливо важливим, оскільки використання онлайн-систем і додатків не сповільнюється, а фактично набирає швидкість, а мати систему, яка може впоратися з великим тиском, є важливішим, ніж будь-коли, в умовах величезної конкуренції.

Щоб залишатися в авангарді інновацій, великі компанії повинні розглянути переваги програмного забезпечення для автоматизації тестування продуктивності на рівні підприємства та те, як інвестиції в нього можуть принести їм користь у довгостроковій перспективі.

 

Download post as PDF

Alex Zap Chernyak

Alex Zap Chernyak

Founder and CEO of ZAPTEST, with 20 years of experience in Software Automation for Testing + RPA processes, and application development. Read Alex Zap Chernyak's full executive profile on Forbes.

Get PDF-file of this post

Virtual Expert

ZAPTEST

ZAPTEST Logo