Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 8 9 10 .. 15   вперед  Ctrl
 Тестирование. Что именно тестировать? Как определить середину?  [new]
Imperous
Member

Откуда: Оттуда )
Сообщений: 1154
Всем привет!

Давайте представим проект, в котором есть (иерархия, где-то такая):
1) сущности (геттеры, сеттеры, доп методы)
--
2) репозитории
--
3) сервисы
4) утилиты
5) исключения
--
6) контроллеры
7) трансферобжекты
--
8) допишите что ещё может быть.

Что из этого принято тестировать?
Мне вот думается, что по хорошему стоит уделить внимание только контроллерам (слою), и его всячески терзать на все возможные варианты, ибо именно там можно создать ситуации, которые затронут всё.
6 апр 19, 12:26    [21854650]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Sergunka
Member

Откуда:
Сообщений: 1852
Imperous,

Вам надо посмотреть какой нибудь туториал как делается BDD Behavior Driven Development

Обычно люди пишут сценарии на каждую фичу используя специалный язык огурцов Cucumber там все простенько типо

Feature: Is it Friday yet?
  Everybody wants to know when it's Friday

  Scenario: Sunday isn't Friday
    Given today is Sunday
    When I ask whether it's Friday yet
    Then I should be told "Nope"


Вот мой кусок проекта для фермы с ветрянных генератов как выглядит в реальной жизни
https://github.com/SVyatkin/ads-bdd/blob/master/src/test/resources/Cucumber/IntegrationTest/customer/WindTurbine_Test.feature

За каждым огурцом стоит кусок кода в данном случае на Java. В общем посмотрите если освоите то будет совсем хорошо
6 апр 19, 19:43    [21854803]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Imperous
Member

Откуда: Оттуда )
Сообщений: 1154
Sergunka, спасибо, посмотрю.
Но не маньячество ли тестить абсолютно все?
7 апр 19, 10:28    [21854993]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
alex55555
Member

Откуда:
Сообщений: 2129
Imperous
Но не маньячество ли тестить абсолютно все?

Если учил в детстве математику, то сам сможешь ответить.

Сначала тебе нужно посчитать количество ветвлений в твоей софтине, потом возвести 2 в степень, равную количеству ветвлений, потом смотришь на полученное число и чешешь репу - а смогу ли я проверить триллион вариантов? Если репа не даст ответа, то значит ты не учил математику.

Это было "по простому".

По сложному гугли по фразе "покрытие тестами" и пытайся въехать, что это такое и как это вычислять. Далее вспоминай математику (это обязательно). Ну и применяй что вспомнил к имеющейся ситуации. Обычно в ситуации имеем очень много вариантов, поэтому ты должен найти способ так сократить это количество, что бы минимизировать размер неохваченного тестами кода. Это называется задача на оптимизацию. Здесь, наверное, если ты в институте не учился, тебе не разобраться. Но даже если учился, тоже очень частый случай, что клиенты не въезжают в тему. В общем - дальнейшее зависит от тебя, от твоего понимания темы, ну и от твоей настойчивости.

Если сумеешь найти оптимум - сможешь на пальцах доказать Сергуньке и другим, что есть маньячество и что не есть маньячество.
7 апр 19, 11:08    [21855008]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Imperous
Sergunka, спасибо, посмотрю.
Но не маньячество ли тестить абсолютно все?
в крупных фирмах есиь штатная должность тестировщик. Некоторые с нее мечтабт перейти в програмисты).
7 апр 19, 11:49    [21855031]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
982183
Member

Откуда: VL
Сообщений: 2971
Petro123
в крупных фирмах есиь штатная должность тестировщик. Некоторые с нее мечтабт перейти в програмисты).

1. Ну не только в крупных, а во всех боле менее профессионально занимающихся разработкой.
2. Ну ни должность, а чаще всего отдельный отдел.
3. Разные там люди работают. И бывшие, и будущие, и несправившиеся, и просто девушки.
7 апр 19, 12:20    [21855050]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
982183,
Да.
Поэтому, без приказа я совсем не занимаюсь тестированием. Неинтересно)
7 апр 19, 12:37    [21855060]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
982183
Member

Откуда: VL
Сообщений: 2971
Без обид.
Возможно вы просто не умеете это делать...
Это отдельный труд, требующий отдельных навыков, умения и опыта.
И соответствующего складу ума или характера.
7 апр 19, 13:31    [21855084]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
Petro123
982183,
Да.
Поэтому, без приказа я совсем не занимаюсь тестированием. Неинтересно)

я например, на одном проекте частично занимался (занимаюсь) автоматизацией тестирования. пишу кейсы и т.п. да, на постмане и джаваскрипте. но он вполне хорош для целей апитестирования, можно достаточно быстро и клёво писать коллекции и флоу. кроме того я считаю это обязанность программиста как минимум писать тесты внутри своего же кода. юнит, интеграционные. если ты не обкладываешь тестами свой же код - это как минимум странно.
7 апр 19, 13:42    [21855093]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT
если ты не обкладываешь тестами свой же код
а если я без ошибок пишу?
))
Я когда код пишу, я его не по памяти пишу, а запускаю по 1500 раз за день.
Это и есть мои тесты.
Если начальство решит что итоги по больнице плохие, то и тесты будем 30 проц.времени писать.
Это флейм - кто и сколько тесты пишет.
7 апр 19, 14:01    [21855107]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
982183
Member

Откуда: VL
Сообщений: 2971
А с вашим кодом работаете только вы?
Или нет дополнительного оборудования или источников данных
И запускается он только на одной конфигурации...
7 апр 19, 14:10    [21855112]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
mayton
Member

Откуда: loopback
Сообщений: 41027
Imperous
Всем привет!

Давайте представим проект, в котором есть (иерархия, где-то такая):
1) сущности (геттеры, сеттеры, доп методы)
--
2) репозитории
--
3) сервисы
4) утилиты
5) исключения
--
6) контроллеры
7) трансферобжекты
--
8) допишите что ещё может быть.

Что из этого принято тестировать?
Мне вот думается, что по хорошему стоит уделить внимание только контроллерам (слою), и его всячески терзать на все возможные варианты, ибо именно там можно создать ситуации, которые затронут всё.

Несколько мыслей.

1) Тестировать геттеры и сущности не надо.
2) Тестировать надо то место в коде, где есть бизнес-логика. Тоесть, к примеру есть контроллер или процессор
который что-то делает в режиме черного ящика. Или серого. Тоесть если у него есть некий вход и некий детерминированный
выход, то надо покрывать тестами именно это.
3) В идеале у вас количество тестов должно быть равно количеству бизнес-кейсов. Вот просто
можно брать user-story из JIRA и буквально обзывать тестовые методы так-же как и были названы все юзер-стори.
4) Конвертеры и функции и трансфер обжекты - сам бог велел тестировать тем более, что у них
нет обычно состояния и они идеально тестабельны.
5) Код который плохо тестируется имеет смысл улучшить. Например, если какой-то ДАО содержит
код доступа к БД + бизнес-логику лучше разделить на отдельно ДАО и отдельно бизнес-процессор,
и протестить процессор как чистую функцию.
6) Старайтесь испльзовать меньше Mockito. Признак идеально тестабельного кода - это как-раз отсутствие
необходимости в моках. Обычно сторонники Мокито боятся вносить изменения в основной код в направлении
улучшения тестабельности, но при этом тратят сутки и недели времени на тонкую и настройку верификаторов
и шпионов которые должны замокать какой-то сложный объект.
7) Периодически запускайте jacoco плагин и смотрите отчот о покрытии. Это будет набор таких html-ек
где зеленым цветом покрашен покрытый тестами код и красным цветом код, который еще не протестировать.
Красны - это ваша цель. Разумеется без параноидальности. Геттеры и сеттеры не надо а только то что
имеет логику.
7 апр 19, 15:04    [21855145]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
982183
А с вашим кодом работаете только вы?
Или нет дополнительного оборудования или источников данных
И запускается он только на одной конфигурации...

И по ходу одним человеком и только для себя ))
7 апр 19, 15:16    [21855151]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
Petro123
andreykaT
если ты не обкладываешь тестами свой же код
а если я без ошибок пишу?
))
Я когда код пишу, я его не по памяти пишу, а запускаю по 1500 раз за день.
Это и есть мои тесты.
Если начальство решит что итоги по больнице плохие, то и тесты будем 30 проц.времени писать.
Это флейм - кто и сколько тесты пишет.

