SlideShare a Scribd company logo
1 of 30
Виды статического анализа
Достигающие определения (reaching 
definition) 
• Достигающее определение (reaching definition) для данного оператора 
A – это оператор B, в котором изменяется значение некоторой 
переменной х и существует путь из A в B, при котором отсутствует 
присвоение значений переменной x. 
• int i = 0; 
• while (i) 
• { 
• i ++; 
• i = i; 
• Null; 
• } 
• Null;
Достигающие определения 
• - подмножество множества 
всех переменных 
S
Анализ жизни переменных (liveness analysis) 
• Переменная жива, если в ней находится значение, которое может 
понадобиться далее по ходу выполнения программы. 
• int i = 0; 
• while (i) 
• { 
• i ++; 
• i = i; 
• Null; 
• } 
• Null;
Обратный анализ
• - множество переменных в операторе S, которые используются до присвоения 
• - множество переменных в операторе S, которым присваивается значение
Инициализированность переменных 
(Definite assignment analysis) 
Анализ используется для поиска переменных, значения которых 
используются до присвоения. 
Анализ входит в стандарты языков Java и C#.
• 
int i; 
if (j < 0) return; else i = j; 
print(i);
• Any expression or statement e that does not affect the set of variables 
definitely assigned: after(e) = before(e) 
• Let e be the assignment expression loc = v. Then before(v) = before(e), 
and after(e) = after(v) U {loc}. 
• Let e be the expression true. Then true(e) = before(e) and false(e) = vars(e). 
In other words, if e evaluates to false, all variables are (vacuously) 
definitely assigned, because e does not evaluate to false. 
• Since method arguments are evaluated left to right, before(argi + 1) = 
after(argi). After a method completes, out parameters are definitely 
assigned. 
• Let s be the conditional statement if (e) s1 else s2. Then before(e) 
= before(s), before(s1) = true(e), before(s2) = false(e), and after(s) = after(s1) 
intersect after(s2). 
• Let s be the while loop statement while (e) s1. Then before(e) = before(s), 
before(s1) = true(e), and after(s) = false(e). 
• And so on.
- Пересечение множеств переменных 
- "Standard ECMA-334, C# Language Specification". ECMA 
International. pp. Section 12.3 (pp.122–133). Retrieved December 2, 
2008. 
- http://www.ecma-international.org/publications/standards/Ecma- 
334.htm
Available expression 
Анализ направлен для определения для каждой точки программы 
множества выражений, не требующих перевычисления
Сonstant propagation (распространение 
констант) 
Для каждой точки программы определяет переменные, имеющие 
константные значения. 
int a = 30; 
int b = 9 - (a / 5); 
int c; c = b * 4; 
if (c > 10) 
{ c = c - 10; } 
return c * (60 / a); 
return 4;
Copy propagation 
Для каждой точки программы определяет переменные, 
значения которых совпадают со значениями 
других переменных 
y = x 
z = 3 + y 
z = 3 + x
Points-to analysis (pointer analysis) 
int x; 
int y; 
int* p = unknown() ? &x : &y; 
Для каждой точки программы определение для всех 
указателей переменных (участков памяти), на которые 
они могут указывать.
Andersen’s algorithm 
• Сложность – 푂(푛3); 
• Andersen, Lars Ole (1994). Program Analysis and Specialization for the C 
Programming Language (PhD thesis).
while(something()) 
{ 
list.next = new List(); 
list = list.next; 
a[i++] = malloc(1); 
a[i++] = malloc(2); 
}
Steensgaard’s algorithm 
• Bjarne Steensgaard (1996). "Points-to analysis in almost linear time". "POPL '96: 
Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming 
languages". ACM. pp. 32–41. ISBN 0-89791-769-3.
Alias analysis (анализ псевдонимов) 
Два указателя являются псемданимами, если они могут указывать 
на один и тот же участок памяти.
Escape analysis (анализ выходов) 
Анализ переменных, значения 
которых доступны после 
выхода из функции.
Shape analysis 
Алгоритмы проверки свойств структур данных, генерируемых в 
куче.
Shape analysis 
• Mooly Sagiv; Thomas Reps, Reinhard Wilhelm (May 
2002). "Parametric shape analysis via 3-valued logic". ACM 
Transactions on Programming Languages and Systems 
(TOPLAS) (ACM) 24 (3): 217–298. doi:10.1145/292540.292552.
Bounds analysis (анализ границ) 
Анализ границ, в пределах которых находятся значения 
переменных. 
char c[100]; 
int i=0; 
for(; i<100; i++) 
c[i] = 1; 
c[i] = 2;
char *c = malloc(100); 
int i=0; 
for(; i<100; i++) 
c[i] = 1; 
c[i] = 2;
Array c; 
for(int j=0; j<100; j++) 
c.Add(1); 
int i=0; 
for(; i<100; i++) 
c[i] = 1; 
c[i] = 2;
Array c; 
for(int j=0; j<file.Read(4); j++) 
c.Add(1); 
int i=0; 
for(; i<100; i++) 
c[i] = 1; 
c[i] = 2;
Анализ инвариантов

