Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Инструментарий Разработчика <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

696 views

Published on

in Russian

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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. Вопросы ?

×