final-report-akovalenko-2011 (решения 2011 года)

PDF-файл final-report-akovalenko-2011 (решения 2011 года) Практика (63460): Другое - 9 семестр (1 семестр магистратуры)final-report-akovalenko-2011 (решения 2011 года) - PDF (63460) - СтудИзба2020-08-20СтудИзба

Описание файла

Файл "final-report-akovalenko-2011" внутри архива находится в следующих папках: решения 2011 года, akovalenko_bitset_iter. PDF-файл из архива "решения 2011 года", который расположен в категории "". Всё это находится в предмете "практика" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст из PDF

Московский государственный университет им. М.В. Ломоносова,Факультет вычислительной математики и кибернетикиОТЧЕТ ПО ПРАКТИКУМУВерификация программного обеспечения.Операции с битовыми множествами: перечислениеВыполнила:студентка группы №527Коваленко А.И.Преподаватель:Доктор физ.-мат. НаукПетренко Александр КонстантиновичМосква 2011ОглавлениеОглавление............................................................................................................................................2Постановка задачи................................................................................................................................31.1. Используемые типы данных.....................................................................................................31.2.

Анализируемые функции..........................................................................................................41.3. Задачи.........................................................................................................................................62. Тестирование алгоритма..................................................................................................................72.2. Обоснование выбранных ветвей функциональности.............................................................72.3.

Характеристики покрытия исходного кода реализации.........................................................82.4. Сравнение выбранных ветвей функциональности и ветвей покрытия по исходному коду..........................................................................................................................................................102.5. Описание принципов выбора тестовых данных и их количественных характеристик.......102.6. Оценки минимальности набора тестовых данных с точки зрения покрытия ветвейфункциональности и исходного кода............................................................................................112.7. Описание ошибок в реализации, которые были выявлены при помощи тестирования....123.

Верификация алгоритма.................................................................................................................133.1. Описание спецификации требований в синтаксисе ACSL.....................................................133.2. Описание ошибок в реализации, которые были выявлены при помощи верификации....143.3. Инварианты и варианты..........................................................................................................143.4. Количество и классификация сгенерированных лемм.........................................................173.5.

Выводы, сделанные по результатам верификации...............................................................174. Заключение.....................................................................................................................................192Постановка задачиВ исходных файлах описана реализации функции перечисления длябитового множества и вспомогательных функций для работы с этиммножеством. Сам алгоритм перечисления базируется на вложенном цикле– внешний цикл по фреймам битового множества, внутренний цикл – послотам (битам).1.1. Используемые типы данныхtypedef struct set_s *set_t; // указатель на битовое множествоtypedef const struct set_s *frozenset_t; // указатель на битовоемножествоtypedef unsigned int set_coord_t; // координата бита в множествеtypedef unsigned char set_frame_t; // фрейм в битовом множествеstruct set_s {unsigned int num_slots; // количество слотов в множествеunsigned int num_used_slots; // количество используемых слотов вмножествеunsigned int num_frames; // количество фреймовset_frame_t *frames; // указатель на фреймы};31.2.

Анализируемые функцииНа первом этапе необходимо было анализировать все не staticфункции.set_t set_alloc(const unsigned int num_slots);Выделяет память под битовое множество для указанного в num_slotsколичества слотов.set_t set_free(const set_t set) ;Освобождает память, выделенную для битового множества set.unsigned int set_cardinality(const frozenset_t set);Возвращает количество используемых слотов в множестве.bool_t set_has_coord(const frozenset_t set, const set_coord_t elm) ;Возвращает TRUE в случае, когда в позиции elm множества set стоит1, и FALSE в противном случае.bool_t set_add(const set_t set, const set_coord_t elm);Добавляет единичку в позицию elm в множестве set.bool_t set_remove(const set_t set, const set_coord_t elm);Обнуляет единичку из позиции elm в множестве set.4void set_fill(const set_t set, const unsigned int num_elms, constset_coord_t elm1, ...);Добавляет элементы в множество set.