More Related Content

Viewers also liked

Глобализация по книге: «Мир в движении» Автор: Гжегож Витольд‬ Колодко
Глобализация по книге:«Мир в движении»  Автор: Гжегож Витольд‬ Колодко �Глобализация по книге:«Мир в движении»  Автор: Гжегож Витольд‬ Колодко �
Глобализация по книге: «Мир в движении» Автор: Гжегож Витольд‬ Колодко fluffy_fury
 
С Дацюк Iнтелектуали в ситуацiї вибору
С Дацюк Iнтелектуали в ситуацiї виборуС Дацюк Iнтелектуали в ситуацiї вибору
С Дацюк Iнтелектуали в ситуацiї виборуintellect4ukraine
 
С. Переслегин мышление и образование после глобализации
С. Переслегин мышление и образование после глобализацииС. Переслегин мышление и образование после глобализации
С. Переслегин мышление и образование после глобализацииintellect4ukraine
 
Глобализация, интеграция, унификация как тенденции развития современного госу...
Глобализация, интеграция, унификация как тенденции развития современного госу...Глобализация, интеграция, унификация как тенденции развития современного госу...
Глобализация, интеграция, унификация как тенденции развития современного госу...vladivostok2000
 
Праксеологическое знание
Праксеологическое знаниеПраксеологическое знание
Праксеологическое знаниеlukoshka
 
Ключевые тезисы об эволюции
Ключевые тезисы об эволюцииКлючевые тезисы об эволюции
Ключевые тезисы об эволюцииlukoshka
 
Административное знание. Онтологический верстак 30 марта 2014 года
Административное знание. Онтологический верстак 30 марта 2014 годаАдминистративное знание. Онтологический верстак 30 марта 2014 года
Административное знание. Онтологический верстак 30 марта 2014 годаlukoshka
 
Антимиры ТМП. Онтологический верстак 30 марта 2014 года
Антимиры ТМП. Онтологический верстак 30 марта 2014 годаАнтимиры ТМП. Онтологический верстак 30 марта 2014 года
Антимиры ТМП. Онтологический верстак 30 марта 2014 годаlukoshka
 
Математика как проект. Онтологический верстак 12 января 2013 года
Математика как проект. Онтологический верстак 12 января 2013 годаМатематика как проект. Онтологический верстак 12 января 2013 года
Математика как проект. Онтологический верстак 12 января 2013 годаlukoshka
 
Время и временение. Онтологический верстак 27 апреля 2014 года
Время и временение. Онтологический верстак 27 апреля 2014 годаВремя и временение. Онтологический верстак 27 апреля 2014 года
Время и временение. Онтологический верстак 27 апреля 2014 годаlukoshka
 
