SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
Основнi моменти модульного тестування в
Qt Framework
Герасимчук Назар
магiстр 2-го року навчання,
факультет кiбернетики,
Київський нацiональний унiверситет iм. Т. Шевченка
3 жовтня 2012 р.
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 1 / 21
Змiст
Модульне тестування
Що це таке?
Порiвняння з iншими видами тестування.
Причини використання.
Причини НЕ використання.
Парктичне використання
Кiлька слiв про Qt.
Реалiзацiя модульного тестування в Qt.
Приклад.
Висновки
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 2 / 21
Тестування
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 3 / 21
Модульне тестування
Що це таке?
Unit testing – iзольована перевiрка кожного окремого елементу
(модуль, функцiя, клас) шляхом запуску тестiв в штучному
середовищi.
Цiль: виявлення локалiзованих в модулi помилок, а також визначення
ступеня готовностi системи до переходу на iнший рiвень розробки i
тестування.
Основна iдея: оцiнюючи кожен елемент iзольовано i пiдтверджуючи
коректнiсть його роботи, точно встановити помилку значно простiше,
нiж якби елемент був частиною системи.
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 4 / 21
Модульне тестування
«Заглушки»
«Заглушки» – замiнюють компоненти, якi використовуються
модулем i виконують наступнi дiї:
не виконують нiчого,
повертають постiйне значення,
вiдображають спрощену реалiзацiю компоненту,
iмiтують аварiйнi умови.
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 5 / 21
Модульне тестування
Скiльки треба тестiв? //фiлософське питання
Код з невiдтестованим частинами не має бути опублiкований.
Повне покриття тестами не гарантує роботоздатностi.
Безглуздо писати тести заради лише 100% покриття.
Питання «Як я можу зламати?»
ефективнiше питання «Як я можу пiдтвердити правильнiсть?».
Тести повиннi базуватися на специфiкацiї.
На кожну вимогу повинен бути тест.
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 6 / 21
Модульне тестування
Порiвняння з iншими видами тестування.
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 7 / 21
Модульне тестування
Причини використання.
Написання тестiв. . .
. . . дозволяє ввiйти в робочий ритм.
. . . дає впевненiсть в працездатностi коду.
. . . дає запас стiйкостi при подальшiй iнтеграцiї чи змiнах коду.
. . . є своєрiдним документуванням.
. . . сприяє рефакторингу в сторону декомпозицiї i доопрацюванню
архiтектури.
. . .
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 8 / 21
Модульне тестування
Причини НЕ використання.
Написання тестiв займає багато часу.
Запуск тестiв займає багато часу.
Це – не моя робота тестувати код.
Лiнь.
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 9 / 21
Парктичне використання
Кiлька слiв про Qt
Qt – кросплатформовий iнструментарiй розробки ПЗ мовою
програмування C++.
Включає класи необхiднi при розробцi: вiд графiчного iнтерфейсу
i закiнчуючи класами для роботи з мережею, базами даних,
OpenGL, OpenCV, SVG i XML.
Дозволяє керувати потоками, працювати з мережею, i забезпечує
крос-платформовий доступ до файлiв.
З коробки є пiдтримка iнфраструктури тестування QtTestLib.
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 10 / 21
Парктичне використання
Реалiзацiя модульного тестування в Qt.
QtTestLib – легка бiблiотека призначена для тестування, введена в Qt
з 4.1:
юнiт-тестування,
тестування GUI.
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 11 / 21
Принцип роботи QtTestLib
Простий приклад тестуючого класу
class testDate: public QObject
{
Q_OBJECT
private slots:
void testValidity();
void testMonth();
};
void testDate::testValidity()
{
QDate date( 1967, 3, 11 );
QVERIFY( date.isValid() );
}
void testDate::testMonth()
{
QDate date;
date.setYMD( 1967, 3, 11 );
QCOMPARE( date.month(), 3 );
QCOMPARE( QDate::longMonthName(date.month()),
QString("March") );
}
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 12 / 21
Принцип роботи QtTestLib
Результат виконання – успiшно
********* Start testing of testDate *********
Config: Using QTest library 4.8.1
PASS : testDate::initTestCase()
PASS : testDate::testValidity()
PASS : testDate::testMonth()
PASS : testDate::cleanupTestCase()
Totals: 4 passed, 0 failed, 0 skipped
********* Finished testing of testDate *********
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 13 / 21
Принцип роботи QtTestLib
Результат виконання – неуспiшно
********* Start testing of testDate *********
Config: Using QTest library 4.8.1
PASS : testDate::initTestCase()
PASS : testDate::testValidity()
FAIL! : testDate::testMonth() Compared values are not the same
Actual (date.month()): 4
Expected (3): 3
Loc: [tutorial1.cpp(25)]
PASS : testDate::cleanupTestCase()
Totals: 3 passed, 1 failed, 0 skipped
********* Finished testing of testDate *********
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 14 / 21
Принцип роботи QtTestLib
Керування даними – слот перевiрки
void testDate::testMonth()
{
QFETCH(int, year);
QFETCH(int, month);
QFETCH(int, day);
QFETCH(QString, monthName);
QDate date;
date.setYMD( year, month, day);
QCOMPARE( date.month(), month );
QCOMPARE( QDate::longMonthName(date.month()), monthName );
}
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 15 / 21
Принцип роботи QtTestLib
Керування даними – слот наповнення даними
void testDate::testMonth_data()
{
QTest::addColumn<int>("year"); // the year we are testing
QTest::addColumn<int>("month"); // the month we are testing
QTest::addColumn<int>("day"); // the day we are testing
QTest::addColumn<QString>("monthName"); // the name of the month
QTest::newRow("1967/3/11") << 1967 << 3 << 11 << QString("March");
QTest::newRow("1966/1/10") << 1966 << 1 << 10 << QString("January");
QTest::newRow("1999/9/19") << 1999 << 9 << 19 << QString("September");
// more rows of dates can go in here...
}
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 16 / 21
Принцип роботи QtTestLib
Керування даними – результат виведення
********* Start testing of testDate *********
Config: Using QTest library 4.8.1
INFO : testDate::initTestCase() entering
PASS : testDate::initTestCase()
INFO : testDate::testValidity() entering
INFO : testDate::testValidity() QVERIFY(date.isValid())
Loc: [tutorial2.cpp(19)]
PASS : testDate::testValidity()
INFO : testDate::testMonth() entering
INFO : testDate::testMonth(1967/3/11) COMPARE()
...
INFO : testDate::testMonth(1999/9/19) COMPARE()
Loc: [tutorial2.cpp(44)]
INFO : testDate::testMonth(1999/9/19) COMPARE()
Loc: [tutorial2.cpp(45)]
PASS : testDate::testMonth()
INFO : testDate::cleanupTestCase() entering
PASS : testDate::cleanupTestCase()
Totals: 4 passed, 0 failed, 0 skipped
********* Finished testing of testDate *********
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 17 / 21
Парктичне використання
Приклад
Реалiзуємо мiнiмальне модульне тестування для:
Вiконної програми – тестування GUI, а саме – емуляцiя
натискання клавiш клавiатури та клiкiв мишкою та перевiрка
отриманих результатiв.
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 18 / 21
Висновки
Пагано проектований код майже неможливо автоматично
тестувати.
Бажання тестувати код змушує бiльш грамотно проектувати
архiтектуру.
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 19 / 21
Використанi джерела
«Я не пишу юнит-тесты, потому что. . . » – отговорки
http://habrahabr.ru/post/112685/
Модульное тестирование – личный опыт
http://habrahabr.ru/post/110909/
KDE TechBase – Development/Tutorials/Unittests
http://techbase.kde.org/Development/Tutorials/Unittests
CIT Forum – Сергей Мартыненко «Модульное тестирование. Зачем, как и
кто»
http://citforum.ru/SE/testing/unit_testing/
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 20 / 21
Дякую за увагу!
Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 21 / 21

