Опубликован: 05.03.2005 | Уровень: специалист | Доступ: платный
Лекция 4:

Оценка оттестированности проекта: метрики и методика интегральной оценки

< Лекция 3 || Лекция 4: 12 || Лекция 5 >

Оценка степени тестированности плоской модели определяется долей прогнанных трасс из набора необходимых для покрытия в соответствии с критерием С.

(1) TV(G,С) = (V-DV)/V = \sum PT_{i}(G) / (\sum P_{i}(G)),

где PTi(G) - тестовый путь ( ti ) в графе G плоской модели равен 1, если он протестирован (прогнан), или 0, если нет.

Например, если в УГП (Пример 4.1) тесты t6 и t7, которым соответствуют трассы P6 и P8, не прогнаны, то в соответствии с соотношением (1) для TV(G,С) степень тестированности будет оценена в 0.71.

Оценка тестированности иерархической модели определяется на основе учета оценок тестированности компонентов. Если трасса некоторого теста tj УГП G включает узлы, представляющие компоненты Gj1,..Gjm, оценка TV степени тестированности которых известна, то оценка тестированности PTi(G) при реализации этой трассы определяется не 1, а минимальной из оценок TV для компонентов.

Интегральная оценка определяется соотношением (2):

(2) TV(G,C) = (V-DV)/V = (\sum PT_{i}(G) * \sum (TV(G_{ij},C))) / (\sum P_{i}(G))

где PTi(G) - тестовый путь ( ti ) в графе G равен 1, если протестирован, или 0, если нет. В путь PTi графа G может входить j узлов модулей Gij со своей степенью тестированности TV(Gij,С), из которых мы берем min, что дает худшую оценку степени тестированности пути.

// Пример плоской модели проекта
public void G()
{
	int TerminalStatus=0, CommandStatus=0;
	bool IsPresent=true, CommandFound=true;

1	Init();
2	switch (TerminalStatus)
    {
        case 11 :
11            AddCommand();
16            switch (CommandStatus)
            {
                case 12 :
12                    GetMessage();
13                    ClearQueue();
                    break;
                case 17 :
17                    ClearQueue();
                    break;
                case 18 :
18                    DumpQueue();
                    break;
            }
14            ProcessCommand();
15            Commit();
            break;                    
        case 3 :
3            AskTerminal();
4            if (IsPresent)
            {
5                Connect();
            }
6            RebuildQueue();
            break;                    
        case 19 :
19            SearchValidCommand();
20            if (CommandFound)
            {
21                AnalyzeCommand();
            }
            else
            {
23                LogError();
            }
22            MoveNextCommand();
            break;                    
    }
7    LogResults();
10    DisposeAll();
}
Пример 4.4. Пример программы для плоской модели (Рис. 4.2)
// Пример плоской модели проекта
void G()
{
    int TerminalStatus=0, CommandStatus=0;
    int IsPresent=1, CommandFound=1;

1    Init();
2    switch (TerminalStatus)
    {
        case 11 :
11            AddCommand();
16            switch (CommandStatus)
            {
                case 12 :
12                    GetMessage();
13                    ClearQueue();
                    break;
                case 17 :
17                    ClearQueue();
                    break;
                case 18 :
18                    DumpQueue();
                    break;
            }
14            ProcessCommand();
15            Commit();
            break;                    
        case 3 :
3            AskTerminal();
4            if (IsPresent)
            {
5                Connect();
            }
6            RebuildQueue();
            break;                    
        case 19 :
19            SearchValidCommand();
20            if (CommandFound)
            {
21                AnalyzeCommand();
            }
            else
            {
23                LogError();
            }
22            MoveNextCommand();
            break;                    
    }
7    LogResults();
10    DisposeAll();
}
Пример 4.4.1. Пример программы для плоской модели (Рис. 4.2)
// Пример иерархической модели проекта
public void G1()
{
    int CommandStatus=0;
    AddCommand();
    switch (CommandStatus)
    {
        case 12 :
            GetMessage();
            ClearQueue();
            break;
        case 17 :
            ClearQueue();
            break;
        case 18 :
            DumpQueue();
            break;
    }
    ProcessCommand();
    Commit();
}
public void G2()
{
    bool CommandFound=true;
    SearchValidCommand();
    if (CommandFound)
    {
        AnalyzeCommand();
    }
    else
    {
        LogError();
    }
    MoveNextCommand();
}

public void G()
{
    int TerminalStatus=0;
    bool IsPresent=true;

1    Init();
2    switch (TerminalStatus)
    {
        case 11 :
8            G1();
            break;                    
        case 3 :
3            AskTerminal();
4            if (IsPresent)
            {
5                Connect();
            }
6            RebuildQueue();
            break;                    
        case 19 :
// Пример иерархической модели проекта - продолжение
9            G2();
            break;                    
    }
7    LogResults();
10    DisposeAll();
}
Пример 4.5. Пример программы для иерархической модели (Рис. 4.3)
// Пример иерархической модели проекта
void G1()
{
    int CommandStatus=0;
    AddCommand();
    switch (CommandStatus)
    {
        case 12 :
            GetMessage();
            ClearQueue();
            break;
        case 17 :
            ClearQueue();
            break;
        case 18 :
            DumpQueue();
            break;
    }
    ProcessCommand();
    Commit();
}
void G2()
{
    int CommandFound=1;
    SearchValidCommand();
    if (CommandFound)
    {
        AnalyzeCommand();
    }
    else
    {
        LogError();
    }
    MoveNextCommand();
}

void G()
{
    int TerminalStatus=0;
    int IsPresent=1;

1    Init();
2    switch (TerminalStatus)
    {
        case 11 :
8            G1();
            break;                    
        case 3 :
3            AskTerminal();
4            if (IsPresent)
            {
5                Connect();
            }
6            RebuildQueue();
            break;                    
        case 19 :
9            G2();
            break;                    
    }
7    LogResults();
10    DisposeAll();
}
Пример 4.5.1. Пример программы для иерархической модели (Рис. 4.3)

Методика интегральной оценки тестированности

  1. Выбор критерия С и приемочной оценки тестированности программного проекта - L
  2. Построение древа классов проекта и построение УГП для каждого модуля
  3. Модульное тестирование и оценка TV на модульном уровне
  4. Построение УГП, интегрирующего модули в единую иерархическую ( классовую ) модель проекта
  5. Выбор тестовых путей для проведения интеграционного или системного тестирования
  6. Генерация тестов, покрывающих тестовые пути шага 5
  7. Интегральная оценка тестированности проекта с учетом оценок тестированности модулей-компонентов
  8. Повторение шагов 5-7 до достижения заданного уровня тестированности L
< Лекция 3 || Лекция 4: 12 || Лекция 5 >
Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

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

Сергей Чурбанов
Сергей Чурбанов
Тимофей Миргород
Тимофей Миргород
Беларусь, Минск
Иван Сердюковtwo
Иван Сердюковtwo
Россия, Город Урюпинск