Хозяйственное знание. Онтологический верстак 27 апреля 2014 года
Хозяйственное знание. Онтологический верстак 27 апреля 2014 годаХозяйственное знание. Онтологический верстак 27 апреля 2014 года
Хозяйственное знание. Онтологический верстак 27 апреля 2014 годаlukoshka
 
Нить именования. Онтологический верстак 30 марта 2014 года
Нить именования. Онтологический верстак 30 марта 2014 годаНить именования. Онтологический верстак 30 марта 2014 года
Нить именования. Онтологический верстак 30 марта 2014 годаlukoshka
 
Вопрошание и краткие выводы: Лаборатории Пространство, Теорийка, Астрофизика
Вопрошание и краткие выводы: Лаборатории Пространство, Теорийка, Астрофизика  Вопрошание и краткие выводы: Лаборатории Пространство, Теорийка, Астрофизика
Вопрошание и краткие выводы: Лаборатории Пространство, Теорийка, Астрофизика lukoshka
 
Что стоит за дискурсом *панка?
Что стоит за дискурсом *панка?Что стоит за дискурсом *панка?
Что стоит за дискурсом *панка?lukoshka
 
Лаборатории: Натурализация, Теорийка, Астрофизика
Лаборатории: Натурализация, Теорийка, АстрофизикаЛаборатории: Натурализация, Теорийка, Астрофизика
Лаборатории: Натурализация, Теорийка, Астрофизикаlukoshka
 

Viewers also liked (16)

Глобализация по книге: «Мир в движении» Автор: Гжегож Витольд‬ Колодко
Глобализация по книге:«Мир в движении»  Автор: Гжегож Витольд‬ Колодко �Глобализация по книге:«Мир в движении»  Автор: Гжегож Витольд‬ Колодко �
Глобализация по книге: «Мир в движении» Автор: Гжегож Витольд‬ Колодко
 
С Дацюк Iнтелектуали в ситуацiї вибору
С Дацюк Iнтелектуали в ситуацiї виборуС Дацюк Iнтелектуали в ситуацiї вибору
С Дацюк Iнтелектуали в ситуацiї вибору
 
С. Переслегин мышление и образование после глобализации
С. Переслегин мышление и образование после глобализацииС. Переслегин мышление и образование после глобализации
С. Переслегин мышление и образование после глобализации
 
Глобализация, интеграция, унификация как тенденции развития современного госу...
Глобализация, интеграция, унификация как тенденции развития современного госу...Глобализация, интеграция, унификация как тенденции развития современного госу...
Глобализация, интеграция, унификация как тенденции развития современного госу...
 
Время такта
Время тактаВремя такта
Время такта
 
Праксеологическое знание
Праксеологическое знаниеПраксеологическое знание
Праксеологическое знание
 
Ключевые тезисы об эволюции
Ключевые тезисы об эволюцииКлючевые тезисы об эволюции
Ключевые тезисы об эволюции
 
Административное знание. Онтологический верстак 30 марта 2014 года
Административное знание. Онтологический верстак 30 марта 2014 годаАдминистративное знание. Онтологический верстак 30 марта 2014 года
Административное знание. Онтологический верстак 30 марта 2014 года
 
Антимиры ТМП. Онтологический верстак 30 марта 2014 года
Антимиры ТМП. Онтологический верстак 30 марта 2014 годаАнтимиры ТМП. Онтологический верстак 30 марта 2014 года
Антимиры ТМП. Онтологический верстак 30 марта 2014 года
 
Математика как проект. Онтологический верстак 12 января 2013 года
Математика как проект. Онтологический верстак 12 января 2013 годаМатематика как проект. Онтологический верстак 12 января 2013 года
Математика как проект. Онтологический верстак 12 января 2013 года
 
Время и временение. Онтологический верстак 27 апреля 2014 года
Время и временение. Онтологический верстак 27 апреля 2014 годаВремя и временение. Онтологический верстак 27 апреля 2014 года
Время и временение. Онтологический верстак 27 апреля 2014 года
 
