SlideShare une entreprise Scribd logo
1  sur  4
Télécharger pour lire hors ligne
Урок 8. Статический анализ для
выявления 64-битных ошибок
Статический анализ кода
Статический анализ кода - методология выявления ошибок в программном коде, основанная на
просмотре программистом участков кода, помеченных статическим анализатором. Помеченные
участки кода с большой вероятностью содержат ошибки определенного типа.

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

Статические анализаторы могут быть как общего назначения (например, Microsoft PREFast, Gimpel
Software PC-lint, Parasoft C++test), так и специализированными для поиска определенных классов
ошибок (например, Chord для верификации параллельных Java программ). Обычно инструменты
статического анализа достаточно дороги, требуют знаний о методологии их использования, часто
имеют достаточно гибкие, но сложные подсистемы настройки и подавления ложных сообщений.
По этой причине статические анализаторы, как правило, используются в компаниях со зрелыми
процессами разработки программного обеспечения. Взамен на сложность в использовании,
статические анализаторы кода позволяют выявить большое количество ошибок на самых ранних
этапах разработки программного кода. Дополнительно использование методологии статического
анализа дисциплинирует программистов и помогает контролировать работу молодых
сотрудников.

Основное преимущество использования статических анализаторов кода состоит в возможности
существенного снижения стоимости устранения дефектов в программе. Чем раньше ошибка
выявлена, тем меньше стоимость ее исправления. Так согласно данным, приведенным в книге
Макконнелла "Совершенный Код", исправление ошибки на этапе тестирования обойдется в
десять раз дороже, чем на этапе конструирования (кодирования):
Рисунок 1 - Средняя стоимость исправления дефектов в зависимости от времени их внесения и
    обнаружения (данные для таблицы взяты из книги С. Макконнелла 'Совершенный Код')

Инструменты статического анализа, выявляя большое количество ошибок на этапе
конструирования, существенно снижают стоимость разработки всего проекта.


Статический анализ для выявления 64-битных ошибок
Перечислим преимущества применения статического анализа кода, которые делают этот метод
наиболее оптимальным для выявления ошибок в 64-битном коде:

   1. Возможность проверить ВЕСЬ код. Анализатор проверит даже тот код, который получает
      управление в самых редких случаях. Другими словами, у инструментов статического
      анализа покрытие кода практически полное. Это позволяет быть уверенным при переходе
      на 64-битную систему, что проверен весь код.
   2. Масштабируемость. Статический анализ позволяет одинаково просто осуществить как
      анализ маленького, так и большого проекта. Трудоемкость анализа проекта растет
      линейно с его размером. При этом работу по анализу проекта можно легко
      распараллелить между несколькими разработчиками. Достаточно только распределить
      части проекта между программистами.
   3. Разработчик, приступая к работе, даже не зная всех тонкостей 64-битного кода, все равно
      не пройдет мимо потенциальных проблем. Анализатор укажет опасные места, а
      справочная система снабдит его всей необходимой информацией.
   4. Снижение затрат за счет ранней диагностики ошибок.
   5. Возможность эффективно использовать инструменты статического анализа как при
      переносе кода на 64-битную систему, так и при разработке нового 64-битного кода.


Анализатор Viva64, входящий в состав PVS-Studio
PVS-Studio представляет собой комплект статических анализаторов кода для проверки
современных и ресурсоемких приложений. В состав PVS-Studio входит статический анализатор
Viva64 предназначенный для диагностики 64-битных ошибок.

Анализатор PVS-Studio предназначен для работы на Windows-платформе. При этом он
интегрируется в среду разработки Microsoft Visual Studio 2005/2008/2010 (смотри рисунок 2).
Интерфейс PVS-Studio позволяет фильтровать диагностические сообщения несколькими
методами, сохранять и загружать список предупреждений.
Рисунок 2 - Интеграция PVS-Studio в Microsoft Visual Studio

Системные требования к анализатору совпадают с требованиями к Microsoft Visual Studio:

   •   Операционная система: Windows 7/Vista/XP/2008/2003 x86 или x64. Внимание, для
       анализа 64-битных приложений операционная система не обязательно должна быть 64-
       битной.
   •   Среда разработки: Microsoft Visual Studio 2005/2008/2010 (Standard Edition, Professional
       Edition, Team Systems). Для анализа 64-битных приложений необходимо иметь
       установленный компонент Visual Studio под названием "X64 Compilers and Tools". Он
       входит во все перечисленные версии Visual Studio и может быть установлен через Visual
       Studio Setup. Обратите внимание, что работа PVS-Studio с Visual C++ Express Edition
       невозможна, поскольку эта система не поддерживает модули расширения.
   •   Аппаратная часть: PVS-Studio работает на системах с не менее чем 1 гигабайтом
       оперативной памяти (рекомендуется 2 гигабайта и более); анализатор поддерживает
       работу на нескольких ядрах (чем больше ядер, тем быстрее выполняется анализ кода).

Все диагностируемые ошибки подробно описаны в справочной системе, которая доступна после
установки PVS-Studio. Также справочная система по PVS-Studio доступна на нашем сайте в режиме
online.

В дистрибутиве вместе с PVS-Studio поставляются специальные проекты-примеры дефектов кода,
на которых можно изучить работу анализатора.
Для более полного ознакомления с PVS-Studio вы можете скачать демонстрационную версию и
ознакомиться c руководством "Учебное пособие по PVS-Studio". Демонстрационная версия имеет
следующие ограничения:

   •   доступна для использования в течение 30 дней;
   •   ознакомительная версия показывает номера строк не всех дефектов с ошибками, а только
       некоторых из них (хотя обнаруживает все). Но для демонстрационных проектов,
       включенных в состав PVS-Studio, сделано исключение - для них отображаются номера
       строк для всех дефектов.

На данный момент анализатор PVS-Studio реализует самую полную диагностику 64-битных
ошибок. Сравнительные характеристики представлены в статье "Сравнение PVS-Studio с другими
анализаторами кода".

В последующих уроках, рассматривая различные паттерны ошибок, мы будем неоднократно
ссылаться на PVS-Studio, чтобы продемонстрировать способы их обнаружения.

Авторы курса: Андрей Карпов (karpov@viva64.com), Евгений Рыжков (evg@viva64.com).

Правообладателем курса "Уроки разработки 64-битных приложений на языке Си/Си++"
является ООО "Системы программной верификации". Компания занимается разработкой
программного обеспечения в области анализа исходного кода программ. Сайт компании:
http://www.viva64.com.

Контактная информация: e-mail: support@viva64.com, 300027, г. Тула, а/я 1800.

Contenu connexe

Tendances

Применение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПОПрименение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПОAndrey Karpov
 
Тестирование параллельных программ
Тестирование параллельных программТестирование параллельных программ
Тестирование параллельных программTatyanazaxarova
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Tatyanazaxarova
 
Как создать качественный статический анализатор
Как создать качественный статический анализаторКак создать качественный статический анализатор
Как создать качественный статический анализаторAndrey Karpov
 
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибокУрок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибокTatyanazaxarova
 
Инструментальный подход к разработке протоколов
Инструментальный подход к разработке протоколовИнструментальный подход к разработке протоколов
Инструментальный подход к разработке протоколовfurj
 
Сравнение PVS-Studio с другими анализаторами кода
Сравнение PVS-Studio с другими анализаторами кодаСравнение PVS-Studio с другими анализаторами кода
Сравнение PVS-Studio с другими анализаторами кодаTatyanazaxarova
 
Team system - фреймворк для автоматизации тестирования от Microsoft
Team system -  фреймворк для автоматизации тестирования от MicrosoftTeam system -  фреймворк для автоматизации тестирования от Microsoft
Team system - фреймворк для автоматизации тестирования от MicrosoftQA Dnepropetrovsk Community (Ukraine)
 
ковалев нестандатное нт
ковалев    нестандатное нтковалев    нестандатное нт
ковалев нестандатное нтAlexei Lupan
 
PVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложенийPVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложенийTatyanazaxarova
 
дипломная презентация по разработке проекта развертывания терминального сервера
дипломная презентация по разработке проекта развертывания терминального серверадипломная презентация по разработке проекта развертывания терминального сервера
дипломная презентация по разработке проекта развертывания терминального сервераIvan Simanov
 
Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...
Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...
Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...QA Club Minsk
 
Поиск уязвимостей в программах с помощью анализаторов кода
Поиск уязвимостей в программах с помощью анализаторов кодаПоиск уязвимостей в программах с помощью анализаторов кода
Поиск уязвимостей в программах с помощью анализаторов кодаTatyanazaxarova
 
VivaMP - инструмент для OpenMP
VivaMP - инструмент для OpenMPVivaMP - инструмент для OpenMP
VivaMP - инструмент для OpenMPTatyanazaxarova
 
PVS-Studio научился следить за тем, как вы программируете
PVS-Studio научился следить за тем, как вы программируетеPVS-Studio научился следить за тем, как вы программируете
PVS-Studio научился следить за тем, как вы программируетеTatyanazaxarova
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаTatyanazaxarova
 
Автоматизация тестирования в Microsoft Team System и “костыли”
Автоматизация тестирования в Microsoft Team System и “костыли”Автоматизация тестирования в Microsoft Team System и “костыли”
Автоматизация тестирования в Microsoft Team System и “костыли”QA Dnepropetrovsk Community (Ukraine)
 

Tendances (20)

Применение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПОПрименение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПО
 
Тестирование параллельных программ
Тестирование параллельных программТестирование параллельных программ
Тестирование параллельных программ
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?
 
Как создать качественный статический анализатор
Как создать качественный статический анализаторКак создать качественный статический анализатор
Как создать качественный статический анализатор
 
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибокУрок 25. Практическое знакомство с паттернами 64-битных ошибок
Урок 25. Практическое знакомство с паттернами 64-битных ошибок
 
Инструментальный подход к разработке протоколов
Инструментальный подход к разработке протоколовИнструментальный подход к разработке протоколов
Инструментальный подход к разработке протоколов
 
Сравнение PVS-Studio с другими анализаторами кода
Сравнение PVS-Studio с другими анализаторами кодаСравнение PVS-Studio с другими анализаторами кода
Сравнение PVS-Studio с другими анализаторами кода
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Sonar quality
Sonar qualitySonar quality
Sonar quality
 
Team system - фреймворк для автоматизации тестирования от Microsoft
Team system -  фреймворк для автоматизации тестирования от MicrosoftTeam system -  фреймворк для автоматизации тестирования от Microsoft
Team system - фреймворк для автоматизации тестирования от Microsoft
 
ковалев нестандатное нт
ковалев    нестандатное нтковалев    нестандатное нт
ковалев нестандатное нт
 
PVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложенийPVS-Studio, решение для разработки современных ресурсоемких приложений
PVS-Studio, решение для разработки современных ресурсоемких приложений
 
Lektsia 7
Lektsia 7Lektsia 7
Lektsia 7
 
дипломная презентация по разработке проекта развертывания терминального сервера
дипломная презентация по разработке проекта развертывания терминального серверадипломная презентация по разработке проекта развертывания терминального сервера
дипломная презентация по разработке проекта развертывания терминального сервера
 
Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...
Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...
Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...
 
Поиск уязвимостей в программах с помощью анализаторов кода
Поиск уязвимостей в программах с помощью анализаторов кодаПоиск уязвимостей в программах с помощью анализаторов кода
Поиск уязвимостей в программах с помощью анализаторов кода
 
VivaMP - инструмент для OpenMP
VivaMP - инструмент для OpenMPVivaMP - инструмент для OpenMP
VivaMP - инструмент для OpenMP
 
PVS-Studio научился следить за тем, как вы программируете
PVS-Studio научился следить за тем, как вы программируетеPVS-Studio научился следить за тем, как вы программируете
PVS-Studio научился следить за тем, как вы программируете
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
 
Автоматизация тестирования в Microsoft Team System и “костыли”
Автоматизация тестирования в Microsoft Team System и “костыли”Автоматизация тестирования в Microsoft Team System и “костыли”
Автоматизация тестирования в Microsoft Team System и “костыли”
 

En vedette

64 бита для Си++ программистов: от /Wp64 к Viva64
64 бита для Си++ программистов: от /Wp64 к Viva6464 бита для Си++ программистов: от /Wp64 к Viva64
64 бита для Си++ программистов: от /Wp64 к Viva64Tatyanazaxarova
 
Урок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окруженияУрок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окруженияTatyanazaxarova
 
Статический анализ и регулярные выражения
Статический анализ и регулярные выраженияСтатический анализ и регулярные выражения
Статический анализ и регулярные выраженияTatyanazaxarova
 
20 ловушек переноса Си++ - кода на 64-битную платформу
20 ловушек переноса Си++ - кода на 64-битную платформу20 ловушек переноса Си++ - кода на 64-битную платформу
20 ловушек переноса Си++ - кода на 64-битную платформуTatyanazaxarova
 
32 подводных камня OpenMP при программировании на Си++
32 подводных камня OpenMP при программировании на Си++32 подводных камня OpenMP при программировании на Си++
32 подводных камня OpenMP при программировании на Си++Tatyanazaxarova
 

En vedette (6)

64 бита для Си++ программистов: от /Wp64 к Viva64
64 бита для Си++ программистов: от /Wp64 к Viva6464 бита для Си++ программистов: от /Wp64 к Viva64
64 бита для Си++ программистов: от /Wp64 к Viva64
 
Урок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окруженияУрок 27. Особенности создания инсталляторов для 64-битного окружения
Урок 27. Особенности создания инсталляторов для 64-битного окружения
 
Статический анализ и регулярные выражения
Статический анализ и регулярные выраженияСтатический анализ и регулярные выражения
Статический анализ и регулярные выражения
 
PVS-Studio
PVS-Studio PVS-Studio
PVS-Studio
 
20 ловушек переноса Си++ - кода на 64-битную платформу
20 ловушек переноса Си++ - кода на 64-битную платформу20 ловушек переноса Си++ - кода на 64-битную платформу
20 ловушек переноса Си++ - кода на 64-битную платформу
 
32 подводных камня OpenMP при программировании на Си++
32 подводных камня OpenMP при программировании на Си++32 подводных камня OpenMP при программировании на Си++
32 подводных камня OpenMP при программировании на Си++
 

Similaire à Урок 8. Статический анализ для выявления 64-битных ошибок

Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Tatyanazaxarova
 
Проблемы тестирования 64-битных приложений
Проблемы тестирования 64-битных приложенийПроблемы тестирования 64-битных приложений
Проблемы тестирования 64-битных приложенийTatyanazaxarova
 
Статический анализ кода для верификации 64-битных приложений
Статический анализ кода для верификации 64-битных приложенийСтатический анализ кода для верификации 64-битных приложений
Статический анализ кода для верификации 64-битных приложенийTatyanazaxarova
 
Сущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCoreСущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCoreTatyanazaxarova
 
Облегчаем процесс разработки с помощью статического анализа кода: Наш опыт
Облегчаем процесс разработки с помощью статического анализа кода: Наш опытОблегчаем процесс разработки с помощью статического анализа кода: Наш опыт
Облегчаем процесс разработки с помощью статического анализа кода: Наш опытAndrey Karpov
 
Сравнение диагностических возможностей анализаторов при проверке 64-битного кода
Сравнение диагностических возможностей анализаторов при проверке 64-битного кодаСравнение диагностических возможностей анализаторов при проверке 64-битного кода
Сравнение диагностических возможностей анализаторов при проверке 64-битного кодаTatyanazaxarova
 
Преимущества использования Viva64
Преимущества использования Viva64Преимущества использования Viva64
Преимущества использования Viva64Tatyanazaxarova
 
Разработка ресурсоемких приложений в среде Visual C++
Разработка ресурсоемких приложений в среде Visual C++Разработка ресурсоемких приложений в среде Visual C++
Разработка ресурсоемких приложений в среде Visual C++Tatyanazaxarova
 
Изменения в инфраструктуре инструментов для программистов
Изменения в инфраструктуре инструментов для программистовИзменения в инфраструктуре инструментов для программистов
Изменения в инфраструктуре инструментов для программистовTatyanazaxarova
 
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...Andrey Prozorov, CISM, CIPP/E, CDPSE. LA 27001
 
Повышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаПовышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаAleksandr Makhomet
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПОAnton Konushin
 
Забытые проблемы разработки 64-битных программ
Забытые проблемы разработки 64-битных программЗабытые проблемы разработки 64-битных программ
Забытые проблемы разработки 64-битных программTatyanazaxarova
 
Краткое описание библиотеки анализа кода VivaCore
Краткое описание библиотеки анализа кода VivaCoreКраткое описание библиотеки анализа кода VivaCore
Краткое описание библиотеки анализа кода VivaCoreTatyanazaxarova
 
Отладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программОтладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программTatyanazaxarova
 
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...CodeFest
 
Презентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспеченияПрезентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспеченияRauan Ibraikhan
 
презентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспеченияпрезентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспеченияRauan Ibraikhan
 

Similaire à Урок 8. Статический анализ для выявления 64-битных ошибок (20)

Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
 
Проблемы тестирования 64-битных приложений
Проблемы тестирования 64-битных приложенийПроблемы тестирования 64-битных приложений
Проблемы тестирования 64-битных приложений
 
Статический анализ кода для верификации 64-битных приложений
Статический анализ кода для верификации 64-битных приложенийСтатический анализ кода для верификации 64-битных приложений
Статический анализ кода для верификации 64-битных приложений
 
Сущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCoreСущность библиотеки анализа кода VivaCore
Сущность библиотеки анализа кода VivaCore
 
Облегчаем процесс разработки с помощью статического анализа кода: Наш опыт
Облегчаем процесс разработки с помощью статического анализа кода: Наш опытОблегчаем процесс разработки с помощью статического анализа кода: Наш опыт
Облегчаем процесс разработки с помощью статического анализа кода: Наш опыт
 
Сравнение диагностических возможностей анализаторов при проверке 64-битного кода
Сравнение диагностических возможностей анализаторов при проверке 64-битного кодаСравнение диагностических возможностей анализаторов при проверке 64-битного кода
Сравнение диагностических возможностей анализаторов при проверке 64-битного кода
 
Преимущества использования Viva64
Преимущества использования Viva64Преимущества использования Viva64
Преимущества использования Viva64
 
Разработка ресурсоемких приложений в среде Visual C++
Разработка ресурсоемких приложений в среде Visual C++Разработка ресурсоемких приложений в среде Visual C++
Разработка ресурсоемких приложений в среде Visual C++
 
Изменения в инфраструктуре инструментов для программистов
Изменения в инфраструктуре инструментов для программистовИзменения в инфраструктуре инструментов для программистов
Изменения в инфраструктуре инструментов для программистов
 
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
 
Повышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаПовышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кода
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПО
 
Забытые проблемы разработки 64-битных программ
Забытые проблемы разработки 64-битных программЗабытые проблемы разработки 64-битных программ
Забытые проблемы разработки 64-битных программ
 
Краткое описание библиотеки анализа кода VivaCore
Краткое описание библиотеки анализа кода VivaCoreКраткое описание библиотеки анализа кода VivaCore
Краткое описание библиотеки анализа кода VivaCore
 
Net framework
Net frameworkNet framework
Net framework
 
Отладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программОтладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программ
 
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...
 
Презентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспеченияПрезентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспечения
 
презентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспеченияпрезентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспечения
 

Plus de Tatyanazaxarova

Урок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программУрок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программTatyanazaxarova
 
Урок 24. Фантомные ошибки
Урок 24. Фантомные ошибкиУрок 24. Фантомные ошибки
Урок 24. Фантомные ошибкиTatyanazaxarova
 
Урок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структурУрок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структурTatyanazaxarova
 
Урок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данныхУрок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данныхTatyanazaxarova
 
Урок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. ИсключенияУрок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. ИсключенияTatyanazaxarova
 
Урок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен даннымиУрок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен даннымиTatyanazaxarova
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаTatyanazaxarova
 
Урок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединенияхУрок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединенияхTatyanazaxarova
 
Урок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателейУрок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателейTatyanazaxarova
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаTatyanazaxarova
 
Урок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвигаУрок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвигаTatyanazaxarova
 
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументовУрок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументовTatyanazaxarova
 
Урок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числаУрок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числаTatyanazaxarova
 
Урок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном кодеУрок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном кодеTatyanazaxarova
 
Урок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложенияУрок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложенияTatyanazaxarova
 
Урок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурацииУрок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурацииTatyanazaxarova
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кодаTatyanazaxarova
 
Пояснения к статье про Copy-Paste
Пояснения к статье про Copy-PasteПояснения к статье про Copy-Paste
Пояснения к статье про Copy-PasteTatyanazaxarova
 
Статический анализ и ROI
Статический анализ и ROIСтатический анализ и ROI
Статический анализ и ROITatyanazaxarova
 
Вечный вопрос измерения времени
Вечный вопрос измерения времениВечный вопрос измерения времени
Вечный вопрос измерения времениTatyanazaxarova
 

Plus de Tatyanazaxarova (20)

Урок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программУрок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программ
 
Урок 24. Фантомные ошибки
Урок 24. Фантомные ошибкиУрок 24. Фантомные ошибки
Урок 24. Фантомные ошибки
 
Урок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структурУрок 23. Паттерн 15. Рост размеров структур
Урок 23. Паттерн 15. Рост размеров структур
 
Урок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данныхУрок 21. Паттерн 13. Выравнивание данных
Урок 21. Паттерн 13. Выравнивание данных
 
Урок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. ИсключенияУрок 20. Паттерн 12. Исключения
Урок 20. Паттерн 12. Исключения
 
Урок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен даннымиУрок 19. Паттерн 11. Сериализация и обмен данными
Урок 19. Паттерн 11. Сериализация и обмен данными
 
Урок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметикаУрок 17. Паттерн 9. Смешанная арифметика
Урок 17. Паттерн 9. Смешанная арифметика
 
Урок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединенияхУрок 16. Паттерн 8. Memsize-типы в объединениях
Урок 16. Паттерн 8. Memsize-типы в объединениях
 
Урок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателейУрок 15. Паттерн 7. Упаковка указателей
Урок 15. Паттерн 7. Упаковка указателей
 
Урок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметикаУрок 13. Паттерн 5. Адресная арифметика
Урок 13. Паттерн 5. Адресная арифметика
 
Урок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвигаУрок 11. Паттерн 3. Операции сдвига
Урок 11. Паттерн 3. Операции сдвига
 
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументовУрок 10. Паттерн 2. Функции с переменным количеством аргументов
Урок 10. Паттерн 2. Функции с переменным количеством аргументов
 
Урок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числаУрок 9. Паттерн 1. Магические числа
Урок 9. Паттерн 1. Магические числа
 
Урок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном кодеУрок 6. Ошибки в 64-битном коде
Урок 6. Ошибки в 64-битном коде
 
Урок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложенияУрок 5. Сборка 64-битного приложения
Урок 5. Сборка 64-битного приложения
 
Урок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурацииУрок 4. Создание 64-битной конфигурации
Урок 4. Создание 64-битной конфигурации
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
 
Пояснения к статье про Copy-Paste
Пояснения к статье про Copy-PasteПояснения к статье про Copy-Paste
Пояснения к статье про Copy-Paste
 
Статический анализ и ROI
Статический анализ и ROIСтатический анализ и ROI
Статический анализ и ROI
 
Вечный вопрос измерения времени
Вечный вопрос измерения времениВечный вопрос измерения времени
Вечный вопрос измерения времени
 

