|
Как тестировать код для встраиваемых систем |
|
|
|
Dec 27 2011, 18:50
|

Участник

Группа: Участник
Сообщений: 52
Регистрация: 30-11-11
Пользователь №: 68 593

|
Здравствуйте. Уже достаточно давно пишу код для всяких контроллеров, но задачи были малой и средней сложности. Хватало функционального тестирования, написал программку, протестировал на весь описанный в ТЗ функционал, прошёлся по всему пользовательскому интерфейсу и Ок. Т.е. программные модули по серьёзному, раздельно, не тестировал, только прошивку целиком прямо на конечной платформе. Как-то взяло сомнение, что это правильный подход , особенно если сложность задач возрастёт и если в проекте будет больше одного программиста :) Посмотрел на книгу Мартин Р. - Чистый код. Создание, анализ и рефакторинг (Библиотека программиста) - 2010. Целая теория правильного программирования. Но применима ли эта теория для embedded кода? В общем посоветуйте плз. какую-то литературку на эту тему, может быть какие-то жизненные советы как повысить качество кода, как гарантировать , что программный модуль будет нормально стыковаться с другими модулями и в случае необходимости портироваться на другие системы, и т.д...... Заранее спасибо.
|
|
|
|
|
 |
Ответов
|
Dec 11 2013, 19:07
|
Знающий
   
Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163

|
Цитата Это типа программист который реализует код или кто? Да, юнит-тесты пишет программист. Можно использовать того, который пишет и код, можно другого. Цитата Вы конкретно писали юнит тесты? К коду который так-же сами и написали? Или как? Да, писал. К коду, который сам же и написал. Суть юнит-тестов не в какой-то бюрократии или 100% покрытии, а в подготовке кода к рефакторингу. Юнит-тестирование позволяет уменьшить вероятность, что что-то сломается при рефакторинге, а также предполагает переработку архитектуры кода в плане тестируемости. Эта переработка архитектуры подготавливает код к дальнейшему изменению, т.е. при добавлении новой фичи меньше вероятность, что придётся всё раскурочивать.
|
|
|
|
|
Dec 11 2013, 21:36
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(andrewlekar @ Dec 11 2013, 23:07)  ...Можно использовать того, который пишет и код...Суть юнит-тестов ... в подготовке кода к рефакторингу. Юнит-тестирование позволяет уменьшить вероятность, что что-то сломается при рефакторинге, а также предполагает переработку архитектуры кода в плане тестируемости. ..подготавливает код к дальнейшему изменению, т.е. при добавлении новой фичи меньше вероятность, что придётся всё раскурочивать. Замечательно.. Ну а теперь посмотрите о чём велась речь выше: Цитата(kolobok0): "в том виде котором юзают юнит тесты они проверяют только изменение кода со временем. И больше ничего." Цитата(vanner): "первая задача модульного тестирования - это проверка корректности работы функции (модуля), т.е. проверка условия что при указаных входных данных получается корректный результат и/или корректная обработка ошибки. Проверка регрессий это уже побочный эффект по-сути, при наличии ранее работоспособных тестов легко определить какое изменение сломало модуль. " (извините за полное цитирование) Так, что уважаемый andrewlekar - наши с вами восприятия нахрена это нужно - имеют один вектор. А вот господин vanner ожидает(насколько я его смог понять) = "проверка корректности работы функции" . Я заострил внимание именно на организационном моменте. Т.к. именно он определяет качество самих тестов в плане "корректности работы функции". Объясняю: Лично мне слабо понимается сам процесс написания кода программистом, и написание тестов к нему этим-же программистом. Тесты в этом случае могут НЕ ВЫЯВИТЬ " некорректности работы функции". Т.е. вряд ли правая рука сможе написать такого, что упустит в реализации левая. А левая вряд ли будет тестировать то, что НЕ написала(либо не знала) правая рука одного и того-же человека. Надеюсь мысль передал. Остаётся только всё то вспомогательное которое не имеет отношения к качеству и уменьшению затрат при производстве(читай при запуске в производство) программного кода. Т.е. если Вы допустили ошибку, то она честно и провериться с ошибкой и уйдёт с ошибкой дальше.... ЗЫ Забегая вперёд, отвечу - я не против механики. Я считаю, что метода хромает. Метода, которая увы и ах применяется повсеместно (противного не наблюдал). Т.е. написал человек код, написал к нему тест... А как деление на ноль было так и осталось. Вряд-ли человек напишет проверку выше по уровню знаний чем его же написанный код, который он тестирует.
|
|
|
|
|
Dec 14 2013, 14:52
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 23-10-05
Пользователь №: 10 016

