Написание инструмента покрытия пути
-
18-09-2019 - |
Вопрос
В настоящее время одна из наших производственных систем управляется более чем 3000 программами, написанными в период с 1986 года по настоящее время.Кодовая база написана на нестандартном языке, в котором, к сожалению, отсутствуют современные средства тестирования.
Стремясь улучшить качество нашего кода в дальнейшем, я работал над внедрением процессов и созданием инструментов, которые улучшат разработку и тестирование.У меня только что появился инструмент полного покрытия строк, чтобы мы могли помочь идентифицировать мертвый код + непроверенный код во время разработки.
Теперь я хотел бы начать работу по добавлению покрытия пути к инструменту.
Как мне следует поступить с этим?
Учитывая , что:
1) Инструмент покрытия линий действует как препроцессор, который вводит код
2) У меня уже есть возможность собирать статистику, которую я установил в указанном коде.
Какие данные я должен записывать по мере выполнения программы и как мне их интерпретировать?
Как я могу представить результаты с помощью HTML?
Я уже прочитал этот вопрос Как начать “писать” инструмент покрытия кода?, который был о Java, однако это не помогло (включая статью "Упрощенное покрытие ветвей для произвольных языков").
Заранее благодарю за любые рекомендации!
Решение
Чтобы выполнить покрытие пути, вам нужно каким-то образом получить доступ к потоку управления программой.Очевидный метод заключается в построении реального графика потока управления, а затем в прохождении его сегментов для выбора "фрагментов пути" (например, базовых путей), которые будут использоваться в вашем анализе покрытия пути.(Вы можете попытаться сделать это путем строкового взлома исходного кода, но, скорее всего, у вас ничего не получится;синтаксический анализ и потоковый анализ слишком сложны).
Видишь В чем смысл покрытия базового пути? для хорошего обсуждения stackoverflow базовых путей.
Чтобы реализовать необходимый инструмент покрытия пути, вам, вероятно, потребуется действительно полностью разобрать весь устаревший язык.Для 3000 программ и высоких требований к тестированию имело бы смысл использовать для этого промышленный анализатор надежности и инфраструктуру.
Наш Инструментарий для реинжиниринга программного обеспечения DMS может использоваться для построения не только синтаксического анализатора, но и анализа потока управления и инструментарий, необходимый для сбора данных о покрытии трассы.(В разделе "Покрытие ветвей для произвольных языков" был сделан этот вывод, если все, что вы хотели сделать, это собрать данные о покрытии ветвей, но в DMS есть нечто большее, чем просто синтаксический анализ).DMS также поддерживает построение графиков управления (и потока данных), если они вам нужны, как вы, очевидно, и делаете в этом случае;видишь DMS построила графики потока управления.
DMS использовалась для создания анализаторов управления и потоков данных для C, Java и COBOL, а также для создания синтаксических анализаторов для более чем 30 языков.Он может работать с вашим устаревшим языком, если вы серьезно относитесь к этому.
РЕДАКТИРОВАТЬ 31.10.2011:DMS теперь может вычислять поток управления для C ++, так что это было бы отличной основой для инструмента покрытия пути C ++.
Другие советы
Измерение покрытия пути – сложная тема.Сначала вам нужно определить, что вы подразумеваете под путем.Является ли цикл, выполняемый три раза, другим путем, чем цикл, выполняемый четыре раза?Если да, то у вас есть бесконечное количество путей.В противном случае тестовые примеры будут пропущены, даже если все пути покрыты.
Возможно, следующим шагом будет охват филиалов:измерение того, выполняется ли каждое условие как истинное, так и ложное.Это может быть достигнуто путем записи последовательности номеров строк.