Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций (рус) v1.1.doc
Скачиваний:
11
Добавлен:
14.04.2019
Размер:
449.02 Кб
Скачать

5. Итерация

Методики можно эффективно комбинировать, поэтому даже после обнаружения одного удачного вида оптимизации продолжайте пробовать другие виды.

6. Подход к оптимизации кода: резюме

Рассматривая целесообразность оптимизации кода, придерживайтесь следующего алгоритма:

  1. Напишите хороший и понятный код, поддающийся легкому изменению.

  2. Если производительность вас не устраивает:

    1. сохраните работоспособную версию кода, чтобы позднее вы могли вернуться к «последнему нормальному состоянию»;

    2. оцените производительность системы с целью нахождения горячих точек;

    3. узнайте, обусловлено ли плохое быстродействие неадекватным проектом, неверными типами данных или неудачными алгоритмами и определите, уместна ли оптимизация кода; если оптимизация кода неуместна, вернитесь к п. 1;

  3. d оптимизируйте узкое место, определенное на этапе (с);

    1. оцените каждое улучшение по одному за раз;

    2. если оптимизация не привела к улучшению кода, вернитесь к коду, сохраненному на этапе (а).

  4. Повторите процесс, начиная с п. 2.

Лекция 13-15 «Тестирование»

1. Философия тестирования

1.1. Определение термина «тестирование»

Тестирование – это процесс исполнения программы с целью обнаружения ошибок.

1.2. Экономика тестирования

Нельзя создать тест, гарантирующий отсутствие ошибок.

1.3. Принципы тестирования

Описание предполагаемых результатов должно быть необходимой частью тестового набора.

Следует избегать тестирования программы ее автором.

Программирующая организация не должна сама тестировать разработанные ею программы.

Необходимо досконально изучать результаты применения каждого теста.

Тесты для неправильных и непредусмотренных входных данных следует разрабатывать так же тщательно, как для правильных и предусмотренных.

Необходимо проверять не только, делает ли программа то, для чего она предназначена, но и не делает ли она то, что не должна делать.

Нельзя планировать тестирование в предположении, что ошибки не будут обнаружены.

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

Тестирование — процесс творческий.

2. Типы ошибок и ручные методы тестирования

2.1. Классификация ошибок

По времени появления ошибки можно разделить на:

Структурные ошибки.

Ошибки компиляции.

Ошибки периода выполнения.

По степени нарушения логики на:

Синтаксические ошибки.

Семантические ошибки.

Прагматические ошибки.

Ошибка адресации.

Ошибка ввода-вывода.

Ошибка вычисления.

Ошибка интерфейса.

Ошибка обращения к данным.

Ошибка описания данных.

2.2. Первичное выявление ошибок

Ручное тестирование – первичное обнаружение ошибок.

2.3. Инспекции и сквозные просмотры

Инспекции исходного текста и сквозные просмотры являются основными методами ручного тестирования.

2.3.1. Инспекции исходного текста

Инспекции исходного текста представляют собой набор процедур и приемов обнаружения ошибок при изучении (чтении) текста группой специалистов.

2.3.2. Сквозные просмотры

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

2.3.3. Проверка за столом

Проверка за столом рассматривается как проверка исходного текста или сквозные просмотры, осуществляемые одним человеком, который читает текст программы, проверяет его по списку ошибок и (или) пропускает через программу тестовые данные.

3. Стратегии тестирования белого и черного ящика

Стратегии черного ящика:

  • эквивалентное разбиение;

  • анализ граничных значений;

  • применение функциональных диаграмм;

  • предположение об ошибке.

Стратегии белого ящика:

  • покрытие операторов;

  • покрытие решений;

  • покрытие условий;

  • покрытие решений/условий.

3.1. Тестирование путем покрытия логики программы

3.1.1. Покрытие операторов

Можно показать, что критерием покрытия является выполнение каждого оператора программы, по крайней мере, один раз.

3.1.2. Покрытие решений

Каждое решение на этих тестах примет значение истина и ложь по крайней мере один раз.

3.1.3. Покрытие условий

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

3.1.4. Покрытие решений/условий

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

3.1.5. Комбинаторное покрытие условий

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

3.2. Стратегии черного ящика

3.2.1. Эквивалентное разбиение

Правильно выбранный тест этого подмножества должен обладать двумя свойствами:

    1. уменьшать, причем более чем на единицу, число других тестов, которые должны быть разработаны для достижения заранее определенной цели «приемлемого» тестирования;

    2. покрывать значительную часть других возможных тестов.

Разработка тестов этим методом осуществляется в два этапа:

3.2.1.1. Выделение классов эквивалентности

3.2.1.2. Построение тестов

Этот процесс включает в себя:

  1. Назначение каждому классу эквивалентности уникального номера.

  2. Проектирование новых тестов, каждый из которых покрывает как можно большее число непокрытых правильных классов эквивалентности, до тех пор пока все правильные классы эквивалентности не будут покрыты (только не общими) тестами.

  3. Запись тестов, каждый из которых покрывает один и только один из непокрытых неправильных классов эквивалентности, до тех пор, пока все неправильные классы эквивалентности не будут покрыты тестами.