кек, тесты то не только для этого. ну или у тебя приложенька совсем уже простая. всю радость тестов ты познаешь когда что то надо отрефакторить или когда ты пишешь фичу для сервиса (сов) которые чтоб просто в куче поднять у тебя уйдет минут 10-ть. и как ты там что 1500 раз запускать и прогонять вручную собираешься? да у тебя борода быстрее отрастёт до пола чем ты закончишь. а если у тебя флоу какой-нибудь запутанный? а если тебе надо написать так чтоб и остальное не сломать? я канеш понимаю что солид и всякое такое давайте делать системы такие чтоб модифицировать поведение надо было не переписыванием а дописыванием. но фига. тебе надо и добавлять и поправлять и всякое такое и быть уверенным что ты регрессии не накидал. протыкивать всё руками ты можешь себе позволить только на уж очень простых системах.

основная задача тестов - это зафиксировать поведение кода. вторая - собссно убедиться что твой код делает то что хочешь ты. ну и третья - ускорить процесс разработки. да, карл. ускорить.

кто говорит что 30% времени на тесты это много - ну просто не сталкивался с хоть чуть-чуть сложными системами. в которых тесты как раз экономят время. их пользу можно понять тогда когда они у тебя были, а потом их резко не стало. ну и да, я за рефакторинг кода никогда не возьмусь если он не обложен тестами. - это четвертая прелесть тестов. качественный и достаточно безболезненный рефак.
7 апр 19, 18:14    [21855220]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Sergunka
Member

Откуда:
Сообщений: 1852
Petro123
в крупных фирмах есиь штатная должность тестировщик.


За более чем сорок лет в разработке работал только в двух тимах где тесты писали вся команда и тесты писались или накрайняк обсуждались до того как начать разработку.

В обоих случаях писался софтерный продукт. Первый раз в с 1988 года по 1990 год в знаменитой лаборатории Староса к тому времени Филлип Георгевич был покойным... увы.

И последние 5 лет при разработке облачной платформы www.predix.io получается через тридцать лет. За заслуги меня даже на доску почета там воткнули в назидание потомкам

На самом деле если Jira написана на Cucumber и acceptance criteria прописаны внятно, то тут даже деваться некуда приходится первым писать тест после чего уже программируешь фичу. Хотя из 18 человек на разработке сервиса так поступало треть разработчиков все остальные по старинке городили огород даже не разобравшись в треобованиях в Jira

У нас было два тестеровщика которые только проверяли правильно ли разработчик понял задание и корректно ли отработали тесты. Так же стиль и правила по тестам. Понятно если кто сильно тупил, то учили походу как писать с тестами.

Инженер по тестированию в таких командах часто получает выше среднего программиста. Работа довольно нудная и поэтому хорошо оплачиваемая. Фактически здесь в Долине это часть DevOps и не один CI/CD не шевельнется без test coverage servers: SonarCube, Coverity, Jacoco etc.
7 апр 19, 20:27    [21855261]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Sergunka
Member

Откуда:
Сообщений: 1852
Imperous
Sergunka, спасибо, посмотрю.
Но не маньячество ли тестить абсолютно все?


На самом деле у Вас должен быть test coverage выше 75% - хорошо 85% и идеально выше 90%. В нормальной конторе ниже 75% у вас продукт не выпустят в релиз т.е. грубо говоря команда останется без премии обычно премия это от 15% до 25% от годового оклада т.е. есть за что побороться.

Я как то помнится писал, что программист это практикующий шизофреник. Высокое покрытие тестами это часть нашей маниакальной работы этого не надо стеснятся

