Семинары


Семинары

Семинар отдела "Технологии программирования"

д.ф.-м.н. Петренко Александр Константинович.

Внутренний семинар отдела проходит по средам в 15:15 в здании ИСП РАН.

Доклады приглашенных участников

KernelThreadSanitizer: инструмент для поиска состояния гонки в ядре ОС Linux

Андрей Коновалов. Начало семинара - 23 ноября 2015 г.

Операционные системы, построенные на основе ядра Linux, становятся популярнее с каждым днем. Поиск и исправление ошибок в ее ядре, особенно ошибок безопасности, является важной задачей. В докладе представлен детектор KernelThreadSanitizer, позволяющий находить состояния гонки в ядре Linux. Состоянием гонки называется ситуация, когда два или более потока исполнения программы могут одновременно осуществить доступ к одной области памяти (например, переменной) и как минимум один из этих доступов является записью.

Мотивация и дизайн концептов с ограничениями подтипирования для языка программирования C#.

Белякова Юлия (аспирант мехмата ЮФУ). Начало семинара - 21 января 2015 г.

Концепты С++, предложенные в качестве замены шаблонов, представляют собой механизм обобщённого программирования на основе явных ограничений. Механизм явных ограничений на параметры обобщённого кода широко применяется в обобщённом программировании, примером являются интерфейсы Java и C#. Однако, было показано, что возможности интерфейсов уступают концептам C++.

Формальные модели и верификация свойств программ с использованием предметно-ориентированных языков

Кривчиков Максим Александрович (Механико-математический факультет и НИИ механики МГУ имени М.В. Ломоносова). Начало семинара - 24 декабря 2014 г.

В рамках работы, результаты которой представлены в докладе, предлагается подход к верификации сложных, наукоемких программных комплексов. Его суть в том, чтобы описывать их покомпонентно с помощью языков, адекватно отражающих специфику предметной области (предметно-ориентированных языков), которые при этом имеют заданную формальную семантику. Для построения таких языков и их формальной семантики разработано промежуточное представление на основе λ-исчисления с зависимыми типами.

Методы и программные средства макромодульной разработки программ

Алексей Сиднев. Начало семинара - 17 декабря 2014 г.

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

Разработка и исследование методов и алгоритмов организации мультиклиентских кластеров баз данных

Бойцов Евгений Александрович (аспирант кафедры теоретической информатики ЯрГУ, научн. рук. Соколов В.А.). Начало семинара - 18 сентября 2014 г.

Построение, моделирование и верификация ПЛК-программ по LTL-спецификации.

Рябухин Дмитрий Александрович (аспирант кафедры теоретической информатики ЯрГУ , научн. рук. Кузьмин Е.В.). Начало семинара - 18 сентября 2014 г.

Статико-динамическая верификация драйверов файловых систем ядра Linux

Денис Ефремов. Начало семинара - 14 мая 2014 г.

На семинаре будет рассмотрен метод concolic тестирования и его применение для верификации модулей ядра ОС GNU/Linux. Будет рассказано об использовании особенностей реализации драйверов файловых систем для осуществления данного вида тестирования. А также рассмотрен вопрос автоматического создания тестовых образцов файловых систем. Concolic (от англ конкретный и символический) тестирование представляет собой гибридный метод верификации программного обеспечения, который чередует конкретное исполнение (исполнение с определёнными входными данными) с символическим исполнением. Последнее рассматривает переменные программы как символические переменные. Символическое исполнение используется в сочетании со средством автоматизированного доказательства теорем для создания новых конкретных входных данных с целью максимального покрытия кода.

Методы модульной верификации ядра ОС Linux

Илья Захаров. Начало семинара - 7 мая 2014 г.

Система верификации LDV нацелена на проверку правил корректности использования интерфейсов ядра Linux динамически загружаемыми модулями при помощи инструментов статической верификации. Одновременно анализировать исходный код модуля вместе с кодом остального ядра затруднительно для существующих инструментов верификации из-за большого объема и сложности кода такой системы. Поэтому в системе LDV для целевого модуля генерируется модель окружения, вместе с которой исходный код проверяется инструментами верификации.

Верификация изменений в коде модулей ядра ОС Linux

Владимир Гратинский. Начало семинара - 23 апреля 2014 г.

Ядро Linux разрабатывается чрезвычайно быстрыми темпами. По оценкам, опубликованным в отчете Linux Kernel Development 2013, каждый час появляется 5-9 коммитов, содержащих изменения ядра, которые могут добавлять новую функциональность, исправлять или удалять существующую, исправлять ошибки. Каждое изменение может привносить новые ошибки.

Cистема для выявления состояний гонки в модулях ядра Linux

Никита Комаров. Начало семинара - 16 апреля 2014 г.

Одним из важных классов ошибок в программах являются состояния гонки, особенно распространенные и опасные в таких программных продуктах, как ядро операционной системы. В докладе будут рассмотрены некоторые подходы к поиску таких ошибок. Будет представлена система Racehound для выявления состояний гонки в ядре ОС Linux, а также описаны некоторые особенности ее реализации.

Нахождение всех ошибок в модулях ядра Linux за один запуск верификатора

Мордань Виталий. Начало семинара - 02 апреля 2014 г.

Современные статические верификаторы используются только для поиска первой встретившейся ошибки для лишь одного выбранного правила корректности. В результате процесс нахождения всех ошибок в ядре Linux оказывается очень долгим. В настоящей работе предлагается идея мульти-аспектной верификации, а также представлены первые эксперименты в области нахождения всех нарушений выбранного правила с помощью инструментов LDV Tools и статического верификатора CPAchecker.

Генерация тестовых данных для покрытия путей в формальных спецификациях системы команд

Коцыняк Артём. Начало семинара - 19 марта 2014 г.

Основным методом функциональной верификации микропроцессоров по-прежнему остаётся выполнение тестовых программ. Одним из способов автоматизации построения тестов является использование моделей аппаратуры. Генерация тестовых программ включает в себя построение тестовых последовательностей и генерацию тестовых данных. Одной из метрик качества тестовых данных является покрытие путей в формальных спецификациях системы команд. В докладе рассматривается подход к генерации тестовых данных на основе модели микропроцессора, полученной из формальной спецификации системы команд.

MicroTESK: Среда генерации тестовых программ для микропроцессоров, основанная на формальных спецификациях системы команд

Андрей Татарников. Начало семинара - 12 марта 2014 г.

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

Построение EFSM -моделей на основе статического анализа HDL -описаний

Сергей Смолов. Начало семинара - 5 марта 2014 г.

Сложность цифровой микроэлектронной аппаратуры неуклонно возрастает, что существенно затрудняет ее верификацию — проверку функциональной корректности. Многие автоматизированные методы верификации аппаратуры основаны на использовании моделей, удобных для генерации тестов и формальной проверки свойств. В докладе описывается новый подход к извлечению моделей в форме расширенных конечных автоматов ( Extended Finite State Machine , EFSM ) из исходного кода HDL-описаний, а также обсуждаются возможности использования таких моделей в процессе верификации.

Построение и использование SMT-формул с неинтерпретируемыми функциями для уточнения предикатной абстракции в инструменте CPAchecker

Мандрыкин Михаил. Начало семинара - 19 февраля 2014 г.

Работа с указателями и динамической памятью до сих пор остается одной из плохо поддерживаемых возможностей во многих инструментах автоматической статической верификации, реализующих метод CEGAR с предикатной абстракцией. В соревнованиях автоматических статических верификаторов SV-COMP'14 из 5 участников, использующих CEGAR с предикатной абстракцией, только 2 участвовало в категории HeapManipulation, состоящей из заданий, проверяющих поддержку динамической памяти. При этом один из этих инструментов занял в данной категории последнее место. В то же время инструменты, основанные на CEGAR с предикатной абстракцией, используются для верификации драйверов операционных систем (например, драйверов Linux в проекте LDV), в которых указатели, в том числе на динамическую память, используются очень активно.

Поиск состояний гонки методами статического анализа

Андрианов Павел. Начало семинара - 12 февраля 2014 г.

Ошибки, связанные с многопоточным выполнением, остаются одними из самых сложно выявляемых. Наиболее распространенными причинами таких ошибок являются состояния гонок. Одним из способов поиска состояний гонок является использование методов статического анализа, в частности метода адаптивного статического анализа. В докладе будет рассказано о методе статического анализа, реализованного в инструменте CPAchecker, для поиска состояний гонок и об одном из направлений развития данного подхода - применении метода CEGAR (Counter Example Guided Abstraction Refinement) для этого.

Reusing Precisions for Efficient Regression Verification (and beyond)

Andreas Stahlbauer. Начало семинара - 21 июня 2013 г.

Continuous testing during development is a well-established technique for software-quality assurance. Continuous model checking from revision to revision is not yet established as a standard practice, because the enormous resource consumption makes its application impractical. Model checkers compute a large number of verification facts that are necessary for verifying if a given specification holds. We have identified a category of such intermediate results that are easy to store and efficient to reuse: abstraction precisions.

Distributing Verification Tasks with VerifierCloud

Peter Häring. Начало семинара - 21 июня 2013.

Software verification of real-world programs is still a time- and resource-consuming process, dependent on sophisticated tools that often require expert knowledge. We present VerifierCloud, a job distribution tool that allows optimal hardware utilization. It is integrated with the CPAchecker framework and can be used to run competitive benchmarks. A web front-end for registration-based software verification is under development to make verification technology more accessible for non-experts.

Динамический анализ расширенных AADL-моделей

Буздалов Денис. Начало семинара - 15 мая 2013 г.

AADL -- расширяемый язык описания архитектуры программно-аппаратных систем, используемый при моделировании систем авионики, а также других ответственных и встраиваемых систем. Для проверки тех или иных свойств этих моделей могут использоваться различные подходы, которым могут требоваться различные расширения AADL. Рассмотрено расширение AADL-моделей описаниями поведения компонентов модели исполнимым кодом на Java с определёнными ограничениями. Такой подход позволяет описывать поведения сложных подсистем на стадии проектирования одновременно с детальным описанием уже разработанных компонент. Тем самым появляется возможность симуляции модели и анализа её свойств с ранних этапов проектирования.

Высокоуровневая спецификация иерархии памяти микропроцессоров: приложение для генерации тестовых програм

Татьяна Сергеева. Начало семинара - 23 апреля 2013 г.

MMU, Memory Management Unit (подсистема управления памятью) - ключевой компонент микропроцессора, отвечающий за обработку обращений к памяти, соответственно, к его функционированию предъявляются высокие требования. Многоуровневая иерархия памяти (как правило, кэши нескольких (L1/L2, иногда и L3) уровней) создает огромное число ситуаций в работе модуля, проверить которые вручную не представляется возможным. Требуются средства генерации тестовых программ для верификации функциональности подсистемы управления памятью микропроцессоров. Архитектура целевого микропроцессора в генераторе тестовых программ MicroTESK описывается на ADL языке Sim-nML. Однако семантики и синтаксиса Sim-nML не хватает для описания работы модулей памяти. Появляется необходимость в разработке языка высокого уровня для формальной спецификации MMU.

Генератор тестовых программ MicroTESK: средства моделирования системы команд микропроцессорах

Андрей Татарников. Начало семинара - 16 апреля 2013 г.

Основной метод функциональной верификации микропроцессоров - генерация и выполнение тестовых программ. Несмотря на доступные на рынке мощные автоматические генераторы, создание тестов требует серьёзных усилий и временных затрат и значительно удлиняет цикл разработки дизайна микропроцессора. Главная проблема состоит в том, что большинство существующих средств разработано под конкретную архитектуру и для их адаптации к новой архитектуре или к изменениям в текущей приходится переписывать значительную часть их кода.

Динамическое обнаружение гонок в Java-программах

Трифанов Виталий Юрьевич, аспирант кафедры системного программирования математико-механического факультета СПбГУ. Старший разработчик компании Devexperts. Начало семинара - 09 апреля 2013 г.

Состояния гонки (data races) – это несинхронизированные обращения к одному и тому же участку памяти разных потоков параллельной программы. Состояния гонки являются одними из самых труднообнаружимых ошибок многопоточного программирования. Автоматический поиск гонок является предметом активных исследований в последние двадцать лет, однако, для Java-приложений на настоящий момент не существует полноценного программного средства (динамического детектора гонок), применимого для промышленных приложений (сотни и тысячи классов). Основная причина - высокие накладные расходы на анализ программ.

Поиск состояний гонки методами статического анализа

Павел Андрианов. Начало семинара - 02 апреля 2013 г.

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

Статико-динамическая верификация драйверов файловых систем ядра Linux

Денис Ефремов. Начало семинара - 26 марта 2013 г.

В докладе рассказано о методе concolic тестирования и возможностях его применения для верификации модулей ядра ОС GNU/Linux, об использовании особенностей реализации драйверов файловых систем для осуществления этого тестирования. Concolic (от англ конкретный и символический) тестирование представляет собой гибридный метод верификации программного обеспечения, который чередует конкретное исполнение (исполнение с определёнными входными данными) с символическим исполнением. Последнее рассматривает переменные программы как символические переменные. Символическое исполнение используется в сочетании со средством автоматизированного доказательства теорем для создания новых конкретных входных данных с целью максимального покрытия кода.

Диагностика ошибочного поведения аппаратуры при динамической верификации на основе моделей

Александр Проценко. Начало семинара - 12 марта 2013 г.

При верификации различных аппаратных средств значительное количество усилий тратится на интерпретацию полученных в ходе верификации ошибочных результатов и поиск причин, породивших их. Сложность ситуации обуславливается значительным параллелизмом аппаратуры, большим количеством входных и выходных интерфейсов. На семинаре будет рассказано о подходе к автоматическому анализу и интерпретации результатов тестирования, полученных в рамках динамической модульной верификации на основе моделей с использованием инструмента C++TESK.

Генерация тестовых программ для микропроцессоров на основе моделей их архитектуры

Андрей Татарников. Начало семинара - 26 февраля 2013 г.

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

Комбинаторная генерация программных конфигураций ОС

Виктор Кулямин. Начало семинара - 19 февраля 2013 г.

Было рассказано об автоматической генерации тестов для конфигурационного тестирования ядра ОС. В основе предлагаемого метода лежит использование покрывающих наборов и учет условий использования различных параметров конфигурации. Сгенерированные таким образом тесты использовались на практике для тестирования ОС2000.

Инструменты для динамического анализа модулей и драйверов ядра Linux

Андрей Цыварев. Начало семинара - 5 февраля 2013 г.

Самым распространенным способом проверки качества драйверов Linux является тестирование. Однако за счет работы только в пользовательском пространстве могут быть проверены не все свойства драйвера. Не вмешиваясь в работу драйвера на уровне ядра невозможно проверить, например, освобождает ли драйвер все используемые им ресурсы, и правильно ли драйвер работает в случае системных сбоев.

Моделирование памяти при верификации программ методом CEGAR

Михаил Мандрыкин. Начало семинара - 29 января 2013 г.

Об инструментировании и генерировании окружения для драйверов, верифицируемых в системе Linux Driver Verification (LDV) было рассказано на предыдущих семинарах. Проверка же подготовленного кода драйвера, вместе со сгенерированным окруженем, в среде LDV в настоящее время осуществляется инструментами статического анализа кода, такими как CPAchecker и BLAST. В основе работы этих инструментов лежит подход CEGAR -- уточнение абстракции по контрпримерам.

Моделирование окружения драйверов операционной системы Linux для их статической верификации

Илья Захаров. Начало семинара - 22 января 2013 г.

Ядро операционной системы Linux является одним из самых динамично развивающихся проектов в мире. Драйверы занимают большую часть ядра Linux и в большинстве случаев именно ошибки в драйверах приводят к падению системы. Осуществлять проверку драйверов ОС Linux вручную достаточно трудоемко.

Система для выявления состояний гонки в ядре Linux

Никита Комаров. Начало семинара - 15 января 2013 г.

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

Тестирование автоматизированных процессов

В.Н.Федотов. Начало семинара - 25 декабря 2012 г.

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

Методы инструментирования Си-программ для поиска ошибок с помощью статического анализа кода

Е.М. Новиков. Начало семинара - 18 декабря 2012 г.

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

Тестирование инструментов для анализа покрытия по метрике MC/DC на соответствие требованиям стандарта DO-178B и пояснениям к нему

Е.А.Герлиц. Начало семинара - 10 декабря 2012 г.

Стандарт DO-178B содержит требования к процессам разработки бортового ПО воздушных судов гражданской авиации. Бортовое ПО подлежит обязательной сертификации, в ходе которой проверяется соответствие процессов разработки ПО требованиям стандарта. Помимо прочего стандарт определяет MC/DC - структурный критерий тестового покрытия на основе потока управления. Стандарт требует, чтобы исходный код наиболее критичных с точки зрения надежности модулей бортового ПО был покрыт функциональными тестами по MC/DC. В связи со сложностью обеспечения покрытия по MC/DC в реальной практике разработки бортового ПО для измерения покрытия используют специализированные программные инструменты. Целью настоящей работы является выявление ограничений и слабых мест данных инструментов.

Автоматизация тестирования моделей аппаратуры на основе статического анализа HDL-описаний

С.А. Смолов. Начало семинара - 04 декабря 2012 г.

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

Разработка, реализация и анализ производительности модифицированного транспортного протокола

А. Сивов (аспирант Ярославского Университета). Начало семинара - 21 ноября 2012 г.

В докладе представлен протокол транспортного уровня TCP TIPS, разработанный для эффективного использования доступной пропускной способности проводной, беспроводной и гетерогенной сети, обеспечивающий передачу данных, не вызывающую рост задержек. Протокол TCP TIPS использует отправку данных через определенные интервалы времени (TCP pacing), задающие скорость передачи данных. Он не использует такие механизмы как окно перегрузки и пороговое значение медленного старта, вместо этого контролируя значения межсегментных интервалов, применяемых отправителем, с помощью алгоритмов оценки доступной пропускной способности сети и управления потоком данных, основанных на анализе значений межсегментных интервалов, наблюдаемых получателем.

Методы синтеза установочных и различающих экспериментов с недетерминированными автоматами

Н. Кушик (аспирантка Томского Университета). Начало семинара - 20 ноября 2012 г.

Методы синтеза умозрительных экспериментов развиваются с 1956 г., когда Э. Мур определил понятие эксперимента с конечным автоматом в одноименной статье. Тем не менее, большая часть известных результатов по синтезу различающих (диагностических) и установочных экспериментов получена для детерминированных автоматов. Исследования, посвященные синтезу таких экспериментов для недетерминированных (неинициальных) автоматов, только начинают развиваться, и известные результаты по синтезу условных и безусловных различающих экспериментов покрывают только класс автоматов с двумя начальными состояниями.

Верификация драйверов операционной системы Linux при помощи предикатных абстракций

В.С. Мутилин. Начало семинара - 09 октября 2012 г.

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

Динамическая верификация цифровой аппаратуры на основе формальных спецификаций

M. M. Чупилко. Начало семинара - 17 апреля 2012 г.

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