Хозяйственное знание. Онтологический верстак 27 апреля 2014 года
Хозяйственное знание. Онтологический верстак 27 апреля 2014 годаХозяйственное знание. Онтологический верстак 27 апреля 2014 года
Хозяйственное знание. Онтологический верстак 27 апреля 2014 года
 
Нить именования. Онтологический верстак 30 марта 2014 года
Нить именования. Онтологический верстак 30 марта 2014 годаНить именования. Онтологический верстак 30 марта 2014 года
Нить именования. Онтологический верстак 30 марта 2014 года
 
Вопрошание и краткие выводы: Лаборатории Пространство, Теорийка, Астрофизика
Вопрошание и краткие выводы: Лаборатории Пространство, Теорийка, Астрофизика  Вопрошание и краткие выводы: Лаборатории Пространство, Теорийка, Астрофизика
Вопрошание и краткие выводы: Лаборатории Пространство, Теорийка, Астрофизика
 
Что стоит за дискурсом *панка?
Что стоит за дискурсом *панка?Что стоит за дискурсом *панка?
Что стоит за дискурсом *панка?
 
Лаборатории: Натурализация, Теорийка, Астрофизика
Лаборатории: Натурализация, Теорийка, АстрофизикаЛаборатории: Натурализация, Теорийка, Астрофизика
Лаборатории: Натурализация, Теорийка, Астрофизика
 

Similar to основы и применение статического анализа кода при разработке лекция 4

элементы языка и типы данных
элементы языка и типы данныхэлементы языка и типы данных
элементы языка и типы данныхЕлена Ключева
 
Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Dmitry Tsitelov
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
язык програмирования
язык програмированияязык програмирования
язык програмированияOlegmingalev1997
 
Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8Technopark
 
Глава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в JavaГлава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в Javametaform
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Technopark
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыPositive Development User Group
 
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...Iosif Itkin
 
1332519 (1).pptx
1332519 (1).pptx1332519 (1).pptx
1332519 (1).pptxrdes1
 
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...Tech Talks @NSU
 
экспертные системы
экспертные системыэкспертные системы
экспертные системыsokol_klinik
 

Similar to основы и применение статического анализа кода при разработке лекция 4 (20)

Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
элементы языка и типы данных
элементы языка и типы данныхэлементы языка и типы данных
элементы языка и типы данных
 
Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
07 string
07 string07 string
07 string
 
язык програмирования
язык програмированияязык програмирования
язык програмирования
 
Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8
 
Глава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в JavaГлава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в Java
 
2020 03-31-lection
2020 03-31-lection2020 03-31-lection
2020 03-31-lection
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
 
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
десант презентация
десант презентациядесант презентация
десант презентация
 
1332519 (1).pptx
1332519 (1).pptx1332519 (1).pptx
1332519 (1).pptx
 
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
 
Functional
FunctionalFunctional
Functional
 
экспертные системы
экспертные системыэкспертные системы
экспертные системы
 

