Главная » Просмотр файлов » final-report-sukhanova-2011

final-report-sukhanova-2011 (1184404)

Файл №1184404 final-report-sukhanova-2011 (решения 2011 года)final-report-sukhanova-2011 (1184404)2020-08-20СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Московский государственный университет имени М. В. ЛомоносоваФакультет вычислительной математики и кибернетикиОТЧЕТ ПО ПРАКТИКУМУВерификация программного обеспеченияФункция bitmap_weight64Выполнила:студентка 528 группыСуханова СофьяВитальевнаПреподаватель:доктор физ.-мат. наукПетренко АлександрКонстантиновичМосква 2011ОглавлениеОглавление.................................................................................................................................................2Постановка задачи.....................................................................................................................................3Тестирование алгоритма...........................................................................................................................5Описание спецификации целевой функции........................................................................................5Обоснование выбранных ветвей функциональности ........................................................................5Характеристики покрытия исходного кода реализации ....................................................................6Сравнение выбранных ветвей функциональности и ветвей покрытия по исходному коду ............6Описание принципов выбора тестовых данных и их количественных характеристик ....................6Оценки минимальности набора тестовых данных с точки зрения покрытия ветвейфункциональности и исходного кода ..................................................................................................7Описание ошибок в реализации, которые были выявлены при помощи тестирования .................7Верификация алгоритма...........................................................................................................................8Описание спецификации требований в синтаксисе ACSL ..................................................................8Описание ошибок в реализации, которые были выявлены при помощи верификации .................8Описание выбранных инвариантов и вариантов ...............................................................................8Описание и обоснование лемм num_ops_*........................................................................................9Количество и классификация сгенерированных лемм ....................................................................16Выводы, сделанные по результатам верификации ..........................................................................17Допущения, при которых алгоритм является корректным ..........................................................17Проблемы с инструментами верификации и предложения по их улучшению ..........................17Заключение .............................................................................................................................................182Постановка задачиВ исходном файле описана реализация функции, подсчитывающейколичество единиц в последовательности битов, заданной как массив чиселтипа unsigned long long int.Анализируемая функция:int bitmap_weight64(const unsigned long long *bitmap, int bits),где bitmap – массив чисел, рассматриваемый как последовательность битов,а bits – количество рассматриваемых битов из этой последовательности.Функция возвращает число типа int – количество единичных битов.Для вычисления количества единичных битов в последовательностибит bitmap сначала определяется, сколько рассматривается полных чиселтипа unsigned long long int, затем с помощью вспомогательной функцииhweight64 считается количество единичных битов в двоичной записикаждого полного числа.

Далее подсчитывается количество единиц вдвоичной записи последнего (неполного) числа, в котором рассматриваютсяне все биты. Для этого умножением на специальную маску выделяютсярассматриваемые биты, и для полученного числа вызывается функцияhweight64.Вспомогательная функция:unsigned long long int hweight64(unsigned long long int w)Данная функция возвращает количество единичных битов в двоичнойзаписи числа w.Вычисление количества единичных битов в числе w состоит из 6 шагов.На первом шаге в каждой паре битов получается число, равноеколичеству единичных битов в этой паре. На втором шаге в каждой четверкебитов получается сумма первых двух битов в четверке и последних двухбитов в четверке. Таким образом, в каждой четверке битов записано,сколько единичных битов было в этой четверке.

На третьем шаге в каждойвосьмерке битов получается сумма первых четырех битов в восьмерке ипоследних четырех битов в восьмерке. На четвертом, пятом и шестом шагахрезультат суммируется с тем же результатом, только сдвинутым на 8, 16 и 32соответственно. Таким образом, в последних восьми битах получаетсясумма всех восьми восьмерок, то есть количество единичных битов во всемчисле w.3Работа с заданной функцией включает в себя несколько этапов:1. Разработка тестов на основе формальных спецификаций.Разработка формальной спецификации функциональныхтребований к работе алгоритма на спецификационном расширенииязыка Си (SeC).•Разработка тестовых сценариев, обеспечивающих покрытие всехстрок кода реализации алгоритма, с помощью инструмента CTesK.•2.

