2009-08-18 2 views
4

В настоящее время одной из наших производственных систем занимается более 3000 программ, написанных между 1986 и сейчас. База кода написана на нестандартном языке, к сожалению, не хватает современных средств тестирования.Написание средства покрытия пути

Чтобы улучшить качество нашего кода, я работаю над внедрением процессов и создания инструментов, которые улучшат разработку и тестирование. У меня есть только инструмент для охвата линий, чтобы мы могли помочь идентифицировать мертвый код + непроверенный код во время разработки.

Теперь я хотел бы начать работу над добавлением Path Coverage к инструменту.

Как мне это сделать?

Учитывая, что:

1) Инструмент покрытия линии выступает в качестве предварительной обработки, который вводит код
2) У меня уже есть возможность собирать статистику я установил в указанном коде.

Какие данные следует записывать по мере выполнения программы и как ее интерпретировать?

Как представить результаты через HTML?

Я уже прочитал вопрос How to get started “writing” a code coverage tool?, который был о Java, однако это не помогло (включая бумагу «Покрытие отделения для произвольных языков Made Easy»).

Заранее благодарим за любые рекомендации!

+1

Вы еще не видели книгу «Эффективная работа с устаревшим кодом»? –

+1

Мне любопытно, почему вы хотите охват маршрута. Я работал над авионикой, сертифицированной по степени удовлетворенности FAA (уровень DO-178b только B и C, а не уровень A), и мы только делали заявление. Заявление с заявлением об участии ИМО было низким, если вы уже посвятили себя высококачественным модульным испытаниям (то есть: хороший инженер будет писать хорошие тесты (даже без инструмента охвата), плохой инженер не будет (даже когда покрытие инструмент говорит, что их тестирование недостаточно)). Конечно, времена, когда инструмент покрытия подсказывает вам написать тест, который вы не знали, что вам нужно писать, но это было редко. – KeyserSoze

+0

@Robert. До сих пор. @keysersoze. Охват отчета не приближается к его сокращению. У нас было много примеров сбоев кода в производстве из-за специфической, непроверенной комбинации условий. Кроме того, характер текущей базы кода исключает автоматическое модульное тестирование. Тестирование путей будет действовать не только как инструмент для обнаружения вещей, которые мы не думали о тестировании, а также проверка того, что ручные тесты действительно были выполнены. Я упоминал, что это код legecy с почти никакой документацией, включая то, что мы должны тестировать? –

ответ

3

Чтобы сделать покрытие покрытия, вам нужно как-то попасть в поток управления программой. Очевидным методом является построение реального графика потока управления, а затем пересечение его сегментов для выделения «фрагментов пути» (например, базовых путей), которые будут использоваться в вашем анализе покрытия пути. (Вы можете попытаться сделать это, взломав исходный код, но вы, скорее всего, не сработаете; анализ синтаксического анализа и анализа потока слишком сложный).

См. What's the point of basis path coverage? для хорошей дискуссии с использованием stackoverflow на основе путей.

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

Наши DMS Software Reengineering Toolkit могут использоваться для построения не только анализатора, но и анализа потока управления и приборов, необходимых для сбора данных о покрытии пути. («Охват филиалов для произвольных языков» сделал это, если все, что вы хотели сделать, это собирать данные о охвате филиалов, но для DMS больше, чем просто синтаксический анализ). DMS также поддерживает построение графиков управления (и потока данных), если они вам понадобятся, , как вы в этом уверены; см. DMS constructed control flow graphs.

DMS был использован для создания анализаторов анализа и анализа потока данных для C, Java и COBOL, и использовался для создания парсеров для некоторых более 30 + langauges. Он может обрабатывать ваш устаревший язык, если вы серьезно относитесь к этому.

EDIT 10/31/2011: DMS теперь может вычислять поток управления для C++, поэтому это станет отличной основой для инструмента покрытия путей C++.

3

Измерение покрытия пути - сложный вопрос. Сначала вы должны определить, что вы подразумеваете под путём в первую очередь. Является ли цикл, выполняемый три раза другим путем, чем цикл, выполняемый четыре раза? Если это так, у вас есть бесконечное количество путей. Если нет, то пропускаются тестовые случаи, даже если все пути охвачены.

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

Смежные вопросы