|
Цитата(kolobok0 @ Dec 12 2013, 01:36)  Объясняю: Лично мне слабо понимается сам процесс написания кода программистом, и написание тестов к нему этим-же программистом. Тесты в этом случае могут НЕ ВЫЯВИТЬ "некорректности работы функции". Т.е. вряд ли правая рука сможе написать такого, что упустит в реализации левая. А левая вряд ли будет тестировать то, что НЕ написала(либо не знала) правая рука одного и того-же человека.
Надеюсь мысль передал. Да, абсолютно понятна ваша мысль, вы совершенно не занимаетесь проектированием своего ПО. Конечно трудно протестировать спаггети-код который делает несколько функций сразу, да еще программист пишет одной рукой  В общем, читайте книги, практикуйтесь, со временем все придет
|
|
|
|
|
Dec 14 2013, 20:13
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(vanner @ Dec 14 2013, 16:52)  Да, абсолютно понятна ваша мысль, вы совершенно не занимаетесь проектированием своего ПО. Конечно трудно протестировать спаггети-код который делает несколько функций сразу, да еще программист пишет одной рукой  В общем, читайте книги, практикуйтесь, со временем все придет  А пример реальной функции которую вы подвергали юнит-тестированию можете дать? Я расшифровываю понятие юнит-тестирование как тестирование элементарных функций (unit - единица, элемент) Зачем нужно тестировать элементраные функции охватываемы взглядом, вроде таких: с = a + b, если вы в своем уме и доверяете глазам ? Причина такой паранойи, на мой взгляд, может скрываться в объектных языках и объектных моделях. Это свойственно C++ с переопределением операций, шаблонами и прочими фичами, и больше актульно программистам на PC которые пишут код не комприлируемый напрямую в ассемблер или базирующийся на объектных библиотеках представляющих собой черный ящик. У них действительно простое сложение может дать непредсказуемый результат только из-за того, что где-то далеко в хидерах изменилось какое-то объявление или сменилась версия библиотек. На нормальном C-и, раз взглянув на элементарную функцию и мысленно помоделировав ее выполнение можно дальше ее не тестировать. Если же мысленно не тестируется, как например файловая система, то юнит-тестирование здесь ну никак не поможет и не встроится, надо писать макротестирование, делать логи, профилировать, проходить по шагам и только на целевой платформе.
|
|
|
|
Сообщений в этой теме
Муравей Как тестировать код для встраиваемых систем Dec 27 2011, 18:50 AlexandrY Цитата(Муравей @ Dec 27 2011, 20:50) Посм... Dec 27 2011, 20:58 neiver По моему одна из лучших книг по тестированию встро... Dec 28 2011, 08:53 Idle Цитата(Муравей @ Dec 27 2011, 21:50) Здра... Dec 28 2011, 06:45 Danis Цитата(Муравей @ Dec 27 2011, 22:50) В об... Jan 15 2012, 08:20 cg_shura Смотрите в сторону юнит-тестирования, я для юнит-т... Dec 4 2013, 17:47 demiurg_spb Так уж сложилось, что не привык писать юнит-тесты.... Dec 5 2013, 06:11  vanner Цитата(demiurg_spb @ Dec 5 2013, 10:11) Т... Dec 6 2013, 14:08   demiurg_spb Цитата(vanner @ Dec 6 2013, 18:08) А я и ... Dec 7 2013, 11:29    vanner Цитата(demiurg_spb @ Dec 7 2013, 15:29) А... Dec 9 2013, 07:27     kolobok0 Цитата(vanner @ Dec 9 2013, 11:27) ..зада... Dec 9 2013, 22:35      vanner Цитата(kolobok0 @ Dec 10 2013, 02:35) ну ... Dec 10 2013, 06:05   kolobok0 Цитата(vanner @ Dec 6 2013, 18:08) .. юни... Dec 7 2013, 22:07 andrewlekar Цитатану а теперь объясните тупому, как Вы предлаг... Dec 10 2013, 04:33 kolobok0 Цитата(andrewlekar @ Dec 10 2013, 08:33) ... Dec 11 2013, 18:11  Idle Цитата(kolobok0 @ Dec 12 2013, 01:36) кач... Dec 17 2013, 07:08   kolobok0 Цитата(Idle @ Dec 17 2013, 11:08) ...пров... Dec 17 2013, 22:35    Idle Цитата(kolobok0 @ Dec 18 2013, 02:35) бер... Dec 18 2013, 06:02     AlexandrY Цитата(Idle @ Dec 18 2013, 08:02) Вы про ... Dec 18 2013, 07:38      Idle Цитата(AlexandrY @ Dec 18 2013, 11:38) Эт... Dec 18 2013, 08:28      XVR Цитата(AlexandrY @ Dec 18 2013, 11:38) Эк... Dec 18 2013, 15:09 XVR Юнит тестирование применяется в больших иерархичес... Dec 16 2013, 09:38 AlexandrY Цитата(XVR @ Dec 16 2013, 11:38) Очень сл... Dec 16 2013, 10:01  XVR Цитата(AlexandrY @ Dec 16 2013, 14:01) И ... Dec 16 2013, 11:16   AlexandrY Цитата(XVR @ Dec 16 2013, 13:16) Если они... Dec 16 2013, 11:29    XVR Цитата(AlexandrY @ Dec 16 2013, 15:29) Ну... Dec 16 2013, 13:14     AlexandrY Цитата(XVR @ Dec 16 2013, 15:14) Угу. Вид... Dec 16 2013, 13:45  cg_shura Цитата(AlexandrY @ Dec 16 2013, 12:01) Ес... Dec 19 2013, 09:10   AlexandrY Цитата(cg_shura @ Dec 19 2013, 11:10) Это... Dec 19 2013, 09:50 ZASADA AlexandrY , спасибо за ссылку на тойоту, весьма по... Dec 18 2013, 08:56 Idle Вообще-то да, не пишите тесты, не. Чем меньше рыно... Dec 18 2013, 09:04 ZASADA главное не наличие товара, а чтобы покупатели наш... Dec 18 2013, 09:12 Idle Цитата(ZASADA @ Dec 18 2013, 13:12) главн... Dec 18 2013, 10:10 Idle Да, ни юнит-тестирование, ни TDD не гарантируют от... Dec 18 2013, 16:47
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|