Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Презентации / Lecture06p

.pdf
Скачиваний:
0
Добавлен:
23.06.2026
Размер:
1.41 Mб
Скачать

Граф потока управления

• Инструкции (линейные участки) – вершины (покрытие инструкций)

Возможные переходы – ребра (покрытие ветвей)

Метки def и use по переменным

1

int gcd(int a, int b) {

 

ub, db

 

 

 

2

if(a > 0 && b < 0 || a < 0 && b > 0) b = -b;

 

 

 

 

 

 

 

3

while(b != 0) {

 

 

 

 

4

if(b > a && a > 0 || b < a && a < 0) {

 

 

 

 

5

int t = b;

 

 

ua, ub

6

b = a;

 

 

 

 

 

 

7

a = t;

ub, dt, ua,

 

 

 

 

8

}

db, ut, da

 

 

9

b = a-b;

 

 

 

 

 

 

10

a = a-b;

 

 

 

 

11

}

 

 

 

 

 

 

 

 

12

return a;

 

 

 

 

13

}

 

 

 

 

da, db

ua, ub

ub

ua

ua, ub, db, da

Кулямин В.В. ФКН ВШЭ, ПИ / ВМК МГУ

Основы инженерии программного обеспечения

21

Пример ошибки (MS Zune)

year = ORIGINYEAR; /* = 1980 */

while (days > 365)

{

if (IsLeapYear(year))

{

if (days > 366)

{

days -= 366; year += 1;

}

}

else

{

days -= 365; year += 1;

}

}

else

 

00:00 31.12.2008

[IsLeapYear(year)

 

 

 

 

&& days = 366]

 

 

 

 

 

Кулямин В.В. ФКН ВШЭ, ПИ / ВМК МГУ

Основы инженерии программного обеспечения

22

Графы для более высоких уровней

Граф вызовов функций

Вершины – функции

Ребра – их обращения друг к другу

Метки d, u – модификации и чтения полей классов и глобальных данных

Граф вызовов модулей

Тот же, только все функции одного модуля стягиваются в одну вершину

Метки остаются только для глобальных данных (внутримодульные переменные убираем)

Иногда в качестве данных для меток берут только таблицы БД

Обычно используют покрытия вершин, дуг и du-пар

Кулямин В.В. ФКН ВШЭ, ПИ / ВМК МГУ

Основы инженерии программного обеспечения

23

Конец

Соседние файлы в папке Презентации