Во втором параметреуказывается количество добавляемых элементов.void set_clear(const set_t set) ;Обнуляет все элементы в битовом множестве.set_t set_copy(const frozenset_t set) ;Копирует множество.bool_t set_is_subset(const frozenset_t sub, const frozenset_t sup);Проверяет, является ли множество sub подмножеством sup.bool_t set_is_equal(const frozenset_t set1, const frozenset_t set2);Проверяет два множества на эквивалентность.int set_iter(const frozenset_t set, set_coord_t *res);Возвращает количество ненулевых элементов в множестве,модифицирует массив res, записывая туда координаты ненулевыхэлементов.51.3.

Задачи1. Разработка тестов на основе формальных спецификаций:•разработать формальную спецификацию функциональныхтребований к работе алгоритма на спецификационномрасширении языка Си (SeC);•разработать тестовые сценарии, обеспечивающие покрытие всехстрок кода реализации алгоритма, с помощью инструментаCTesK.2. Аналитическое доказательство корректности алгоритма:•модифицировать исходный файл (*.c) с реализацией целевойфункции, добавив туда:oпредусловие и постусловие целевой функции в видекомментариев в соответствии с синтаксисом ACSL;oинварианты и варианты циклов в целевой функции в видекомментариев в соответствии с синтаксисом ACSL;•проверить какие из лемм сгенерированных инструментомFrama-С могут быть доказаны автоматически alt-ergo;•доказать оставшиеся утверждения при помощи инструментаPVS.62.

Тестирование алгоритма2.1. Спецификация целевой функцииint set_iter(const frozenset_t set, set_coord_t *res);• если множество set пусто, то функция возвращает 0;• если в множестве все элементы нулевые, то функция возвращает0;•функция возвращает количество ненулевых элементов битовогомножества set;• в массив res записываются координаты ненулевых элементовмножества set.2.2.

Обоснование выбранных ветвей функциональностиset_t set_free(const set_t set) ;unsigned int set_cardinality(const frozenset_t set);void set_clear(const set_t set) ;set_t set_copy(const frozenset_t set) ;int set_iter(const frozenset_t set, set_coord_t *res);• пустое множество• непустое множествоbool_t set_has_coord(const frozenset_t set, const set_coord_t elm) ;• пустое множество• нет элемента в множестве7• есть элемент в множествеbool_t set_add(const set_t set, const set_coord_t elm);bool_t set_remove(const set_t set, const set_coord_t elm);void set_fill(const set_t set, const unsigned int num_elms, constset_coord_t elm1, ...);• пустое множество• есть такой элемент в множестве• непустое множество, новый элементbool_t set_is_subset(const frozenset_t sub, const frozenset_t sup);• set и sub пустые множества• set или sub пустое множество• sub не является подмножеством set• sub подмножество setbool_t set_is_equal(const frozenset_t set1, const frozenset_t set2);• оба пустые множества• одно из них пустое множество•передаётся одно и то же множество• множества равны2.3.

