Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 63915
Модуль Forms 63638
ТЕХНОЛОГИИ ДОСТ... 60492
Пример работы с... 59894
Имитационное мо... 55961
Реклама
Сейчас на сайте
Гостей: 7
На сайте нет зарегистрированных пользователей

Пользователей: 13,079
новичок: Openair
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование ЭВМ на GPSS (три класса заданий) + Пояснительная записка
База данных междугородних телефонных разговоров на Delphi
Моделирование вычислительного центра на GPSS + Отчет + Блок схема

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Программирование класса binary_search: поиск предположений, которые не выполняются
Спецификация класса binary_search ясно указывает на то, что последовательность, в которой выполняется поиск, должна быть упорядоченной. Это не позволяет нам создавать многие изощренные модульные тесты.

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

Также вам может показаться, что такая тема как
http://rosavtoportal.ru/ никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт rosavtoportal.ru
Тема новые российские автомобили там представлена весьма широко.


Можем ли мы использовать свое знание системных модулей (функций, классов и т.п.) для того, чтобы изобрести более хорошие тесты?
К сожалению, нет.
Поскольку мы являемся тестировщиками, мы не можем изменять код, а для того чтобы выявить нарушение требований интерфейса (предусловий), их надо проверять либо перед каждым вызовом, либо сделать частью реализации каждого вызова.


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

Рассмотрим функцию binary_search еще раз: мы не можем проверить, что входная последовательность [first:last) действительно является последовательностью и что она была упорядочена (см. раздел 26.3.2.2). Однако можем написать функцию, которая выполняет эту проверку.
template
bool b2(Iter first, Iter last, const T& value)
{
// проверяем, является ли диапазон [first:last)
// последовательностью: if (last // проверяем, является ли последовательность упорядоченной: for (Iter p = first+1; p if (*p<*(p-1)) throw Not_ordered();
// все хорошо, вызываем функцию binary_search: return binary_search(first,last,value);
}
Перечислим причины, по которым функция binary_search не содержала таких проверок.
• Условие last < first нельзя проверить для однонаправленного итератора; например, итератор контейнера std::list не имеет оператора < (раздел Б.3.2). В общем, на самом деле хорошего способа проверки того, что пара итераторов определяет последовательность, не существует (начинать перемещение с итератора first, надеясь достигнуть итератора last, — не самая хорошая идея).


• Просмотр последовательности для проверки того, что ее значения упорядочены, является более затратным, чем выполнение самой функции binary_ search (действительная цель выполнения функции binary_search заключается не в слепом блуждании по последовательности в поисках значения, как это делает функция std::find).
Что же мы могли бы сделать? Мы могли бы при тестировании заменить функцию binary_search функцией b2 (впрочем, только для вызовов функции bi- nary_search с помощью итераторов произвольного доступа). В качестве альтернативы мы могли бы взять у разработчика функции binary_search ее код, чтобы вставить в нее свой фрагмент.
template // предупреждение:
// содержит псевдокод bool binary_search (Iter first, Iter last, const T& value)
{
if (тест включен) {
if (Iter является итератором произвольного доступа) {
// проверяем, является ли [first:last)
// последовательностью: if (last }
// проверяем, является ли последовательность // упорядоченной: if (first!=last) {
Iter prev = first;
for (Iter p = ++first; p!=last; ++p, ++ prev) if (*p<*prev) throw Not_ordered();
}
}
// теперь выполняем функцию binary_search
}


Поскольку смысл условия тест включен зависит от способа организации тестирования (для конкретной системы в конкретной организации), можем оставить его в виде псевдокода: при тестировании своего собственного кода можете просто использовать переменную test_enabled. Мы также оставили условие Iter является итератором произвольного доступа в виде псевдокода, поскольку не хотели объяснять свойства итератора. Если вам действительно необходим такой тест, посмотрите тему свойства итераторов (iterator traits) в более подробном учебнике по языку С++.
Опубликовал katy April 27 2015 16:28:20 · 0 Комментариев · 1413 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Дешифратор содерж...
Философия C++. Пр...
Exe in exe
Tag Игра "Пятнашк...
Billenium Effects...
IpEditAdress
Панель "Случайное...
JanButtonsV
Пример работы с б...
Программирование ...
Error mod
Мод "register.php...
База Allsubmitter...
Учебник по создан...
39 статьи по Delphi
Task Shedule
Иллюстрированный ...
DFileDeleter
Распознавание иде...
Простой пример ка...

Топ загрузок
Приложение Клие... 100449
Delphi 7 Enterp... 85834
Converter AMR<-... 20067
GPSS World Stud... 12518
Borland C++Buil... 11578
Borland Delphi ... 8504
Turbo Pascal fo... 7023
Visual Studio 2... 4989
Калькулятор [Ис... 4739
FreeSMS v1.3.1 3536
Случайные статьи
Когда вы успешно п...
Порядок выполнения...
Перегрузка функций...
3. Можно ли примен...
Создание модуля с ...
Язык С и С ++: дос...
Форматы цифрового ...
Выявление и компен...
Когда начинать обс...
Машины VAX-11 и пр...
Ввод массива
Основы сетевой рек...
Блок QUEUE
Область применения...
Users And Computer...
Динамическая памят...
Циклический код по...
Описание игры в иг...
Взаимосвязь станда...
Как раскрутить спе...
Заключение
Списки в Прологе
Особенности органи...
Настройте пакетные...
HR. Старайтесь исп...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?