Weitere ähnliche Inhalte

Empfohlen

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Empfohlen (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Основнi моменти модульного тестування в Qt

  • 1. Основнi моменти модульного тестування в Qt Framework Герасимчук Назар магiстр 2-го року навчання, факультет кiбернетики, Київський нацiональний унiверситет iм. Т. Шевченка 3 жовтня 2012 р. Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 1 / 21
  • 2. Змiст Модульне тестування Що це таке? Порiвняння з iншими видами тестування. Причини використання. Причини НЕ використання. Парктичне використання Кiлька слiв про Qt. Реалiзацiя модульного тестування в Qt. Приклад. Висновки Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 2 / 21
  • 3. Тестування Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 3 / 21
  • 4. Модульне тестування Що це таке? Unit testing – iзольована перевiрка кожного окремого елементу (модуль, функцiя, клас) шляхом запуску тестiв в штучному середовищi. Цiль: виявлення локалiзованих в модулi помилок, а також визначення ступеня готовностi системи до переходу на iнший рiвень розробки i тестування. Основна iдея: оцiнюючи кожен елемент iзольовано i пiдтверджуючи коректнiсть його роботи, точно встановити помилку значно простiше, нiж якби елемент був частиною системи. Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 4 / 21
  • 5. Модульне тестування «Заглушки» «Заглушки» – замiнюють компоненти, якi використовуються модулем i виконують наступнi дiї: не виконують нiчого, повертають постiйне значення, вiдображають спрощену реалiзацiю компоненту, iмiтують аварiйнi умови. Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 5 / 21
  • 6. Модульне тестування Скiльки треба тестiв? //фiлософське питання Код з невiдтестованим частинами не має бути опублiкований. Повне покриття тестами не гарантує роботоздатностi. Безглуздо писати тести заради лише 100% покриття. Питання «Як я можу зламати?» ефективнiше питання «Як я можу пiдтвердити правильнiсть?». Тести повиннi базуватися на специфiкацiї. На кожну вимогу повинен бути тест. Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 6 / 21
  • 7. Модульне тестування Порiвняння з iншими видами тестування. Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 7 / 21
  • 8. Модульне тестування Причини використання. Написання тестiв. . . . . . дозволяє ввiйти в робочий ритм. . . . дає впевненiсть в працездатностi коду. . . . дає запас стiйкостi при подальшiй iнтеграцiї чи змiнах коду. . . . є своєрiдним документуванням. . . . сприяє рефакторингу в сторону декомпозицiї i доопрацюванню архiтектури. . . . Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 8 / 21
  • 9. Модульне тестування Причини НЕ використання. Написання тестiв займає багато часу. Запуск тестiв займає багато часу. Це – не моя робота тестувати код. Лiнь. Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 9 / 21
  • 10. Парктичне використання Кiлька слiв про Qt Qt – кросплатформовий iнструментарiй розробки ПЗ мовою програмування C++. Включає класи необхiднi при розробцi: вiд графiчного iнтерфейсу i закiнчуючи класами для роботи з мережею, базами даних, OpenGL, OpenCV, SVG i XML. Дозволяє керувати потоками, працювати з мережею, i забезпечує крос-платформовий доступ до файлiв. З коробки є пiдтримка iнфраструктури тестування QtTestLib. Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 10 / 21
  • 11. Парктичне використання Реалiзацiя модульного тестування в Qt. QtTestLib – легка бiблiотека призначена для тестування, введена в Qt з 4.1: юнiт-тестування, тестування GUI. Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 11 / 21
  • 12. Принцип роботи QtTestLib Простий приклад тестуючого класу class testDate: public QObject { Q_OBJECT private slots: void testValidity(); void testMonth(); }; void testDate::testValidity() { QDate date( 1967, 3, 11 ); QVERIFY( date.isValid() ); } void testDate::testMonth() { QDate date; date.setYMD( 1967, 3, 11 ); QCOMPARE( date.month(), 3 ); QCOMPARE( QDate::longMonthName(date.month()), QString("March") ); } Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 12 / 21
  • 13. Принцип роботи QtTestLib Результат виконання – успiшно ********* Start testing of testDate ********* Config: Using QTest library 4.8.1 PASS : testDate::initTestCase() PASS : testDate::testValidity() PASS : testDate::testMonth() PASS : testDate::cleanupTestCase() Totals: 4 passed, 0 failed, 0 skipped ********* Finished testing of testDate ********* Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 13 / 21
  • 14. Принцип роботи QtTestLib Результат виконання – неуспiшно ********* Start testing of testDate ********* Config: Using QTest library 4.8.1 PASS : testDate::initTestCase() PASS : testDate::testValidity() FAIL! : testDate::testMonth() Compared values are not the same Actual (date.month()): 4 Expected (3): 3 Loc: [tutorial1.cpp(25)] PASS : testDate::cleanupTestCase() Totals: 3 passed, 1 failed, 0 skipped ********* Finished testing of testDate ********* Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 14 / 21
  • 15. Принцип роботи QtTestLib Керування даними – слот перевiрки void testDate::testMonth() { QFETCH(int, year); QFETCH(int, month); QFETCH(int, day); QFETCH(QString, monthName); QDate date; date.setYMD( year, month, day); QCOMPARE( date.month(), month ); QCOMPARE( QDate::longMonthName(date.month()), monthName ); } Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 15 / 21
  • 16. Принцип роботи QtTestLib Керування даними – слот наповнення даними void testDate::testMonth_data() { QTest::addColumn<int>("year"); // the year we are testing QTest::addColumn<int>("month"); // the month we are testing QTest::addColumn<int>("day"); // the day we are testing QTest::addColumn<QString>("monthName"); // the name of the month QTest::newRow("1967/3/11") << 1967 << 3 << 11 << QString("March"); QTest::newRow("1966/1/10") << 1966 << 1 << 10 << QString("January"); QTest::newRow("1999/9/19") << 1999 << 9 << 19 << QString("September"); // more rows of dates can go in here... } Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 16 / 21
  • 17. Принцип роботи QtTestLib Керування даними – результат виведення ********* Start testing of testDate ********* Config: Using QTest library 4.8.1 INFO : testDate::initTestCase() entering PASS : testDate::initTestCase() INFO : testDate::testValidity() entering INFO : testDate::testValidity() QVERIFY(date.isValid()) Loc: [tutorial2.cpp(19)] PASS : testDate::testValidity() INFO : testDate::testMonth() entering INFO : testDate::testMonth(1967/3/11) COMPARE() ... INFO : testDate::testMonth(1999/9/19) COMPARE() Loc: [tutorial2.cpp(44)] INFO : testDate::testMonth(1999/9/19) COMPARE() Loc: [tutorial2.cpp(45)] PASS : testDate::testMonth() INFO : testDate::cleanupTestCase() entering PASS : testDate::cleanupTestCase() Totals: 4 passed, 0 failed, 0 skipped ********* Finished testing of testDate ********* Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 17 / 21
  • 18. Парктичне використання Приклад Реалiзуємо мiнiмальне модульне тестування для: Вiконної програми – тестування GUI, а саме – емуляцiя натискання клавiш клавiатури та клiкiв мишкою та перевiрка отриманих результатiв. Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 18 / 21
  • 19. Висновки Пагано проектований код майже неможливо автоматично тестувати. Бажання тестувати код змушує бiльш грамотно проектувати архiтектуру. Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 19 / 21
  • 20. Використанi джерела «Я не пишу юнит-тесты, потому что. . . » – отговорки http://habrahabr.ru/post/112685/ Модульное тестирование – личный опыт http://habrahabr.ru/post/110909/ KDE TechBase – Development/Tutorials/Unittests http://techbase.kde.org/Development/Tutorials/Unittests CIT Forum – Сергей Мартыненко «Модульное тестирование. Зачем, как и кто» http://citforum.ru/SE/testing/unit_testing/ Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 20 / 21
  • 21. Дякую за увагу! Герасимчук Назар (КНУ) Модульнi тести (unit tests) 3 жовтня 2012 р. 21 / 21