fk0, легенда (04.01.2014 15:49, просмотров: 542) ответил VVB на Я так думаю, что критерий "степень покрытия кода" 100% (без использования всяких там ущербных аналогов gprof) это доказуемый критерий того, что все ветки программы выполнились; сей факт не является доказательством правильной работы ветки, а
Покрытие тестами можно и без железа проверять, на PC, и без сложной трассировки. Нужно же лишь проверить, что тест вызывает исполнение кода, не более того. Если код не связан тесно с железом. Можно и на железе даже сделать без поддержки трассировки со стороны отладчика. Запрограммировать, например, таймер на прерывание через один такт и "прошагать" программу с прерыванием после каждой инструкции. Адреса, где прерывалось, выдать в тот же компорт (если закодировать адреса дифференциальным кодом, кодом Элиаса и применить RLE, то поток будет стремиться к биту-двум на адрес...) Это всё можно сделать на PIC18 без всяких ETM. С ETM конечно удобнее... Если есть лишнее ОЗУ, то можно битовую карту инструкций просто использовать. Допустим PIC18 -- 16 бит на инструкцию. Если тестируемый код умещается в 16384 инструкции (32кБайт FLASH), то битмап займёт 2кБайта (из 4-х всего для MCU с 128к FLASH) -- вполне реально. После работы теста битмап просто передать через компорт. Как и результаты теста (вот тут и нужен printf). Можно уменьшить размер битмапа запуская тест многократно (с одними входными данными) и каждый раз сохраняя и обрабатывая только часть адресов. Например запуская тест 32 раза можно ограничиться всего 256-ю байтами при тестировании всех 128кБайт FLASH.
Да и 100% покрытие тестами, на самом деле, ничего не гарантирует. Оно же не говорит о том, что все возможные ветвления программы учтены. Оно даже не говорит о том, что результ работы исполненного кода оценивается тестом. 100% покрытие тестами -- хороший и необходимый результат. Но не серебрянная пуля.
[ZX]