Урок 8. Статический анализ для выявления 64-битных ошибок

  • 1. Урок 8. Статический анализ для выявления 64-битных ошибок Статический анализ кода Статический анализ кода - методология выявления ошибок в программном коде, основанная на просмотре программистом участков кода, помеченных статическим анализатором. Помеченные участки кода с большой вероятностью содержат ошибки определенного типа. Другими словами, инструмент для статического анализа определяет в тексте программы места, содержащие ошибки, предрасположенные к ошибкам или имеющие плохое форматирование. Такие участки кода предоставляются программисту для изучения, и он может принять решение о модификации данного участка программы. Статические анализаторы могут быть как общего назначения (например, Microsoft PREFast, Gimpel Software PC-lint, Parasoft C++test), так и специализированными для поиска определенных классов ошибок (например, Chord для верификации параллельных Java программ). Обычно инструменты статического анализа достаточно дороги, требуют знаний о методологии их использования, часто имеют достаточно гибкие, но сложные подсистемы настройки и подавления ложных сообщений. По этой причине статические анализаторы, как правило, используются в компаниях со зрелыми процессами разработки программного обеспечения. Взамен на сложность в использовании, статические анализаторы кода позволяют выявить большое количество ошибок на самых ранних этапах разработки программного кода. Дополнительно использование методологии статического анализа дисциплинирует программистов и помогает контролировать работу молодых сотрудников. Основное преимущество использования статических анализаторов кода состоит в возможности существенного снижения стоимости устранения дефектов в программе. Чем раньше ошибка выявлена, тем меньше стоимость ее исправления. Так согласно данным, приведенным в книге Макконнелла "Совершенный Код", исправление ошибки на этапе тестирования обойдется в десять раз дороже, чем на этапе конструирования (кодирования):
  • 2. Рисунок 1 - Средняя стоимость исправления дефектов в зависимости от времени их внесения и обнаружения (данные для таблицы взяты из книги С. Макконнелла 'Совершенный Код') Инструменты статического анализа, выявляя большое количество ошибок на этапе конструирования, существенно снижают стоимость разработки всего проекта. Статический анализ для выявления 64-битных ошибок Перечислим преимущества применения статического анализа кода, которые делают этот метод наиболее оптимальным для выявления ошибок в 64-битном коде: 1. Возможность проверить ВЕСЬ код. Анализатор проверит даже тот код, который получает управление в самых редких случаях. Другими словами, у инструментов статического анализа покрытие кода практически полное. Это позволяет быть уверенным при переходе на 64-битную систему, что проверен весь код. 2. Масштабируемость. Статический анализ позволяет одинаково просто осуществить как анализ маленького, так и большого проекта. Трудоемкость анализа проекта растет линейно с его размером. При этом работу по анализу проекта можно легко распараллелить между несколькими разработчиками. Достаточно только распределить части проекта между программистами. 3. Разработчик, приступая к работе, даже не зная всех тонкостей 64-битного кода, все равно не пройдет мимо потенциальных проблем. Анализатор укажет опасные места, а справочная система снабдит его всей необходимой информацией. 4. Снижение затрат за счет ранней диагностики ошибок. 5. Возможность эффективно использовать инструменты статического анализа как при переносе кода на 64-битную систему, так и при разработке нового 64-битного кода. Анализатор Viva64, входящий в состав PVS-Studio PVS-Studio представляет собой комплект статических анализаторов кода для проверки современных и ресурсоемких приложений. В состав PVS-Studio входит статический анализатор Viva64 предназначенный для диагностики 64-битных ошибок. Анализатор PVS-Studio предназначен для работы на Windows-платформе. При этом он интегрируется в среду разработки Microsoft Visual Studio 2005/2008/2010 (смотри рисунок 2). Интерфейс PVS-Studio позволяет фильтровать диагностические сообщения несколькими методами, сохранять и загружать список предупреждений.
  • 3. Рисунок 2 - Интеграция PVS-Studio в Microsoft Visual Studio Системные требования к анализатору совпадают с требованиями к Microsoft Visual Studio: • Операционная система: Windows 7/Vista/XP/2008/2003 x86 или x64. Внимание, для анализа 64-битных приложений операционная система не обязательно должна быть 64- битной. • Среда разработки: Microsoft Visual Studio 2005/2008/2010 (Standard Edition, Professional Edition, Team Systems). Для анализа 64-битных приложений необходимо иметь установленный компонент Visual Studio под названием "X64 Compilers and Tools". Он входит во все перечисленные версии Visual Studio и может быть установлен через Visual Studio Setup. Обратите внимание, что работа PVS-Studio с Visual C++ Express Edition невозможна, поскольку эта система не поддерживает модули расширения. • Аппаратная часть: PVS-Studio работает на системах с не менее чем 1 гигабайтом оперативной памяти (рекомендуется 2 гигабайта и более); анализатор поддерживает работу на нескольких ядрах (чем больше ядер, тем быстрее выполняется анализ кода). Все диагностируемые ошибки подробно описаны в справочной системе, которая доступна после установки PVS-Studio. Также справочная система по PVS-Studio доступна на нашем сайте в режиме online. В дистрибутиве вместе с PVS-Studio поставляются специальные проекты-примеры дефектов кода, на которых можно изучить работу анализатора.
  • 4. Для более полного ознакомления с PVS-Studio вы можете скачать демонстрационную версию и ознакомиться c руководством "Учебное пособие по PVS-Studio". Демонстрационная версия имеет следующие ограничения: • доступна для использования в течение 30 дней; • ознакомительная версия показывает номера строк не всех дефектов с ошибками, а только некоторых из них (хотя обнаруживает все). Но для демонстрационных проектов, включенных в состав PVS-Studio, сделано исключение - для них отображаются номера строк для всех дефектов. На данный момент анализатор PVS-Studio реализует самую полную диагностику 64-битных ошибок. Сравнительные характеристики представлены в статье "Сравнение PVS-Studio с другими анализаторами кода". В последующих уроках, рассматривая различные паттерны ошибок, мы будем неоднократно ссылаться на PVS-Studio, чтобы продемонстрировать способы их обнаружения. Авторы курса: Андрей Карпов (karpov@viva64.com), Евгений Рыжков (evg@viva64.com). Правообладателем курса "Уроки разработки 64-битных приложений на языке Си/Си++" является ООО "Системы программной верификации". Компания занимается разработкой программного обеспечения в области анализа исходного кода программ. Сайт компании: http://www.viva64.com. Контактная информация: e-mail: support@viva64.com, 300027, г. Тула, а/я 1800.