ИНФОРМАЦИОННЫЕ системы. Массивы и списки. Тестирование и отладка программы.
Никитин М.Е., преподаватель профессиональных модулей высшей категории
ДЕПАРТАМЕНТ ОБРАЗОВАНИЯ ГОРОДА МОСКВЫГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ГОРОДА МОСКВЫ «Политехнический колледж имени П.А. Овчинникова»
3
Массивы и списки
Массив (индексный массив) – набор однотипных компонентов (элементов), расположенных в памяти непосредственно друг за другом, доступ к которым осуществляется по индексу (индексам).
Размерность массива – количество индексов, необходимое для однозначного доступа к элементу массива.
© https://znanio.ru/person/z98576333
5
Массивы и списки
Достоинства массивов:
лёгкость вычисления адреса элемента по его индексу
одинаковое время доступа ко всем элементам
малый размер элементов: они состоят только из информационного поля
Недостатки массивов:
для статического массива — отсутствие динамики, невозможность удаления или добавления элемента без сдвига других
для динамического и/или гетерогенного массива — более низкое (по сравнению с обычным статическим) быстродействие и дополнительные накладные расходы на поддержку динамических свойств и/или гетерогенности.
при работе с массивом в стиле C (с указателями) и при отсутствии дополнительных средств контроля — угроза выхода за границы массива и повреждения данных
© https://znanio.ru/person/z98576333
6
Массивы и списки
Динамические массивы – массивы с возможностью изменения размера
1. Выделить память нового размера
2. Скопировать старые данные в новую область
3. Объявить новую память «старым» массивом
4. Освободить старую память
Гетерогенные массивы – массивы с возможностью хранения разнотипных данных (реализовано не во всех ЯП)
© https://znanio.ru/person/z98576333
10
Массивы и списки
Ассоциативный массив (словарь) — абстрактный тип данных, позволяющий хранить пары вида (ключ, значение) и поддерживающий операции insert, find, remove
C++:
string name, phone;
map< string, string > book;
cin >> name >> phone;
book[ name ] = phone;
© https://znanio.ru/person/z98576333
11
Массивы и списки
Возвращаясь к динамическим спискам… Каким образом должен возрастать размер буфера?
Начальные условия:
Изначальный размер – 1 байт
Буфер растёт по 1 байту до тех пор, пока не достигнет размера 1 МиБ.
Каков суммарный объём памяти был задействован?
1 + 2 + 3 + … + 1,048,575 + 1,048,576 = 549,756,338,176 байт = 512 ГБайт
© https://znanio.ru/person/z98576333
12
Массивы и списки
Экспоненциальный рост:
Коэф. = 1.5
1 + 2 + 3 + 5 + 8 + 12 + 18 + 27 + … + 466608 + 699912 + 1049868 = 3 149 587 байт = 3 Мбайт
Коэф. = 2
1 + 2 + 4 + 8 + 16 + 32 + … + 262144 + 524288 + 1048576 = 2 097 151 байт = 2 МБайт
© https://znanio.ru/person/z98576333
17
Тестирование и отладка программ
Аксиома 1
Тестирование проводится для того, чтобы найти ошибки, а не показать работоспособность программы
Хорош тот тест, для которого высока вероятность обнаружить ошибку, а не тот, который демонстрирует правильную работу программы
Тестирование может доказать, что дефекты в программном обеспечении существуют, но если дефектов не найдено, это не дает гарантии, что их нет.
© https://znanio.ru/person/z98576333
18
Тестирование и отладка программ
Аксиома 2
Наилучшее решение проблемы надежности – не допускать ошибок в программе
Роль тестирования – определить местонахождение немногочисленных ошибок, оставшихся в хорошо спроектированной программе.
Попытки с помощью тестирования достичь надежности плохо спроектированной программы безнадежны.
© https://znanio.ru/person/z98576333
26
Тестирование и отладка программ
Хорошая привычка
Парадокс пестицида
Если один и тот же тестовый модуль многократно применять к той же системе, он в конечном счете перестанет находить ошибки.
Тестовый модуль должен постоянно и систематически корректироваться, а новые тесты должны охватывать все составляющие программного обеспечения
© https://znanio.ru/person/z98576333
28
Тестирование и отладка программ
Как это на практике?
Тестирование «один из группы»
Положительные, отрицательные, нулевые, различные пары…
Тестирование граничных условий
2я лр – какое последнее слагаемое?
Массивы
все, ни одного, разные
выход за границы массива
Циклы
Ни разу, один раз, максимум, промежуточное количество
Тестирование ветвей кода
Черный и белый ящик (+серый ящик)
Тестирование особых случаев («13й этаж»)
Случайное тестирование
Регрессионное тестирование
© https://znanio.ru/person/z98576333
© ООО «Знанио»
С вами с 2009 года.