основы и применение статического анализа кода при разработке лекция 4

  • 2. Достигающие определения (reaching definition) • Достигающее определение (reaching definition) для данного оператора A – это оператор B, в котором изменяется значение некоторой переменной х и существует путь из A в B, при котором отсутствует присвоение значений переменной x. • int i = 0; • while (i) • { • i ++; • i = i; • Null; • } • Null;
  • 3. Достигающие определения • - подмножество множества всех переменных S
  • 4. Анализ жизни переменных (liveness analysis) • Переменная жива, если в ней находится значение, которое может понадобиться далее по ходу выполнения программы. • int i = 0; • while (i) • { • i ++; • i = i; • Null; • } • Null;
  • 6. • - множество переменных в операторе S, которые используются до присвоения • - множество переменных в операторе S, которым присваивается значение
  • 7. Инициализированность переменных (Definite assignment analysis) Анализ используется для поиска переменных, значения которых используются до присвоения. Анализ входит в стандарты языков Java и C#.
  • 8. • int i; if (j < 0) return; else i = j; print(i);
  • 9. • Any expression or statement e that does not affect the set of variables definitely assigned: after(e) = before(e) • Let e be the assignment expression loc = v. Then before(v) = before(e), and after(e) = after(v) U {loc}. • Let e be the expression true. Then true(e) = before(e) and false(e) = vars(e). In other words, if e evaluates to false, all variables are (vacuously) definitely assigned, because e does not evaluate to false. • Since method arguments are evaluated left to right, before(argi + 1) = after(argi). After a method completes, out parameters are definitely assigned. • Let s be the conditional statement if (e) s1 else s2. Then before(e) = before(s), before(s1) = true(e), before(s2) = false(e), and after(s) = after(s1) intersect after(s2). • Let s be the while loop statement while (e) s1. Then before(e) = before(s), before(s1) = true(e), and after(s) = false(e). • And so on.
  • 10. - Пересечение множеств переменных - "Standard ECMA-334, C# Language Specification". ECMA International. pp. Section 12.3 (pp.122–133). Retrieved December 2, 2008. - http://www.ecma-international.org/publications/standards/Ecma- 334.htm
  • 11. Available expression Анализ направлен для определения для каждой точки программы множества выражений, не требующих перевычисления
  • 12.
  • 13. Сonstant propagation (распространение констант) Для каждой точки программы определяет переменные, имеющие константные значения. int a = 30; int b = 9 - (a / 5); int c; c = b * 4; if (c > 10) { c = c - 10; } return c * (60 / a); return 4;
  • 14. Copy propagation Для каждой точки программы определяет переменные, значения которых совпадают со значениями других переменных y = x z = 3 + y z = 3 + x
  • 15. Points-to analysis (pointer analysis) int x; int y; int* p = unknown() ? &x : &y; Для каждой точки программы определение для всех указателей переменных (участков памяти), на которые они могут указывать.
  • 16.
  • 17. Andersen’s algorithm • Сложность – 푂(푛3); • Andersen, Lars Ole (1994). Program Analysis and Specialization for the C Programming Language (PhD thesis).
  • 18.
  • 19. while(something()) { list.next = new List(); list = list.next; a[i++] = malloc(1); a[i++] = malloc(2); }
  • 20. Steensgaard’s algorithm • Bjarne Steensgaard (1996). "Points-to analysis in almost linear time". "POPL '96: Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages". ACM. pp. 32–41. ISBN 0-89791-769-3.
  • 21. Alias analysis (анализ псевдонимов) Два указателя являются псемданимами, если они могут указывать на один и тот же участок памяти.
  • 22. Escape analysis (анализ выходов) Анализ переменных, значения которых доступны после выхода из функции.
  • 23. Shape analysis Алгоритмы проверки свойств структур данных, генерируемых в куче.
  • 24.
  • 25. Shape analysis • Mooly Sagiv; Thomas Reps, Reinhard Wilhelm (May 2002). "Parametric shape analysis via 3-valued logic". ACM Transactions on Programming Languages and Systems (TOPLAS) (ACM) 24 (3): 217–298. doi:10.1145/292540.292552.
  • 26. Bounds analysis (анализ границ) Анализ границ, в пределах которых находятся значения переменных. char c[100]; int i=0; for(; i<100; i++) c[i] = 1; c[i] = 2;
  • 27. char *c = malloc(100); int i=0; for(; i<100; i++) c[i] = 1; c[i] = 2;
  • 28. Array c; for(int j=0; j<100; j++) c.Add(1); int i=0; for(; i<100; i++) c[i] = 1; c[i] = 2;
  • 29. Array c; for(int j=0; j<file.Read(4); j++) c.Add(1); int i=0; for(; i<100; i++) c[i] = 1; c[i] = 2;