Аналитическое доказательство корректности алгоритма.• Добавление в исходный файл (*.c) предусловий, постусловий,инвариантов и вариантов циклов целевой функции в видекомментариев в соответствии с синтаксисом ACSL.• Доказательство лемм сгенерированных инструментом Frama-Спри помощи alt-ergo и PVS.4Тестирование алгоритмаОписание спецификации целевой функцииПредусловие:Все указатели на рассматриваемые элементы массива не должны бытьnull и должны допускать корректное разыменование, и количестворассматриваемых бит не должно быть меньше нуля.Постусловие:Функция должна возвращать в качестве результата количествоединичных бит в рассматриваемой части массива.Обоснование выбранных ветвей функциональностиБыло выбрано четыре ветви функциональности:1.Количество рассматриваемых битов равно нулю.Количество рассматриваемых битов меньше, чем количество бит взаписи числа типа unsigned long long int (BITS_PER_LONG).2.Количество рассматриваемых битов кратно количеству битов в записичисла типа unsigned long long int (BITS_PER_LONG).3.Количество рассматриваемых битов не кратно количеству битов взаписи числа типа unsigned long long int (BITS_PER_LONG).4.Ветви функциональности были выбраны так, чтобы покрыть всевозможные ветви целевой функции по исходному коду:•Цикл по всем числам unsigned long long int (полным) может выполнятьсяили не выполняться - в зависимости от того, больше или меньшеколичество рассматриваемых битов количества битов в записи числа типаunsigned long long int (BITS_PER_LONG).•Проверка на то, осталось ли у нас последнее (неполное) число, в которомнадо просмотреть только часть битов, зависит от того, кратно ли числорассматриваемых битов количеству битов в записи числа типа unsignedlong long int (BITS_PER_LONG).5Характеристики покрытия исходного кода реализацииВо время тестирования было достигнуто 100% покрытие исходногокода по строкам и ветвям реализации.Сравнение выбранных ветвей функциональности и ветвейпокрытия по исходному кодуВетви функциональности были выбраны так, чтобы полностьюпокрывать все варианты поведения функции, то есть соответствуют ветвямпокрытия по исходному коду.

Было достигнуто 100% покрытие ветвейфункциональности, соответственно, было достигнуто 100% покрытие ветвейисходного кода.Описание принципов выбора тестовых данных и ихколичественных характеристикТестовые данные выбирались так, чтобы были покрыты все ветвифункциональности целевой функции.Используемые тесты:1.Количество рассматриваемых битов равно 0.Количество рассматриваемых битов равно BITS_PER_LONG-20.

ПервыеBITS_PER_LONG-30 битов заполнены последовательным чередованием 1и 0, а в битах с номерами от BITS_PER_LONG-30 до BITS_PER_LONG-21порядок чередования 1 и 0 противоположный.2.Количество рассматриваемых битов равно BITS_PER_LONG*3. ПервыеBITS_PER_LONG-30 битов заполнены последовательным чередованием 1и 0; в битах с номерами от BITS_PER_LONG-30 до BITS_PER_LONG-21порядок чередования 1 и 0 противоположный; в битах с номерами отBITS_PER_LONG-20 до BITS_PER_LONG*2 - 1 порядок чередования 1 и 0становится прежним, а в битах с номерами от BITS_PER_LONG*2 доBITS_PER_LONG*3 - 1 порядок чередования 1 и 0 снова становитсяпротивоположным.3.Количество рассматриваемых битов равно BITS_PER_LONG*3 плюс ещедва бита. Биты от 0 до BITS_PER_LONG*3 заполнены так же, как описано впункте 3, а последние рассматриваемые биты равны 1 и 0.4.6Оценки минимальности набора тестовых данных с точки зренияпокрытия ветвей функциональности и исходного кодаПредложенный набор тестовых данных является минимальным с точкизрения покрытия ветвей функциональности и, как следствие, покрытияисходного кода.Описание ошибок в реализации, которые были выявлены припомощи тестированияВ макросе, использованном в целевой функции для создания маскидля последнего числа, была обнаружена ошибка типизации.#define BITMAP_LAST_WORD_MASK(nbits)(((nbits) % BITS_PER_LONG) ?(1ULL<<((nbits) % BITS_PER_LONG))-1 : ~0ULL),/* (1UL<<((nbits) % BITS_PER_LONG))-1 : ~0UL // Error: Must be unsignedlong long instead of unsigned long */Вместо константы 1ULL стояла константа 1UL, поэтому при выполнениисдвига на число большее, чем число бит в числе типа unsigned long int,возникало переполнение, и маска получалась некорректной.