P.S. К слову сказать у меня была серия разговоров с нашим легал департаментом вплоть до коллективных доносов на меня когда я расрыл участки тестирования продукта в компании. Потом это дело замяли так как вроде я не брал реальный код, а просто написал свои модификации для демо программ... в общем отстали сказали, что пользы больше чем вреда
7 апр 19, 20:35    [21855264]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT
и как ты там что 1500 раз запускать и прогонять вручную собираешься? да у тебя борода быстрее отрастёт до пола чем ты закончишь. а если у тебя флоу какой-нибудь запутанный? а если тебе надо написать так чтоб и остальное не сломать? я канеш понимаю что солид
не)) не солид
Есть прикладной код и програмист, а есть системный код и программист.
Мне нравится прикладной.
Например пишем, метод дайМнеСписокДолжников(год).
Вот пока его пишу, я 1500 раз запускаю этод метод и смотрю список должников))).
8 апр 19, 08:29    [21855416]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Sergunka
На самом деле у Вас должен быть test coverage выше 75% - хорошо 85% и идеально выше 90%.
вы не будете отрицать что Методология разработки ПО у разных компаний разная.
Я так понимаю, что данные 75% - это компания с XXX разработчиками на проект.
Если не изветсен масштаб компании, типы проектов, бюджеты, то и сложно советовать 1 процент или 75.
Имхо
8 апр 19, 08:36    [21855419]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
Petro123
andreykaT
и как ты там что 1500 раз запускать и прогонять вручную собираешься? да у тебя борода быстрее отрастёт до пола чем ты закончишь. а если у тебя флоу какой-нибудь запутанный? а если тебе надо написать так чтоб и остальное не сломать? я канеш понимаю что солид
не)) не солид
Есть прикладной код и програмист, а есть системный код и программист.
Мне нравится прикладной.
Например пишем, метод дайМнеСписокДолжников(год).
Вот пока его пишу, я 1500 раз запускаю этод метод и смотрю список должников))).

Ну как ты его 1500 раз запускаешь? Целиком вместе со всем приложением? Или моками обложился? Если первое, ну я рад что ты себе это можешь позволить. Иногда бывает так что у тебя приложение стартует несколько минут (или ещё больше) и вот у тебя 5 минут помноженное на 1500... Ну ты понял.
8 апр 19, 09:07    [21855432]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT
Иногда бывает так что у тебя приложение стартует несколько минут
да. Это проблема.
Причем единственная кому нужны тесты))
Было бы интересно в эту сторону поговорить.
8 апр 19, 09:14    [21855435]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Вообще, если стартует приложение несколько минут, то я бы вообще не программировал))).
Это как художник не может отойти от картины на пару шагов.
Нонсенс!
8 апр 19, 09:53    [21855479]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
982183
Member

Откуда: VL
Сообщений: 2971
Ничего странного в "нескольких минутах" не вижу.
Надо и обновления проверить, и справочники синхронизировать, и в БД проверить ряд вещей.
И только потом пускать пользователя до работы.
8 апр 19, 10:08    [21855500]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
andreykaT
Member

Откуда:
Сообщений: 2197
Petro123
Вообще, если стартует приложение несколько минут, то я бы вообще не программировал))).
Это как художник не может отойти от картины на пару шагов.
Нонсенс!

несколько минут это еще по доброму. может быть и 10 минут и 20. у тебя может быть или типа монолит или просто мешок микросервисов которые требуют лютые гиги чтоб всё кругом запустить енд ту енд. и тут вот ты со своим подходом и сядешь. это просто НЕРЕАЛЬНО при каждой замене пересобирать всю эту халабуду. так же, не всегда тебе на горячую можно пересобрать модуль там или класс. с тестами же ты обложил нужный набор сервисов моками, подсунул им нужный правильный контекст и отлаживаешься на них. как только всё сложилось - запускаешь 1 (единственный) раз всю шарагу целиком, прогоняешь еще раз все тесты, и если ок - выливаешься. если чот поломалось - тесты сразу показывают где и что у тебя поломалось. идешь туда и разбираешься.

и еще раз.. вспоминаем какой-нибудь более-менее всеобъемлющий рефакторинг. и без тестов. ты тут пошатаешь - там сломается. и узнаешь об этом ты только на проде.

я всё же за то что тесты должны быть и должны писаться самим программистом (я не про тесткейсы для м-ку-а) и мнимая потеря времени по факту оборачивается в профит.
8 апр 19, 10:16    [21855509]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
982183
Ничего странного в "нескольких минутах" не вижу.
Надо и обновления проверить, и справочники синхронизировать, и в БД проверить ряд вещей.
И только потом пускать пользователя до работы.
токарь утром на работу приходит. Это у него 10 мин. подготовка раб места. Не?
8 апр 19, 10:37    [21855547]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование. Что именно тестировать? Как определить середину?  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
andreykaT,
Я конкретно написал if... else и нажал run в меню.
Какие 10 мин?
8 апр 19, 10:39    [21855552]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 8 9 10 .. 15   вперед  Ctrl
Все форумы / Java Ответить