Инструментарий Разработчика Кардаш Николай red green refactor Agile.

Презентация:



Advertisements
Похожие презентации
Test 3 Вопрос 1. 01:package test; 02: public class Test { 03: public static void main(String [] args) { 04: Test test = new Test(); 05: System.out.println(test.toString());}
Advertisements

DevCon12 // msdevcon.ru #msdevcon мая, 2012 г. Microsoft.
Войцеховский Максим Специалист по технологиям Microsoft
Test 17 Вопрос 1. public class TKO { public static void main(String[] args) { String s = "-"; Integer x = 343; long L343 = 343L; if (x.equals(L343)) s.
Test 16 Вопрос 1. class Clazz { { System.out.println("non-static init"); } public static void main(String a[]) { System.out.println("main"); Clazz ob1.
© 2005 Cisco Systems, Inc. All rights reserved.INTRO v Module Summary The Cisco Discovery Protocol is an information-gathering tool used by network.
Test 8 Вопрос 1. class Class1 { Class1(int i) { System.out.println("Class1(int)"); } public class Class2 extends Class1 { Class2(double d) { // 1 this((int)
Test 4 Вопрос 1. public class TestOutput { public static void main(String[] args) throws IOException { PrintStream out = new PrintStream( new BufferedOutputStream(
Сергей Пугачёв Microsoft Silverlight 5, XAML и связывание данных.
Windows ® Azure Platform. Зачем управлять доступом Определение Технологии Аутентификация на основе утверждений Федеративность AppFabric Access Control.
Microsoft TechDays Марат Бакиров Эксперт по разработке ПО Microsoft
Test 13 Вопрос 1. public class StringTest { public static void main(String[] arg){ test(new String[] { null });} static void test(Object[] o){System.out.print(1);}
Microsoft TechDays Косяков Иван Консультант КРОК.
Разработка веб- приложений с помощью ASP.NET Dynamic Data и ASP.NET Dynamic Data MVC Александр Краковецкий The Frayman Group Microsoft Regional Director.
© 2005 Cisco Systems, Inc. All rights reserved.INTRO v Managing Your Network Environment Getting Information About Remote Devices.
PHP&Flex - новая альтернатива для создания RIAs Иванников Андрей Улич Дмитрий.
Microsoft TechDays Сергей Попов Независимый разработчик.
Эффективное использование и расширение возможностей 2007 Microsoft Office System Сергій Байдачний Фахівець з питань розробки ПЗ Майкрософт Україна Віктор.
Drupal.= Яндекс.Сервер; DrupalConf. Москва
1 I. Загрузка файлов Начало сессии. 4 II. Отображение окна.
Транксрипт:

Инструментарий Разработчика Кардаш Николай red green refactor Agile

Что будем обсуждать Agile-Автоматизация Хорошие тесты Инструменты для тестирования

Что НЕ будем обсуждать Какой именно фреймворк для юнит тестирования круче? Какой tool круче?

Начнем?

Обычные средства автоматизации SilkTest WinRunner … Почему не подходят?

Обычные средства автоматизации Процесс

Обычные средства автоматизации [+] appstate ActTestStart() basedon none //none [-] if(!ActivTestAdministration.exists()) [ ] ActivTestAdministration.Invoke() [-] else [ ] ActivTestAdministration.SetActive() [ ] [+] appstate AfterSuperLogin() basedon ActTestStart [ ] ActivTestAdministration.SetActive() [ ] LogIn.Invoke() [ ] ConnectionType = LogIn.Connection.ConnectionTable.RadioWebService.GetContents()[GetConnecType] [ ] Login(System, Administrator, Server, ConnectionType) [ ] ActivTestAdministration.SetActive() [ ] [ ] //// //TesCases// [ ] // [-] //Testcases for WinAdminShell [+] testcase TLoginFirst()appstate AfterSuperLogin [-] do [ ] ActivTestAdministration.Help.Contents.Pick() [ ] ActivTestAdministrationShell.Close() [ ] ActivTestAdministration.Exit() [-] except [ ] Print("Failed") [ ] ActivTestAdministration.Exit() [ ] [+] testcase TLogout() appstate none [-] do [ ] Logout() [-] except [ ] Print("Failed") [ ] [+] testcase TCreateHierarhy()appstate SystemAdministratorStart [-] do [ ] SuperUser = SystemAdministration.VerticalSplitter.SWFSplitter.HierarchyPanel.OrganisationalHierarchy.GetContents()[1] [ ] RecoveryInfo.HierarchyLevel = SuperUser [ ] CreateHNode(IDHierarchy[1], NameHierarchy[1]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+"/"+NameHierarchy[1] [ ] CreateHNode(IDHierarchy[2], NameHierarchy[2]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+"/"+NameHierarchy[1]+"/"+NameHierarchy[2] [ ] CreateHNode(IDHierarchy[3], NameHierarchy[3]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+"/"+NameHierarchy[1]+"/"+NameHierarchy[2]+"/"+NameHierarchy[3] [ ] CreateHNode(IDHierarchy[4], NameHierarchy[4]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+"/"+NameHierarchy[1]+"/"+NameHierarchy[2]+"/"+NameHierarchy[3]+"/"+NameHierarchy[4] [ ] CreateHNode(IDHierarchy[5], NameHierarchy[5]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+"/"+NameHierarchy[1]+"/"+NameHierarchy[2]+"/"+NameHierarchy[3]+"/"+NameHierarchy[4]+"/"+NameHierarchy[5] [ ] [ ] EditTestCentreLab() [ ] [ ] EditTestCentreLab() [ ] [ ] CreateHNode(IDHierarchy[6], NameHierarchy[6]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+"/"+NameHierarchy[1]+"/"+NameHierarchy[2]+"/"+NameHierarchy[3]+"/"+NameHierarchy[4]+"/"+NameHierarchy[5]+"/"+NameHierarc hy[6] [ ] SystemAdministration.VerticalSplitter.SWFSplitter.HierarchyPanel.OrganisationalHierarchy.Select (SuperUser+"/"+NameHierarchy[1]+"/"+NameHierarchy[2]+"/"+NameHierarchy[3]+"/"+NameHierarchy[4]) [ ] CreateHNode(IDHierarchy[7], NameHierarchy[7]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+"/"+NameHierarchy[1]+"/"+NameHierarchy[2]+"/"+NameHierarchy[3]+"/"+NameHierarchy[4]+"/"+NameHierarchy[7] [ ] SystemAdministration.VerticalSplitter.SWFSplitter.HierarchyPanel.OrganisationalHierarchy.Select (SuperUser+"/"+NameHierarchy[1]+"/"+NameHierarchy[2]+"/"+NameHierarchy[3]+"/"+NameHierarchy[4]) [ ] CreateHNode(IDHierarchy[8], NameHierarchy[8]) [ ] RecoveryInfo.HierarchyLevel = SuperUser+"/"+NameHierarchy[1]+"/"+NameHierarchy[2]+"/"+NameHierarchy[3]+"/"+NameHierarchy[4]+"/"+NameHierarchy[8] [ ] [ ] ActivTestAdministration.Exit() [-] except [ ] Print("Failed") [ ] ActivTestAdministration.Exit() [ ] [+] testcase TManageUserAttributes()appstate UserAttributesStart [-] do [ ] UserAttributes() [ ] ActivTestAdministration.Exit() [-] except [ ] Print("Failed") [ ] ActivTestAdministration.Exit() [ ] [+] testcase TCreateUKAdmin()appstate SystemAdministratorStart [-] do [ ] CreateAdministrator(SuperUser+"/"+NameHierarchy[1], ukadmin, ukadmin, NameHierarchy[1], "Admin", ukadmin, 1, NonePermission) [ ] ActivTestAdministration.Exit() [-] except [ ] Print("Failed") [ ] 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("Failed") [ ] 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 (" ") [ ] 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

Обычные средства автоматизации Еще проблемы? – Знания по программированию – Лицензия – Не интересно

Agile-Инструментарий

Немедленный старт Тесты и реализация отдельно Best Practices Нормальные языки программирования Профессиональный рост

Agile-Инструментарий Немедленный старт

Agile-Инструментарий Тесты и реализация отдельно

Agile-Инструментарий Поощрять Best Practices

Agile-Инструментарий Профессиональный рост

Что можно тестировать? Интерфейс пользователяБизнес логикаДанные

Как начать писать тесты? Необходимо ответить на три вопроса: – Как тестируем? – Что тестируем? – Что ожидаем?

Бизнес логика приложения

Это программный код

От чего зависит тест? Базы данных Компоненты Сервисы Файлы Код

Какие бывают тесты? Модульный тест (unit) Системный тест (system) – Приемочные – Интеграционные – И т.д.

Как написать хороший тест? 1. Придумайте ему хорошее имя public void Я_очень_хороший_тест_потому_что_в_имени_много_букаф { //… } public void Класс_должен_уметь_сравнивать_пустые_значения_с_ _непустыми_причем_пустые_должны_быть_всегда_ниже() { //… } public void ИмяФункции_выдать_ArgumentNullException_если _передан_null() { //… }

Как написать хороший тест? 2. Стандартная структура! (1) Arrange (2) Act (3) Assert

Как написать хороший тест? 3. Тест – это код. Избегайте дублирования Проводите рефакторинг Проводите ревью тестов

Как написать хороший тест? 4. Независимость TEST

Как написать хороший тест? 5. Время выполнения теста

Тест фреймворки Семейство xUnit фреймворков – nUnit – mbUnit – xUnit – jUnit – jsUnit – … ну очень много.

Mock Object Frameworks Базы данных Компоненты Сервисы Файлы Код

Mock Object Frameworks Изолируют зависимости Базы данных Компоненты Сервисы Файлы Код

Demo

Данные

База данных SQL – это программный код тоже! Тест состоит из: 1234

Demo

Интерфейс пользователя

Хорошая, понятная архитектура – Шаблоны проектирования (MVC, MVP, Application Controller, Mediator, etc.) Архитектура в стиле «as designed»

Интерфейст пользователя Model View Controller (MVC) – Какие данные отображаются? View Controller Model

Интерфейст пользователя Архитектура в стиле «as designed» – Пишем приёмочные тесты 1.Устанавливаем приложение 2.Подготавливаем тестовые данные 3.Запускаем

Demo

Командная работа

Fitnesse

Demo

И так... Тестировать можно все! Важно – определить, какие средства удобны для вашей команды.

Вопросы?