Инструментарий Разработчика <ul><li>Кардаш Николай </li></ul>red green refactor Agile
Что будем обсуждать <ul><li>Agile- Автоматизация </li></ul><ul><li>Хорошие тесты </li></ul><ul><li>Инструменты   для тести...
Что  НЕ  будем обсуждать <ul><li>Какой именно фреймворк для юнит тестирования круче? </li></ul><ul><li>Какой  tool  круче?...
Начнем?
Обычные средства автоматизации <ul><li>SilkTest </li></ul><ul><li>WinRunner </li></ul><ul><li>… </li></ul><ul><li>Почему н...
Обычные средства автоматизации <ul><li>Процесс </li></ul>
Обычные средства автоматизации <ul><li>[+] appstate ActTestStart() basedon  none //none </li></ul><ul><li>[-] if(!ActivTes...
Обычные средства автоматизации <ul><li>Еще проблемы? </li></ul><ul><ul><li>Знания по программированию </li></ul></ul><ul><...
Agile- Инструментарий
Agile- Инструментарий <ul><li>Немедленный старт </li></ul><ul><li>Тесты и реализация отдельно </li></ul><ul><li>Best Pract...
Agile- Инструментарий <ul><li>Немедленный старт </li></ul>
Agile- Инструментарий <ul><li>Тесты и реализация отдельно </li></ul>
Agile- Инструментарий <ul><li>Поощрять  Best Practices </li></ul>
Agile- Инструментарий <ul><li>Профессиональный рост </li></ul>
Что можно тестировать? Интерфейс пользователя Бизнес логика Данные
Как начать писать тесты? <ul><li>Необходимо ответить на три вопроса: </li></ul><ul><ul><li>Как тестируем? </li></ul></ul><...
Бизнес логика приложения
Бизнес логика приложения <ul><li>Это программный код </li></ul>
От чего зависит тест? Базы данных Компоненты Сервисы Файлы Код
Какие бывают тесты? <ul><li>Модульный тест ( unit ) </li></ul><ul><li>Системный тест  (system) </li></ul><ul><ul><li>Прием...
Как написать хороший тест? <ul><li>Придумайте ему хорошее имя </li></ul>public void  Я_очень_хороший_тест_потому_что_в_име...
Как написать хороший тест? <ul><li>Стандартная структура! </li></ul>(1) Arrange (2) Act (3) Assert
Как написать хороший тест? <ul><li>Тест – это код. </li></ul>Избегайте дублирования Проводите рефакторинг Проводите ревью ...
Как написать хороший тест? <ul><li>Независимость </li></ul>TEST TEST TEST TEST TEST TEST TEST TEST
Как написать хороший тест? <ul><li>Время выполнения теста </li></ul>
Тест фреймворки <ul><li>Семейство  xUnit  фреймворков </li></ul><ul><ul><li>nUnit </li></ul></ul><ul><ul><li>mbUnit </li><...
Mock Object Frameworks Базы данных Компоненты Сервисы Файлы Код
Mock Object Frameworks <ul><li>Изолируют зависимости </li></ul>Базы данных Компоненты Сервисы Файлы Код
Demo
Данные
База данных <ul><li>SQL  – это программный код тоже! </li></ul><ul><li>Тест состоит из: </li></ul>1 2 3 4
Demo
Интерфейс пользователя
Интерфейс пользователя <ul><li>Хорошая, понятная архитектура   </li></ul><ul><ul><li>Шаблоны проектирования ( MVC, MVP, A...
Интерфейст пользователя <ul><li>Model View Controller (MVC) </li></ul><ul><ul><li>Какие данные отображаются? </li></ul></u...
Интерфейст пользователя <ul><li>Архитектура в стиле « as designed » </li></ul><ul><ul><li>Пишем приёмочные тесты </li></ul...
Demo
Командная работа
Командная работа <ul><li>Fitnesse </li></ul>
Demo
И так... <ul><li>Тестировать можно все! </li></ul><ul><li>Важно – определить, какие средства удобны для вашей команды. </l...
Вопросы ?
Upcoming SlideShare
Loading in...5
×

Agile Instrumentation

403

Published on

in Russian

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
403
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Agile Instrumentation

  1. 1. Инструментарий Разработчика <ul><li>Кардаш Николай </li></ul>red green refactor Agile
  2. 2. Что будем обсуждать <ul><li>Agile- Автоматизация </li></ul><ul><li>Хорошие тесты </li></ul><ul><li>Инструменты для тестирования </li></ul>
  3. 3. Что НЕ будем обсуждать <ul><li>Какой именно фреймворк для юнит тестирования круче? </li></ul><ul><li>Какой tool круче? </li></ul>
  4. 4. Начнем?
  5. 5. Обычные средства автоматизации <ul><li>SilkTest </li></ul><ul><li>WinRunner </li></ul><ul><li>… </li></ul><ul><li>Почему не подходят? </li></ul>
  6. 6. Обычные средства автоматизации <ul><li>Процесс </li></ul>
  7. 7. Обычные средства автоматизации <ul><li>[+] appstate ActTestStart() basedon none //none </li></ul><ul><li>[-] if(!ActivTestAdministration.exists()) </li></ul><ul><li>[ ] ActivTestAdministration.Invoke() </li></ul><ul><li>[-] else </li></ul><ul><li>[ ] ActivTestAdministration.SetActive() </li></ul><ul><li>[ ] </li></ul><ul><li>[+] appstate AfterSuperLogin() basedon ActTestStart </li></ul><ul><li>[ ] ActivTestAdministration.SetActive() </li></ul><ul><li>[ ] LogIn.Invoke() </li></ul><ul><li>[ ] ConnectionType = LogIn.Connection.ConnectionTable.RadioWebService.GetContents()[GetConnecType] </li></ul><ul><li>[ ] Login(System, Administrator, Server, ConnectionType) </li></ul><ul><li>[ ] ActivTestAdministration.SetActive() </li></ul>[ ] [ ] ////-----------------------//TesCases//--------------------------------------- [ ] //------------------------------------------------------------------------- [-] //Testcases for WinAdminShell [+] testcase TLoginFirst()appstate AfterSuperLogin [-] do [ ] ActivTestAdministration.Help.Contents.Pick() [ ] ActivTestAdministrationShell.Close() [ ] ActivTestAdministration.Exit() [-] except [ ] Print(&quot;Failed&quot;) [ ] ActivTestAdministration.Exit() [ ] [ ] [+] testcase TLogout() appstate none [-] do [ ] Logout() [-] except [ ] Print(&quot;Failed&quot;) [ ] [ ] [+] testcase TCreateHierarhy()appstate SystemAdministratorStart [-] do [ ] SuperUser = SystemAdministration.VerticalSplitter.SWFSplitter.HierarchyPanel.OrganisationalHierarchy.GetContents()[1] [ ] RecoveryInfo.HierarchyLevel = SuperUser [ ] CreateHNode(IDHierarchy[1], NameHierarchy[1]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+&quot;/&quot;+NameHierarchy[1] [ ] CreateHNode(IDHierarchy[2], NameHierarchy[2]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+&quot;/&quot;+NameHierarchy[1]+&quot;/&quot;+NameHierarchy[2] [ ] CreateHNode(IDHierarchy[3], NameHierarchy[3]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+&quot;/&quot;+NameHierarchy[1]+&quot;/&quot;+NameHierarchy[2]+&quot;/&quot;+NameHierarchy[3] [ ] CreateHNode(IDHierarchy[4], NameHierarchy[4]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+&quot;/&quot;+NameHierarchy[1]+&quot;/&quot;+NameHierarchy[2]+&quot;/&quot;+NameHierarchy[3]+&quot;/&quot;+NameHierarchy[4] [ ] CreateHNode(IDHierarchy[5], NameHierarchy[5]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+&quot;/&quot;+NameHierarchy[1]+&quot;/&quot;+NameHierarchy[2]+&quot;/&quot;+NameHierarchy[3]+&quot;/&quot;+NameHierarchy[4]+&quot;/&quot;+NameHierarchy[5] [ ] [ ] EditTestCentreLab() [ ] [ ] EditTestCentreLab() [ ] [ ] CreateHNode(IDHierarchy[6], NameHierarchy[6]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+&quot;/&quot;+NameHierarchy[1]+&quot;/&quot;+NameHierarchy[2]+&quot;/&quot;+NameHierarchy[3]+&quot;/&quot;+NameHierarchy[4]+&quot;/&quot;+NameHierarchy[5]+&quot;/&quot;+NameHierarchy[6] [ ] SystemAdministration.VerticalSplitter.SWFSplitter.HierarchyPanel.OrganisationalHierarchy.Select (SuperUser+&quot;/&quot;+NameHierarchy[1]+&quot;/&quot;+NameHierarchy[2]+&quot;/&quot;+NameHierarchy[3]+&quot;/&quot;+NameHierarchy[4]) [ ] CreateHNode(IDHierarchy[7], NameHierarchy[7]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+&quot;/&quot;+NameHierarchy[1]+&quot;/&quot;+NameHierarchy[2]+&quot;/&quot;+NameHierarchy[3]+&quot;/&quot;+NameHierarchy[4]+&quot;/&quot;+NameHierarchy[7] [ ] SystemAdministration.VerticalSplitter.SWFSplitter.HierarchyPanel.OrganisationalHierarchy.Select (SuperUser+&quot;/&quot;+NameHierarchy[1]+&quot;/&quot;+NameHierarchy[2]+&quot;/&quot;+NameHierarchy[3]+&quot;/&quot;+NameHierarchy[4]) [ ] CreateHNode(IDHierarchy[8], NameHierarchy[8]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+&quot;/&quot;+NameHierarchy[1]+&quot;/&quot;+NameHierarchy[2]+&quot;/&quot;+NameHierarchy[3]+&quot;/&quot;+NameHierarchy[4]+&quot;/&quot;+NameHierarchy[8] [ ] [ ] ActivTestAdministration.Exit() [-] except [ ] Print(&quot;Failed&quot;) [ ] ActivTestAdministration.Exit() [ ] [+] testcase TManageUserAttributes()appstate UserAttributesStart [-] do [ ] UserAttributes() [ ] ActivTestAdministration.Exit() [-] except [ ] Print(&quot;Failed&quot;) [ ] ActivTestAdministration.Exit() [ ] [+] testcase TCreateUKAdmin()appstate SystemAdministratorStart [-] do [ ] CreateAdministrator(SuperUser+&quot;/&quot;+NameHierarchy[1], ukadmin, ukadmin, NameHierarchy[1], &quot;Admin&quot;, ukadmin, 1, NonePermission) [ ] ActivTestAdministration.Exit() [-] except [ ] Print(&quot;Failed&quot;) [ ] ActivTestAdministration.Exit() [ ] [ ] [+] testcase TPackageInstallation()appstate ActTestStart [-] do [ ] ActivTestAdministration.SetActive() [ ] LogIn.Invoke() [ ] ConnectionType = LogIn.Connection.ConnectionTable.RadioWebService.GetContents()[GetConnecType] [ ] Login(ukadmin, ukadmin, Server, ConnectionType)//Change login information [ ] //-------------------------------------------------------- [ ] Agent.SetOption (OPT_WINDOW_TIMEOUT, 1500) [ ] ActivTestAdministration.SetActive() [ ] PackageInstallation(Packages)//Change path to the packages [ ] Agent.SetOption (OPT_WINDOW_TIMEOUT, 15) [ ] ActivTestAdministration.Exit() [-] except [ ] Print(&quot;Failed&quot;) [ ] ActivTestAdministration.Exit() [ ] [ ] [ ] [+] testcase TPacAssignment()appstate ActTestStart [-] do [ ] ActivTestAdministration.SetActive() [ ] LogIn.Invoke() [ ] ConnectionType = LogIn.Connection.ConnectionTable.RadioWebService.GetContents()[GetConnecType] [ ] Login(ukadmin, ukadmin, Server, ConnectionType)//Change login information [ ] ActivTestAdministration.Edit.SystemAdministration.Pick () [ ] SystemAdministration.VerticalSplitter.SWFSplitter.HierarchyPanel.OrganisationalHierarchy.TypeKeys (&quot;<#Times>&quot;) [ ] int tmp [-] for (tmp = 2; tmp < (ListCount(NameHierarchy)-1); ++tmp) [ ] RecoveryInfo.HierarchyLevelNum = tmp [-] do [ ] SystemAdministration.SetActive () [ ] SystemAdministration.Tools.PackageAssignment.Pick () [-] if(PackageAssignment.Exists()) [ ] PackageAssignment() [-] else
  8. 8. Обычные средства автоматизации <ul><li>Еще проблемы? </li></ul><ul><ul><li>Знания по программированию </li></ul></ul><ul><ul><li>Лицензия </li></ul></ul><ul><ul><li>Не интересно </li></ul></ul>
  9. 9. Agile- Инструментарий
  10. 10. Agile- Инструментарий <ul><li>Немедленный старт </li></ul><ul><li>Тесты и реализация отдельно </li></ul><ul><li>Best Practices </li></ul><ul><li>Нормальные языки программирования </li></ul><ul><li>Профессиональный рост </li></ul>
  11. 11. Agile- Инструментарий <ul><li>Немедленный старт </li></ul>
  12. 12. Agile- Инструментарий <ul><li>Тесты и реализация отдельно </li></ul>
  13. 13. Agile- Инструментарий <ul><li>Поощрять Best Practices </li></ul>
  14. 14. Agile- Инструментарий <ul><li>Профессиональный рост </li></ul>
  15. 15. Что можно тестировать? Интерфейс пользователя Бизнес логика Данные
  16. 16. Как начать писать тесты? <ul><li>Необходимо ответить на три вопроса: </li></ul><ul><ul><li>Как тестируем? </li></ul></ul><ul><ul><li>Что тестируем? </li></ul></ul><ul><ul><li>Что ожидаем? </li></ul></ul>
  17. 17. Бизнес логика приложения
  18. 18. Бизнес логика приложения <ul><li>Это программный код </li></ul>
  19. 19. От чего зависит тест? Базы данных Компоненты Сервисы Файлы Код
  20. 20. Какие бывают тесты? <ul><li>Модульный тест ( unit ) </li></ul><ul><li>Системный тест (system) </li></ul><ul><ul><li>Приемочные </li></ul></ul><ul><ul><li>Интеграционные </li></ul></ul><ul><ul><li>И т.д. </li></ul></ul>
  21. 21. Как написать хороший тест? <ul><li>Придумайте ему хорошее имя </li></ul>public void Я_очень_хороший_тест_потому_что_в_имени_много_букаф { //… } public void Класс_должен_уметь_сравнивать_пустые_значения_с_ _непустыми_причем_пустые_должны_быть_всегда_ниже () { //… } public void ИмяФункции_выдать_ ArgumentNullException_ если _передан_ null () { //… }
  22. 22. Как написать хороший тест? <ul><li>Стандартная структура! </li></ul>(1) Arrange (2) Act (3) Assert
  23. 23. Как написать хороший тест? <ul><li>Тест – это код. </li></ul>Избегайте дублирования Проводите рефакторинг Проводите ревью тестов
  24. 24. Как написать хороший тест? <ul><li>Независимость </li></ul>TEST TEST TEST TEST TEST TEST TEST TEST
  25. 25. Как написать хороший тест? <ul><li>Время выполнения теста </li></ul>
  26. 26. Тест фреймворки <ul><li>Семейство xUnit фреймворков </li></ul><ul><ul><li>nUnit </li></ul></ul><ul><ul><li>mbUnit </li></ul></ul><ul><ul><li>xUnit </li></ul></ul><ul><ul><li>jUnit </li></ul></ul><ul><ul><li>jsUnit </li></ul></ul><ul><ul><li>… ну очень много. </li></ul></ul>
  27. 27. Mock Object Frameworks Базы данных Компоненты Сервисы Файлы Код
  28. 28. Mock Object Frameworks <ul><li>Изолируют зависимости </li></ul>Базы данных Компоненты Сервисы Файлы Код
  29. 29. Demo
  30. 30. Данные
  31. 31. База данных <ul><li>SQL – это программный код тоже! </li></ul><ul><li>Тест состоит из: </li></ul>1 2 3 4
  32. 32. Demo
  33. 33. Интерфейс пользователя
  34. 34. Интерфейс пользователя <ul><li>Хорошая, понятная архитектура  </li></ul><ul><ul><li>Шаблоны проектирования ( MVC, MVP, Application Controller, Mediator, etc. ) </li></ul></ul><ul><li>Архитектура в стиле « as designed » </li></ul>
  35. 35. Интерфейст пользователя <ul><li>Model View Controller (MVC) </li></ul><ul><ul><li>Какие данные отображаются? </li></ul></ul>View Controller Model
  36. 36. Интерфейст пользователя <ul><li>Архитектура в стиле « as designed » </li></ul><ul><ul><li>Пишем приёмочные тесты </li></ul></ul><ul><ul><ul><li>Устанавливаем приложение </li></ul></ul></ul><ul><ul><ul><li>Подготавливаем тестовые данные </li></ul></ul></ul><ul><ul><ul><li>Запускаем </li></ul></ul></ul>
  37. 37. Demo
  38. 38. Командная работа
  39. 39. Командная работа <ul><li>Fitnesse </li></ul>
  40. 40. Demo
  41. 41. И так... <ul><li>Тестировать можно все! </li></ul><ul><li>Важно – определить, какие средства удобны для вашей команды. </li></ul>
  42. 42. Вопросы ?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×