Как следствие,некорректно считалось число единичных бит в последнем (неполном) числе.Если последнее (неполное) слово по битам занимает меньшеполовины BITS_PER_LONG, то есть меньше UL, то побитовый сдвигпроисходит нормально. Но если последнее слово будет занимать большеполовины BITS_PER_LONG, то при сдвиге в BITMAP_LAST_WORD_MASKпроизойдет ошибка, и получится неверный результат. Данная ошибкаотлавливается во 2й ветви функциональности, где последнее число занимаетBITS_PER_LONG-20 бит.7Верификация алгоритмаОписание спецификации требований в синтаксисе ACSLСпецификация целевой функции bitmap_weight64:@ requires@(( bits >= 0 ) &&@( (bits%BITS_PER_LONG) ?@\valid_range(bitmap, 0, bits/BITS_PER_LONG) :@\valid_range(bitmap, 0, bits/BITS_PER_LONG-1) ));@ ensures@(\result == bit_list_hweight(@create_bit_list_from_array{Here}(bitmap, bits,0) )@);Предусловие: все указатели на рассматриваемые элементы массива недолжны быть null и должны допускать корректное разыменование, иколичество рассматриваемых бит не должно быть меньше нуля.Постусловие: функция должна возвращать в качестве результата количествоединичных бит в рассматриваемой части массива.Спецификация использующейся в bitmap_weight64 функции hweight64:@ requires \true;@ ensures@(\result == bit_list_hweight (create_bit_list (w, BITS_PER_LONG)));Постусловие: функция должна возвращать в качестве результата количествоединичных бит в числе w.Данные спецификации эквивалентны спецификации, описанной впредыдущей части.Описание ошибок в реализации, которые были выявлены припомощи верификацииВ ходе верификации ошибок в реализации выявлено не было.Описание выбранных инвариантов и вариантовВ целевой функции присутствует один цикл.

Характеристики

Тип файла
PDF-файл
Размер
186,87 Kb
Тип материала
Предмет
Высшее учебное заведение

Тип файла PDF

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

Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.

Список файлов учебной работы

решения 2011 года
akovalenko_bitset_iter
Makefile.
Makefile_com.dropbox.attributes
bitset_iter.c
bitset_iter.c_com.dropbox.attributes
bitset_iter.h
bitset_iter.h_com.dropbox.attributes
bitset_iter_model.sec
bitset_iter_model.sec_com.dropbox.attributes
bitset_iter_model.seh
bitset_iter_model.seh_com.dropbox.attributes
bitset_iter_set_add.sec
bitset_iter_set_add.sec_com.dropbox.attributes
bitset_iter_set_alloc.sec
bitset_iter_set_alloc.sec_com.dropbox.attributes
bitset_iter_set_cardinality.sec
bitset_iter_set_cardinality.sec_com.dropbox.attributes
bitset_iter_set_clear.sec
bitset_iter_set_clear.sec_com.dropbox.attributes
bitset_iter_set_copy.sec
bitset_iter_set_copy.sec_com.dropbox.attributes
bitset_iter_set_del.sec
bitset_iter_set_del.sec_com.dropbox.attributes
bitset_iter_set_eq.sec
bitset_iter_set_eq.sec_com.dropbox.attributes
bitset_iter_set_equal.sec
bitset_iter_set_equal.sec_com.dropbox.attributes
bitset_iter_set_fill.sec
bitset_iter_set_fill.sec_com.dropbox.attributes
bitset_iter_set_free.sec
Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7021
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее