Опубликован: 28.11.2007 | Уровень: специалист | Доступ: платный | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»
Лекция 8:

Документация, сопровождающая процесс верификации и тестирования (отчеты)

13.1.3. Покрытие на уровне исходных текстов и на уровне машинных кодов

В некоторых случаях инструментальные средства сбора покрытия анализируют покрытие программного кода тестами не на уровне исходных текстов системы, а на уровне машинных инструкций. В этом случае степень покрытия зависит и от того, какой исполняемый код генерируется компилятором. Отчеты о покрытии в этом случае выглядят следующим образом (отчет о покрытии сгененирован при помощи отладчика Microtec XRAY для Motorola 680x0):

******* INSTRUCTION EXECUTION COVERAGE - Analyze Unit: Menu_Display
Function: DATA_PROCESSING\Menu_Display.  Instruction(s) not executed:
  5668             switch (Key) 
0004A0F6 0352              BCHG    D1,(A2)                            
0004A102 0466 0466         SUBI.W  #$466,-(A6)
0004A106 0466 0466         SUBI.W  #$466,-(A6)
0004A10A 0466 0466         SUBI.W  #$466,-(A6)
0004A10E 0466 0466         SUBI.W  #$466,-(A6)
0004A112 0466 0466         SUBI.W  #$466,-(A6)
0004A116 0466 0474         SUBI.W  #$474,-(A6)
  5751                       i = 1; 
0004A4A6 7401              MOVEQ   #$1,D2
   Executed     Total   Percent  Analyze-unit
        467       475     98.32  DATA_PROCESSING\Menu_Display
                0 unit(s) excluded.

******* BRANCH EXECUTION COVERAGE - Analyze Unit: Menu_Display
Function: DATA_PROCESSING\Menu_Display.  Branch(es) not executed:
  5612      if ( First_Call == TRUE ) {  /* Only execute this block during th
00049E3A 6600 0722         BNE.W   $4A55E               Branch not taken.
  5613              if ( MP_Rd_Config_Straps ( RAW_STRAPS, &Strap_Config ) ==
00049E52 664A              BNE.B   $49E9E               Branch not taken.
  5750                    if (i == 17) 
0004A4A4 6602              BNE.B   $4A4A8               Fall thru not taken.
   Executed     Total   Percent  Analyze-unit
         74        77     96.10  DATA_PROCESSING\Menu_Display
                0 unit(s) excluded.
Листинг 13.1.

Поскольку степень покрытия может меняться в зависимости от оптимизации при генерации кода, в некоторых случаях даже при полном выполнении всех операторов языка высокого уровня, на котором написана программная система, не удается достичь полного покрытия на уровне исполняемого кода.

Например, в случае покрытия следующей конструкции на языке C:

typedef enum
{
CC1 = 250,
CC2 = 251,
CC3 = 252
} E_CC;
   … 
E_CC key;
   …
switch (key) {
   case CC1: printf("CC1"); break; 
   case CC2: printf("CC2"); break; 
   case CC3: printf("CC3"); break; 
}

компилятор Microtec C для Motorola 680x0 создаст таблицу возможных значений переменной key, в которой будут присутствовать все элементы от 0 до 255. Реально в программной системе возможно передать только значения констант CC1 - CC3, и в результате покрытыми окажутся только три ветки из 255 возможных в исполняемом коде. Никакими стандартными средствами увеличить степень такого покрытия нельзя. В этом случае отчет о покрытии сопровождается дополнительной информацией о причинах невозможности обеспечить полное покрытие.

Сбор информации о покрытии на уровне исполняемого кода наиболее часто применяется в высококритичных программных системах, где не допускается наличия "мертвого" исполняемого кода, который потенциально может привести к сбою или отказу во время работы системы. К таким системам в первую очередь можно отнести авиационные бортовые системы, медицинские системы и системы обеспечения безопасности информации.

13.2. Отчеты о проблемах

13.2.1. Технологические цепочки и роли участников проекта, использующих отчеты о проблемах. Связь отчетов о проблемах с другими типами проектной документации

Каждое несоответствие с требованиями, найденное тестировщиком, должно быть задокументировано в виде отчета о проблеме. Вероятность обнаружения и исправления ошибки, вызвавшей это несоответствие, зависит от того, насколько качественно она задокументирована. Отчеты о проблемах могут поступать не только от тестировщиков, но и от специалистов технической поддержки или пользователей, однако их общая цель - указать на наличие проблемы в системе, которая должна быть устранена. Если отчет составлен некорректно, разработчик не сможет устранить проблему, поэтому можно считать этот отчет одним из самых важных документов в цепочке тестовой документации.

Главное, что должно быть включено в отчет об ошибке, - это:

  • Способ воспроизведения проблемы. Для того, чтобы разработчик смог устранить проблему, он должен разобраться в ее причинах, самостоятельно воспроизведя ее (и, возможно, не один раз). Один из самых тяжелых случаев в процессе разработки возникает при невоспроизводимой проблеме, т.е. проблеме, у которой точно не известен способ ее вызывать. Нахождение такого способа - одна из самых нетривиальных задач в работе тестировщика.
  • Анализ проблемы с кратким ее описанием. Лучше всего приводить описание в тех же терминах, в которых составлены требования на часть системы, в которой обнаружена проблема. В этом случае минимизируется вероятность недопонимания сути проблемы.

Любой отчет о проблеме должен быть составлен немедленно после ее обнаружения. Если отчет будет составлен спустя значительное время, повышается вероятность того, что в него не попадет какая-либо важная информация, которая поможет устранить причину проблемы в кратчайшие сроки.

13.2.2. Структура отчетов о проблемах, их трассировка на программный код и документацию

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

  • Объект, в котором найдена проблема. Здесь помещается максимально полная информация - для документации это название документа, раздел, автор, версия. Для исходных текстов это имя модуля, имя функции/метода или номера строк, версия.
  • Выпуск и версия системы. Определяет место, откуда был взят объект с обнаруженной проблемой. Обычно требуется отдельная идентификация версии системы (а не только версии исходных текстов), поскольку может возникнуть путаница с повторно выявленными проблемами. В этом случае, если проблема уже была когда-то выявлена разработчиком и потом вновь появилась из-за того, что в систему попала не самая последняя версия программного модуля, разработчик может решить, что ему пришел старый отчет и проблемы на самом деле не существует.
  • Тип отчета
    • Ошибка кодирования - код не соответствует требованиям.
    • Ошибка проектирования - тестировщик не согласен с проектной документацией.
    • Предложение - у тестировщика возникла идея, как можно усовершенствовать код.
    • Расхождение с документацией - поведение ПО не соответствует руководству пользователя или проектной документации либо вообще нигде не описано. При этом у тестировщика нет оснований объявлять, где именно находится ошибка.
    • Взаимодействие с аппаратурой - неверная диагностика плохого состояния устройства, ошибка в интерфейсе с устройством.
    • Вопрос - тестировщик не уверен, что это проблема, и ему требуется дополнительная информация.
  • Степень важности. Строгого критерия определения степени важности не существует, и обычно это поле кодируют от 1 (незначительно) до 10 (фатально). Однако способов обоснованной оценки нет - очень сложно определить, насколько фатальной может оказаться, например, опечатка в один символ в руководстве пользователя.
  • Суть проблемы. Краткое (не более 2 строчек) определение проблемы. Даже если две проблемы очень похожи, их описания должны различаться.
  • Можно ли воспроизвести проблемную ситуацию? Ответ - Да, Нет, Не всегда. Последнее - если проблема носит нерегулярный характер. Нужно описывать, когда она проявляется, а когда - нет (например, если не вовремя нажать не ту клавишу).
  • Подробное описание проблемы и способ ее воспроизведения. При этом нужны подробности - и в описании условий воспроизведения, и в описании причины объявления получившейся реакции ошибкой.

Обычный вид отчета о проблеме, соответствующего данной структуре, следующий:

Отчет о проблеме

Порядковый номер отчета:

Автор отчета:  ___________________    Дата создания отчета: __ __ __

Документы/разделы, связанные с проблемой:
  ……………………………………..
Идентификация объекта/процесса, где проявляется проблема:
………………………………………………………………………………………….

Определение проблемы:
………………………………………………………………………………………….

Автор решения: ___________________  Дата формирования решения __ __ __

Принятое решение: (возможно, ссылки на изменяемые компоненты/запросы на изменения)
………………………………………………………………………………………….

Результаты анализа, определяющие, на содержание каких компонент влияет решение:
………………………………………………………………………………………….

План проверок, восстанавливающих текущее состояние документов разработки
………………………………………………………………………………………….

Оценка принятого автором отчета решения о проблеме: _
………………………………………………………………………………………….
 ( 0 = полностью согласен
  1 = не все аспекты проблемы учтены/разрешены
  2 = основная часть проблемы осталась неразрешенной
  3 = решение не адекватно проблеме - не устраняет ее)
Пример 13.2.
Илья Макаренко
Илья Макаренко

Добрый день.

Вопрос №1

Какова стоимость получения диплома о мини-МБА по данному курсу? Или ориентироваться на указанную на сайте?

Вопрос №2

Возможно ли начать обучение без потери результатов, не отправив документы на зачисление, а отправку выполнить позже?

Александр Медов
Александр Медов

Здравствуйте, какова полная сумма предоставленной услуги с печатью документа и отправкой по почте?

Антон Гацко
Антон Гацко
Беларусь
Александр Лаврёнов
Александр Лаврёнов
Беларусь