Отговори на тема  [ 20 мнения ]  Отиди на страница Предишна  1, 2
Тестване чрез мутации на кода 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Мар 13, 2006 12:59 pm
Мнения: 3855
Местоположение: Габрово
Мнение Re: Тестване чрез мутации на кода
Не разбрах? Ако има проблем в юнит теста значи съответното проверявано от него нещо (feature) в кода не се знае дали работи (щото все едно не е тествано като не е правилен теста). Все едно да кажеш че понеже юнит теста не иска да се билдва или не минава това не е проблем, щото ти сорса ще доставяш, а не теста...
Ако въпросът е дали юнит тестовете помагат изобщо, при положение че "те не са на полето", мисля че е излишно да се отговаря.
А ако питаш по-реалното дали има нужда, и как се проверява качеството на юнит тестовете, то нямам друг отговор освен онова горе - разработване на тест кеис за всеки ред/израз (feature) от написания код. От моя опит не съм намерил никакъв друг подход, които да постига нещо в тая насока.
Има един подход наречен design by contract - пълна аналогия на това как би уредил бизнес отношенията със съмнителен бизнес партньор - изпълнител или възложител. А именно с добре разписан договор, който горе наричаме задание / изисквания. Прилага се за да се дефинира интерфейс между компоненти в софтуера, така че те да останат независими и все пак накрая да работят заедно.
Там логиката е изчистване на конктракта до последния детайл, ако ще и това да бъде въпрос на итерации (анекси :) ). Който не се поти на пазарлъка се поти на работата после... И така.
Другото което опитах са загатна е че без дефиниран контракт (договор), т.е. без прецизирани изисквания, няма как да се стигне до смислено покритие от тестове - просто тогава (ако не са изчистени) се залага на усета и опита на участващите хора, но и на нещо друго субективно - на "настроението" на човека - препил, влюбен, мързелив.
Удоволствието идва когато имаш изчистено задание (което може да ти е струвало повече време отколкото програмирането) и по него просто кодираш. Тогава имаш спокойствието че няма какво да се счупи, но и няма нищо излишно в кода (т.е. не си се потил излишно за работи, които никой не използва).
Това да се постигне напълно е химера - но тук говорим за подходи или добри практики, всеки е свободен да ги ползва или не.
Лошото е че рядко може да се намери клиент, който да се навие на този подход - трябва да е човек които си разбира от работата и да е наясно с инжинерния труд. Иначе разните мениджъри нямат този поглед и за тях ползите не са примамливи - само пост фактум можеш да им обясниш как грешно решение в някакъв момент в миналото е довело до преразход по-късно - ама то след дъжд качулка.


Сря Яну 03, 2018 8:46 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 1:01 pm
Мнения: 1952
Местоположение: Варна
Мнение Re: Тестване чрез мутации на кода
DanielDimov написа:
Това което исках да разбера е: (1) дали някой е работил по такъв проект и ако да - (2) дали този вид тестване наистина води до хващане на проблеми в кода, който върши работата?

Ясно е, че този вид тестване ЩЕ ХВАНЕ проблеми в юнит тестовете, но в крайна сметка не те са на полето, а истинския код!

Бъркаш някъде Даниеле.
Тестовете с мутации на кода са САМО за проверка на тестовете. И то на тези тестове, които са най-първата част от поредицата тестове преди софтуера да стигне до полето.
След тях има редица други видове тестове, но дори и те не са върху "истинския код на полето". Истинския код на полето се тества по-нататък.
Мисля че очакваш прекалено много от тестването с мутации на кода.
Да, работил съм в такива проекти. И там не се ползват тестове с мутации на кода. Но идеята на този вид тестове е добра. Въпреки че няма пряко отношение с "високи изисквания ... в автомобилната, авио- и космическата индустрия".
Почти винаги unit и module тестовете се хвърлят на новобранци. И те ги пишат на принципа на черната кутия(това се очаква от тях). Т.е. не се изисква да гледат въобще кода, който тестват. Трябва да четат заданието, изискванията и да пишат тестове които да проверяват дали кода ги изпълнява.("Истинския" код трябва да е написан според заданието). Съответно ако заданието ти е постно и тестовете ще бъдат постни(кода също). Въпреки постно свършената работа, ако са тествани изискванията на 100%, в контекста на тази част от кода, компонент, функционалност и пр. имаш 100% покритие. Но само в този контекст.
Освен това новобранците правят грешки, самозаблуждават се, "отбиват номера" и прочие съвсем нормални неща. Ползвайки тестовете с мутации на кода, имаш още един инструмент за проверка на това което са направили. Един вид мнение от трета страна. При това в някаква степен автоматизирано и в някаква степен обективно.
Никой не може да си види тила сам без огледало. При това огледалото е само един инструмент. Не се очаква с него да правиш невро-хирургическа операция.

_________________
Най-опасният враг на истината и свободата е мнозинството.


Чет Яну 04, 2018 10:37 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Фев 16, 2014 2:36 pm
Мнения: 953
Мнение Re: Тестване чрез мутации на кода
ОК, но ако това е само начин да се следи дали новобранците не мързелуват - няма смисъл. Има много по-ефективни начини да следиш дали някой работи.

Важното е дали този метод намира слаби места в основния код?


Чет Яну 04, 2018 11:52 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Мар 13, 2006 12:59 pm
Мнения: 3855
Местоположение: Габрово
Мнение Re: Тестване чрез мутации на кода
DanielDimov написа:
Има много по-ефективни начини да следиш дали някой работи.

Какви начини имаш предвид? Дали са новобранци или пред-пенсионно пуснали по инерция, или заспали по време на акция, все трябва да се проверява резултата от работата им. Да им висиш на главата не е работа - твърде висок разход, и не се знае висящия дали няма да заспи. Пък ако трябва да контролира засукана колежка може съвсем да се из-родят нещата.
Т.е. търсим начини да анализираме резултата от труда им и да разберем дали отговаря на очакванията - т.е. дали е изпълнил работата (алгоритъма) върху заданието (входните данни).
Единият начин е да направим "олекотено" паралелно изпълняване на работата - това може да стане с тестове които са направени от отделен човек - т.е. двама са работили по проблема паралелно и накрая трябва да се види резултата. Това обаче не гарантира много - ако и двамата са разбрали грешно заданието и са залитнали в една и съща грешна посока ще излезе че слънцето грее прекрасно - двойна грешка която води до фалшив положителен резултат.
Единият от подходите които води в тази посока е предварително моделиране на продукта - дали математически, електронно, или по някакъв друг начин. Това му викат да имаш "изпълним модел" (executable model) който да можеш да "пипнеш", разцъкаш, провериш. Оттам вече има база за ефективно сравнение и оценка на разликите (дискретност на изпълнението - закъснение, квантувания и всякакви подобни разлики от идеалното). Това е стил Матлаб/симулинк и подобни модели, има едно "ptolemy ||" което също е много сериозен инструмент за подобни цели - моделиране с преход между различни области - физика/механика, електроника, софтуер. Има и modelica с доста сериозни инструменти край него, включително на сименс.
Няма друг начин да изведеш качествен набор от случаи за проверка (тест кейсове) освен подробно обхождане на заданието. Как се е стигнало до такова добро задание, и как се обхожда то за да се извадят кеисовете е въпрос на цялостен подход и workflow в конкретната организация. Най-базовото е V-модела, който има и пряко отношение към automotive, aerospace и подобни safety critical приложения. Постигането на определено качество на кода, което според стандартите се свежда до "вероятно за отказ" - примерно 1Е-9, става ако се следва определен процес - поне според умните глави. И те не искат да се занимават с това колко гениален и отговорен е един разработчик, за да знаят дали да му се доверят. И искат проследимост на процеса и формални доказателства за отделните стъпки. Не за друго, ами иначе на тях няма да им е лесно и няма да са сигурни че са проверили пълнотата на изпълнението на работата и да кажат дали дадения продукт ще има наистина еди-колко-си-по-10-на-минус-еди-коя-си вероятност за отказ. Ако те не могат да го сметнат по техните методики остава да се тества с груба сила дали 1 устройство ще гръмне след няколко милиарда часа, или да се сложат 1000 устройства на тест и да се чака няколко милиона часа и т.н. А това е нереално и няма полза - тия продукти и 10000 часа да се забави пускането им на пазара са безсмислени.
Има инструменти за анализ на кода и автоматично генериране на интересни тест кеисове, които мога да извадят определени специфични ситуации - примерно комбинации от аргументи, или специфични стойности, които според алгоритмите на тия инструменти излгежда съмнителни, или по-точно изглеждат важни за проверката - смяна на знаци, проверки с едно по-малко, равно, с едно по-голямо около някаква константа, стойности които водят до препълване на типове. Това е част от статичния анализ на кода, които може да ти подскаже за интересни неща за тестване в дадения, вече наличен сорс. Това обаче не помага ако сорса ти не е покрил добре изискванията - може да е пределно прост и тия инструменти няма да подскажат нищо. Но както и coverage анализа дават още информация.


Чет Яну 04, 2018 2:41 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 1:01 pm
Мнения: 1952
Местоположение: Варна
Мнение Re: Тестване чрез мутации на кода
DanielDimov написа:
ОК, но ако това е само начин да се следи дали новобранците не мързелуват - няма смисъл. Има много по-ефективни начини да следиш дали някой работи.

Важното е дали този метод намира слаби места в основния код?


Наистина няма смисъл.
Новобранците бяха само пример, за да не се разпростираме чак до 10 кладенеца.
Метода с мутациите беше нещо ново за мен и като такова го споделих. Оказва се че първите следи са някъде от 70-те, 80-те години на миналия век. Т.е. не е от вчера идеята.

_________________
Най-опасният враг на истината и свободата е мнозинството.


Чет Яну 04, 2018 8:42 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 20 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни