МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Тестирование программного обеспечения

    модулю, который она пытается моделировать.

    Интересен и второй вопрос: в какой форме готовятся тестовые данные и

    как они передаются программе? Если бы головной модуль содержал все нужные

    операции ввода и вывода, ответ был бы прост:

    Тесты пишутся в виде обычных для пользователей внешних данных и

    передаются программе через выделенные ей устройства ввода. Так, однако,

    случается редко. В хорошо спроектированной программе физические операции

    ввода-вывода выполняются на нижних уровнях структуры, поскольку физический

    ввод-вывод — абстракция довольно низкого уровня. Поэтому для того, чтобы

    решить проблему экономически эффективно, модули добавляются не в строго

    нисходящей последовательности (все модули одного горизонтального уровня,

    затем модули следующего уровня), а таким образом, чтобы обеспечить

    функционирование операций физического ввода-вывода как можно быстрее. Когда

    эта цель достигнута, нисходящее тестирование получает значительное

    преимущество: все дальнейшие тесты готовятся в той же форме, которая

    рассчитана на пользователя.

    Остается еще один вопрос: в какой форме пишутся тесты до тех пор, пока

    не будет достигнута эта цель? Ответ: они включаются в некоторые из

    заглушек.

    Нисходящий метод имеет как достоинства, так и недостатки по сравнению

    с восходящим. Самое значительное достоинство — в том, что этот метод

    совмещает тестирование модуля, тестирование сопряжении и частично

    тестирование внешних функций. С этим же связано другое его достоинство —

    когда модули ввода-вывода уже подключены, тесты можно готовить в удобном

    виде. Нисходящий подход выгоден также в том случае, когда есть сомнения

    относительно осуществимости программы в целом или если в проекте программы

    могут оказаться серьезные дефекты.

    Преимуществом нисходящего подхода очень часто считают отсутствие

    необходимости в драйверах; вместо драйверов вам просто следует написать

    «заглушки». Как читатель сейчас уже, вероятно, понимает, это преимущество

    спорно.

    Нисходящий метод тестирования имеет, к сожалению, некоторые

    недостатки. Основным из них является тот, что модуль редко тестируется

    досконально сразу после его подключения. Дело в том, что основательное

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

    заглушек. Программист часто решает не тратить массу времени на их

    программирование, а вместо этого пишет простые заглушки и проверяет лишь

    часть условий в модуле. Он, конечно, собирается вернуться и закончить

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

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

    условиях часто забывают.

    Второй тонкий недостаток нисходящего подхода состоит в том, что он

    может породить веру в возможность начать программирование и тестирование

    верхнего уровня программы до того, как вся программа будет полностью

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

    дело обстоит совсем наоборот. Большинство опытных проектировщиков признает,

    что проектирование программы — процесс итеративный. Редко первый проект

    оказывается совершенным. Нормальный стиль проектирования структуры

    программы предполагает по окончании проектирования нижних уровней вернуться

    назад и подправить верхний уровень, внеся в него некоторые

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

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

    Если же головная часть программы уже запрограммирована и оттестирована, то

    возникает серьезное сопротивление любым улучшениям ее структуры. В конечном

    итоге за счет таких улучшений обычно можно сэкономить больше, чем те

    несколько дней или недель, которые рассчитывает выиграть проектировщик,

    приступая к программированию слишком рано.

    5. МОДИФИЦИРОВАННЫЙ НИСХОДЯЩИЙ МЕТОД

    Нисходящий подход имеет еще один существенный недостаток, касающийся

    полноты тестирования. Предположим, что есть большая программа и где-то

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

    корней квадратного уравнения. Для заданных входных переменных А, В и С он

    решает уравнение [pic].

    При проектировании и программировании модуля с такой функцией всегда

    следует понимать, что квадратное уравнение может иметь как действительные,

    так и комплексные корни. Для полной реализации этой функции необходимо,

    чтобы результаты могли быть действительными или комплексными числами (или,

    если дополнительные затраты на нахождение комплексных корней не оправданы,

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

    коэффициенты задают уравнение с комплексными корнями). Предположим, что

    конкретный контекст, в котором используется модуль, исключает комплексные

    корни (т. е. вызывающие модули никогда не задают входных параметров,

    которые привели бы к комплексным корням). При строго нисходящем методе

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

    (или тестировать ошибочные условия). Можно попытаться оправдывать это тем,

    что, поскольку такое уравнение никогда не будет дано модулю, никого не

    должно заботить, работает ли он и в этих случаях. Да, это безразлично

    сейчас, но окажется важным в будущем, когда кто-то попытается использовать

    модуль в новой программе или модифицировать старую программу так, что

    станут возможными и комплексные корни.

    Эта проблема проявляется в разнообразных формах. Применяя нисходящее

    тестирование в точном соответствии с предыдущим разделом, часто невозможно

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

    или защитные проверки. Нисходящий метод, кроме того, делает сложной или

    вообще невозможной проверку исключительных ситуаций в некотором модуле,

    если программа работает с ним лишь в ограниченном контексте (это означает,

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

    Даже если тестирование такой ситуации в принципе осуществимо, часто бывает

    трудно определить, какие именно нужны тесты, если они вводятся в точке

    программы, удаленной от места проверки соответствующего условия.

    Метод, называемый модифицированным нисходящим подходом, решает эти

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

    перед подключением к программе. Хотя это действительно решает все

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

    модуля.

    6. МЕТОД БОЛЬШОГО СКАЧКА.

    Вероятно, самый распространенный подход к интеграции модулей — метод

    «большого скачка». В соответствии с этим методом каждый модуль тестируется

    автономно. По окончании тестирования модулей они интегрируются в систему

    все сразу.

    Метод большого скачка по сравнению с другими подходами имеет много

    недостатков и мало достоинств. Заглушки и драйверы необходимы для каждого

    модуля. Модули не интегрируются до самого последнего момента, а это

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

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

    отладку.

    И все же большой скачок не всегда нежелателен. Если программа мала и

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

    программ метод большого скачка обычно губителен.

    7. МЕТОД САНДВИЧА

    Тестирование методом сандвича представляет собой компромисс между

    восходящим и нисходящим подходами. Здесь делается попытка воспользоваться

    достоинствами обоих методов, избежав их недостатков.

    При использовании этого метода одновременно начинают восходящее и

    нисходящее тестирование, собирая программу как снизу, так и сверху и

    встречаясь в конце концов где-то в середине. Точка встречи зависит от

    конкретной тестируемой программы и должна быть заранее определена при

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

    систему в виде уровня прикладных модулей, затем уровня модулей обработки

    запросов, затем уровня примитивных функций, то он может решить применять

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

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

    метод.

    Применение метода сандвича - это разумный подход к интеграции больших

    программ, таких, как операционная система или пакет прикладных программ.

    Метод сандвича сохраняет такое достоинство нисходящего и восходящего

    подходов, как начало интеграции системы на самом раннем этапе. Поскольку

    вершина программы вступает в строй рано, мы, как в нисходящем методе, уже

    на раннем этапе получаем работающий каркас программы. Поскольку нижние

    уровни программы создаются восходящим методом, снимаются те проблемы

    нисходящего метода, которые были связаны с невозможностью тестировать

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

    8. МОДИФИЦИРОВАННЫЙ МЕТОД САНДВИЧА.

    При тестировании методом сандвича возникает та же проблема, что и при

    нисходящем подходе, хотя здесь она стоит не так остро. Проблема эта в том,

    что невозможно досконально тестировать отдельные модули. Восходящий этап

    тестирования по методу сандвича решает эту проблему для модулей нижних

    уровней, но она может по-прежнему оставаться открытой для нижней половины

    верхней части программы. В модифицированном методе сандвича нижние уровни

    также тестируются строго снизу вверх. А модули верхних уровней сначала

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

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

    компромисс между восходящим и нисходящим подходами.

    9. СРАВНИТЕЛЬНАЯ ХАРАКТЕРИСТИКА МЕТОДОВ ТЕСТИРОВАНИЯ.

    С точки зрения надежности программного обеспечения эти стратегии можно

    оценить по восьми критериям, как показано на рис. 10.7. Первый критерий —

    время до момента сборки модулей, поскольку это важно для обнаружения ошибок

    в сопряжениях и предположениях модулей о свойствах друг друга. Второй

    критерий — время до момента создания первых работающих «скелетных» версий

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

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

    драйверы и другие инструменты тестирования. Пятый критерий—мера

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

    Это интересный вопрос, поскольку необходимость в ресурсах (т. е.

    программистах) обычно достигает пика на этапах проектирования и

    программирования модулей.

    | |Восходящ|Нисходящ|Модифицир|Метод |Метод |Модифици|

    | |ий |ий |ованный |большог|сандвич|рованный|

    | | | |нисходящи|о |а |метод |

    | | | |й |скачка | |сандвича|

    |Сборка |Рано |Рано |Рано |Поздно |Рано |Рано |

    |Время до |Поздно |Рано |Рано |Поздно |Рано |Рано |

    |появления | | | | | | |

    |работающего | | | | | | |

    |варианта | | | | | | |

    |программы | | | | | | |

    |Нужны ли |Да |Нет |Да |Да |Частичн|Да |

    |драйверы | | | | |о | |

    |(новые | | | | | | |

    |программы или| | | | | | |

    |готовые | | | | | | |

    |инструменты) | | | | | | |

    |? | | | | | | |

    |Нужны ли |Нет |Да |Да |Да |Частичн|Частично|

    |заглушки | | | | |о | |

    |Параллелизм в|Средний |Слабый |Средний |Высокий|Средний|Высокий |

    |начале работы| | | | | | |

    |Возможность |Легко |Трудно |Легко |Трудно |Средне |Легко |

    |тестировать | | | | | | |

    |отдельные | | | | | | |

    |пути | | | | | | |

    |Возможность |Легко |Трудно |Трудно |Легко |Трудно |Трудно |

    |планировать и| | | | | | |

    |контролироват| | | | | | |

    |ь | | | | | | |

    |последователь| | | | | | |

    |ность | | | | | | |

    Рис. 10.7. Количественная оценка подход к сборке.

    Поэтому важно, чтобы возможность параллельного тестирования появилась ближе

    к началу, а не концу цикла тестирования.

    Шестой критерий связан с ответом на обсуждавшийся ранее вопрос:

    возможно ли проверить любой конкретный путь и любое условие в программе?

    Седьмой критерий характеризует сложность планирования, надзора и управления

    в процессе тестирования. Это связано с осознанием того факта, что

    тестирование, которым трудно управлять, часто ведет к недосмотрам и

    упущениям. Время от времени раздаются возражения против нисходящего подхода

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

    прогонов головных модулей. Однако этот критерий отмечен как несущественный.

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

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

    несколько разные условия. Эти прогоны могут вскрыть новые ошибки, превращая

    таким образом недостаток в достоинство. Поскольку этот эффект недостаточно

    осознан, мы им пренебрегаем.

    Теперь оценим наши шесть подходов с помощью перечисленных восьми

    критериев. Как уже говорилось, такая оценка зависит от конкретного проекта.

    В качестве исходного приближения для выполнения ваших собственных оценок

    приведен вариант очень грубой оценки. Прежде всего следует взвесить

    относительное влияние каждого из восьми критериев на надежность

    программного обеспечения. Ранняя сборка и раннее получение работающего

    каркаса программы, а также возможность тестировать любые конкретные условия

    представляются наиболее важными, поэтому им дается коэффициент 3. Сложность

    подготовки заглушек, а также сложность планирования и управления

    последовательностью тестов также важны, поэтому они получают вес 2. Третий

    критерий, необходимость драйверов, вес 1 ввиду доступности общих

    инструментов тестирования. Критерий, связанный с параллелизмом работы,

    также имеет вес 1, потому что, хотя он, может быть, и важен по другим

    причинам, на надежность сильно не влияет. Восьмой критерий получает

    коэффициент нуль.

    На рис. 10.8 показаны результаты этой оценки. В каждой графе таблицы

    вес берется со знаком плюс или минус либо не учитывается, в зависимости от

    того, благоприятно, неблагоприятно или безразлично проявляется

    соответствующий фактор при рассматриваемом подходе. Модифицированный метод

    сандвича и восходящий метод оказываются наилучшими подходами, а метод

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

    конкретной ситуации, следует рекомендовать модифицированный метод сандвича

    для тестирования больших систем или программ и восходящий подход для

    тестирования программ малых и средних.

    |Ве| |Восход|Нисхо|Модифици|Метод|Метод |Модифиц|

    |с | |ящий |дящий|рованный|больш|сандви|ированн|

    | | | | |нисходящ|ого |ча |ый |

    | | | | |ий |скачк| |метод |

    | | | | | |а | |сандвич|

    | | | | | | | |а |

    |3 |Сборка |Рано |Рано |Рано |Поздн|Рано |Рано |

    | | |+ |+ |+ |о |+ |+ |

    | | | | | |- | | |

    |3 |Время до |Поздно|Рано |Рано |Поздн|Рано |Рано |

    | |появления |- |+ |+ |о |+ |+ |

    | |работающего | | | |- | | |

    | |варианта | | | | | | |

    | |программы | | | | | | |

    |1 |Нужны ли драйвера|Да |Нет |Д а |Да |Частич|Да |

    | |(новые программы |- |+ |- |- |но |- |

    | |u/uли готовые | | | | | | |

    | |инструменты) ? | | | | | | |

    |2 |Нужны заглушки? |Нет |Да |Да |Да |Частич|Частичн|

    | | |+ |- |- |- |но |о |

    |1 |Параллелизм в |Средни|Слабы|Средний |Высок|Средни|Высокий|

    | |начале работы |й |й- | |ий+ |й |+ |

    |3 |Возможность |Легко |Трудн|Легло |Легко|Средне|Легко |

    | |тестировать |+ |о - |+ |+ | |+ |

    | |отдельные пути | | | | | | |

    |2 |Возможность |Легко |Трудн|Трудно |Легко|Трудно|Трудно |

    | |планировать и |+ |о - |- |+ |- |- |

    | |контролировать | | | | | | |

    | |последовательност| | | | | | |

    | |ь | | | | | | |

    Страницы: 1, 2, 3, 4, 5


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.