Характеристики покрытия исходного кода реализацииПокрытие исходного кода во время тестирования составляет:8• 97.37% строк исходного кода• 100% ветвей исходного кода• 78.95% вызовов функций исходного кодаНе покрыто:•set_alloc called 2542 returned 100% blocks executed 80%(неуспешное выделение памяти для множества)2542: 111:if(NULL == set || NULL == frames) {branch 0 taken 100% (fallthrough)branch 1 taken 0%branch 2 taken 0% (fallthrough)branch 3 taken 100%#####: 112:call0 never executed-: 113:•abort();}set_clear called 3 returned 100% blocks executed(неуспешный вызов realloc для выделения памяти)1: 254:91%if(NULL == curr_frame) {branch 0 taken 0% (fallthrough)branch 1 taken 100%#####: 255:call0 never executed-: 256:•abort();}set_copy called 2 returned 100% blocks executed 75% (неуспешноевыделение памяти под множество)2: 285:if(NULL == set || NULL == frames) {9branch 0 taken 100% (fallthrough)branch 1 taken 0%branch 2 taken 0% (fallthrough)branch 3 taken 100%#####: 286:call0 never executed-: 287:•abort();}остальные функции возвращают returned 100% blocks executed100%2.4.

Сравнение выбранных ветвей функциональности и ветвейпокрытия по исходному кодуВетви функциональности были выбраны так, чтобы покрытьмаксимально возможное количество ветвей по исходному коду.Непокрытыми остались только неудачные попытки выделения памяти.2.5. Описание принципов выбора тестовых данных и ихколичественных характеристикТестовые данные выбирались так, чтобы покрыть максимальновозможное количество ветвей по исходному коду. Пришлось дажедобавить несколько уточнений в существующие спецификации и написатьдополнительную спецификацию для проверки функции set_is_equal() – дляпроверки на равенство тех множеств, размерности которых не совпадают,но совпадают все позиции единичек.102.6. Оценки минимальности набора тестовых данных с точкизрения покрытия ветвей функциональности и исходногокодаset_t set_free(const set_t set) ;unsigned int set_cardinality(const frozenset_t set);void set_clear(const set_t set) ;set_t set_copy(const frozenset_t set) ;int set_iter(const frozenset_t set, set_coord_t *res);• пустое множество• непустое множествоbool_t set_has_coord(const frozenset_t set, const set_coord_t elm) ;• пустое множество• нет элемента в множестве• есть элемент в множествеbool_t set_add(const set_t set, const set_coord_t elm);bool_t set_remove(const set_t set, const set_coord_t elm);void set_fill(const set_t set, const unsigned int num_elms, constset_coord_t elm1, ...);• пустое множество• есть такой элемент в множестве• непустое множество, новый элементbool_t set_is_subset(const frozenset_t sub, const frozenset_t sup);11• set и sub пустые множества• set или sub пустое множество• sub не является подмножеством set• sub подмножество setbool_t set_is_equal(const frozenset_t set1, const frozenset_t set2);• оба пустые множества• одно из них пустое множество• передаётся одно и то же множество• множества равныВсе эти варианты покрывают выбранные ветви функциональности истроки исходного кода (за исключением неуспешных попыток выделенияпамяти).2.7.

Описание ошибок в реализации, которые были выявлены припомощи тестированияПри тестировании ошибок в реализации выявлено не было. Былвыявлен недостижимый код (на входе в этот цикл num_frames всегда равно0):/* if any bits (slots) are set then total will be non-zero *//*for(; num_frames--; ++frame) {total += *frame;}*/123. Верификация алгоритмаНа втором этапе верифицировалась только функция set_iter(). Былаперенесена в отдельный файл из-за возникавших у компилятора ошибокненахождения стандартных функций (несмотря на то, что необходимыйфайл .h подключался). Такое допущение возможно в силу того, что вфункции set_iter отсутствуют вызовы других функций исходного кода.3.1.

Описание спецификации требований в синтаксисе ACSL/*@requires \valid(set)@&&set->num_framesMIN_NUM_SLOTS_PER_SET / NUM_SLOTS_PER_FRAME>=@&& \valid((set_coord_t*) res + (0..set->num_frames *NUM_SLOTS_PER_FRAME))@&& \valid(set->frames + (0..set->num_frames - 1))@&& set->num_frames < MAX_FRAMES_ON_STACK@;@ensures \old(set) == set;@ensures 0 <=NUM_SLOTS_PER_FRAME;\result<=MAX_FRAMES_ON_STACK*@ensures \forall integer i; 0 <= i < \result ==> (set>frames[get_frame(res[i])] & (1 << (NUM_SLOTS_PER_FRAME get_slot(res[i]) - 1))) != 0;@ensures \forall integer j; (0 <= j < (set->num_frames *NUM_SLOTS_PER_FRAME) && (\forall integer i; 0 <= i < \result ==>(res[i]!=j)))==>(set->frames[get_frame(j)]&(1<<(NUM_SLOTS_PER_FRAME - get_slot(j) - 1))) == 0;@*/13На вход передаётся множество, возможно пустое, но под множествообязательно выделена память, размеры его (исходя из реализации висходном коде) ограничены.В постусловиях мы гарантируем, что• исходное множество не изменится;• функция вернёт число, ограниченное максимально возможнойразмерностью исходного множества;• в массив res запишутся координаты, по которым в исходноммассиве находятся ненулевые элементы;• все остальные элементы – нулевые.В первой спецификации мы проверяли корректность работы функцийна уровне результата.

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5232
Авторов
на СтудИзбе
424
Средний доход
с одного платного файла
Обучение Подробнее