Назовите цель разбиения исходных данных программ на классы эквивалентности. Приведите пример выделения классов эквивалентности для какойлибо задачи
Скачать 1.01 Mb.
|
14.Дайте определение технологии программирования. Какие технологии Вы знаете и к каким периодам относится появление этих технологий? Технологии программирования – это совокупность методов и средств, используемых в процессах создания, сопровождения и применения программного продукта. CASE-системами или CASE-технологиями называют реализованные в виде программных продуктов технологические системы, ориентированные на создание сложных программных систем и поддержку их полного жизненного цикла или его основных этапов. 15. Дайте определение объектно-ориентированного программирования (ООП). Назовите и охарактеризуйте основные свойства ООП. Обьектно–ориентированное программирование - это подход, в котором данные и поведение (методы обработки данных) жестко связаны. Данные и поведение представлены в виде классов, экземпляры которых - объекты. ООП позволяет пользователю вводить собственные типы данных, расширяя тем самым набор встроенных в язык типов данных. Для обозначения этих расширений используется термин абстрактные типы данных (АТД). Основными свойствами ООП являются инкапсуляция, наследование и полиморфизм. Под инкапсуляцией понимается сокрытие данных и операций АТД от внешних программ, использующих их. Наследование - это средство получения новых типов данных (классов) из уже существующих типов, называемых базовыми классами. При этом повторно используется существующий код. Порождённый класс образуется из базового путем добавления или изменения кода. Полиморфизм - средство для придания различных значений одному и тому же сообщению в зависимости от типа обрабатываемых данных. Например, если аргументы оператора целого типа, то используется целочисленное деление. Если же один или оба аргумента - значения с плавающей точкой, то используется деление с плавающей точкой. 16. Блочно-иерархический подход к созданию программных систем. В природе существуют иерархии “целое-часть”, “простое-сложное” (иерархия развития систем в процессе эволюции). В этой иерархии любая функционирующая система является результатом развития более простой системы. Именно данный вид иерархии реализуется механизмом наследования объектно-ориентированного программирования. Будучи в значительной степени отражением природных и технических систем, программные системы обычно являются иерархическими, т.е. обладают описанными выше свойствами. На этих свойствах иерархических систем строится блочно-иерархический подход. Этот подход предполагает сначала создание частей таких объектов, а затем “сборку” из них самого объекта. 17. Проблемы разработки сложных программных систем. Большинство современных программных систем объективно очень сложны. Эта сложность обуславливается многими причинами, главной из которых является логическая сложность решаемых ими задач. Пока вычислительных установок было мало и ид. возможности были ограничены, ЭВМ применяли в очень узких областях науки и техники, причем, в первую очередь, там, где решаемые Задачи были хорошо детерминированы и требовали значительных вычислений. В наше время, когда созданы мощные компьютерные сети, появилась возможность переложить на них решение сложных ресурсоемких задач, о компьютеризации которых раньше никто я не думал. Сейчас в процесс компьютеризации вовлекаются совершенно новые предметные области, а для уже освоенных областей усложняются уже сложившиеся постановки задач. Дополнительными факторами, увеличивающими сложность разработки программных систем, являются: • сложность формального определения требований к программным системам; • отсутствие удовлетворительных средств описания поведения дискретных систем с большим числом состояний при недетерминированной последовательности входных воздействий; • коллективная разработка; • необходимость увеличения степени повторяемости кодов. 18. Дайте определение модели жизненного цикла (ЖЦ) программного продукта (ПП). Каскадная модель ЖЦ ПП. Область применения, достоинства и недостатки. ЖЦ представляет собой непрерывный процесс, продолжающийся достаточно длительное время от момента принятия решения о создании информационной системы и заканчивая моментом изъятия ее из эксплуатации. В этом временном промежутке выделяют фазы, стадии, этапы. Моделью жизненного цикла программной системы называют структуру, определяющую последовательность осуществления процессов, действий и задач, выполняемых на протяжении ЖЦ ПП, а также взаимодействие между этими процессами, действиями и задачами. Традиционная модель ЖЦ ПО строится по каскадному принципу, суть которого в том, что переход на следующий этап происходит после окончания предыдущего. Каскадная модель получили еще и другое название “водопад”. Эта модель имеет ряд положительных качеств, благодаря которым она хорошо себя зарекомендовала и получила широкое распространение:
Каскадная модель хорошо зарекомендовала себя при разработке систем обработки информации, для которых на этапе анализа можно достаточно точно и полно сформулировать все требования. К ним можно отнести сложные расчетные программные комплексы и системы реального времени. Перечень недостатков каскадной модели более обширен, чем перечень ее достоинств:
19. Этапы жизненного цикла (ЖЦ) программных продуктов (ПП). Схема ЖЦ ПП. 20. Функциональное и структурное тестирование программ: цели, отличия стратегий, рекомендации по применению. Структурное тестирование (белого ящика) применяют на ранних стадиях кодирования и тестирования для выявления и устранения в основном алгоритмических ошибок. Функциональное тестирование (черного ящика) применяют на более поздних стадиях тестирования для выявления и устранения ошибок интерфейса, а также некорректных и отсутствующих функций обработки данных. 21. Этапы тестирования программ. Стадии тестирования в процессе разработки программного обеспечения. Методы, используемые на каждой стадии. В тестирование входят следующие этапы: а) постановка задачи для теста, б) проектирование теста, в) написание тестов, г) тестирование тестов, д) выполнение тестов, е) изучение результатов тестирования. Стадии: 1) автономное тестирование компонентов программного обеспечения (методы ручного контроля, покрытия операторов, покрытия решений, покрытия условий, комбинаторного покрытия). 2) комплексное тестирование разрабатываемых программ (восходящее и нисходящее тестирование). 3) системное или оценочное тестирование на соответствие основным критериям качества. 22. Ручной контроль как метод тестирования. Ручной контроль используют на ранних этапах разработки. Различают статический и динамический подходы к ручному контролю. При статическом подходе анализируют структуру, управляющие и информационные связи программы, ее входные и выходные данные. При динамическом подходе выполняют ручное тестирование, т.е. вручную моделируют процесс выполнения программы на заданных исходных данных. Исходными данными для таких проверок являются: тех. задание, спецификация, структурная и функциональная схемы программного продукта, схемы отдельных компонентов, а на более поздних этапах – алгоритмы и тексты программ, а также тестовые наборы данных. 23. Методы структурного тестирования. Общий недостаток методов. 1 - метод покрытия решений (переходов), 2 - метод покрытия операторов, 3 - метод покрытия условий, 4 - метод комбинаторного покрытия условий. Применяются при тестировании логики программного модуля. Для применения этих методов на практике структура программы должна быть известной. 24. Методы функционального тестирования. Области применения - метод эквивалентного разбиения - метод анализа граничных значений - метод таблиц решений - метод функциональных диаграмм Есть много приложений, для которых производительность и удобство пользования некритичны. Во всяком случае, часто требования к ПО содержат только функциональную часть. И практически не бывает требований к ПО без функциональной части. Отсюда делаем вывод, что функциональное тестирование проводить нужно для любого ПО. 25. Основные положения метода эквивалентного разбиения а) каждый тест должен включать столько различных входных условий, сколько это возможно, с тем чтобы минимизировать общее число тестов б) необходимо пытаться разбить входную область программы на конечное число классов эквивалентности так, чтобы можно было предположить, что каждый тест, являющийся представителем некоторого класса, эквивалентен любому другому тесту этого класса. Другими словами, если один тест класса эквивалентности обнаруживает ошибку, то следует ожидать, что и все другие тесты этого класса эквивалентности будут обнаруживать эту ошибку. И наоборот, если тест не обнаруживает ошибки, то следует ожидать, что ни один тест этого класса эквивалентности не будет обнаруживать ошибки. 26. Основные положения метода граничных значений Определение: граничные условия это ситуации, возникающие непосредственно на, выше или ниже границ входных и выходных классов эквивалентности. Анализ граничных значений отличается от эквивалентного разбиения в двух отношениях: - выбор любого элемента в классе эквивалентности в качестве представительного при анализе граничных значений осуществляется таким образом, чтобы проверить тестом каждую границу этого класса. - при разработке тестов рассматривают не только входные условия (пространство входов), но и пространство результатов, то есть выходные классы эквивалентности. 27. Пошаговое тестирование модульных программ. Достоинства и недостатки подходов Методика восходящего тестирования включает следующие щаги: Сначала тестируются ‘листья’ дерева структуры программы, т.е. модули Е,C,F. Поскольку это вызываемые программы, то для их тестирования программируются драйверы. В его функции входит формирование тестовых данных для отлаживаемого модуля и передача ему управления (вызов модуля). Затем аналогично тестируются модули вышележащего уровня совместно с уже оттестированными модулями нижележащего уровня. Применительно к рассматриваемому нами примеру проектируются драйверы для тестирования пар B-E и D-F. Пошаговый процесс продолжается до тех пор, пока не будет включен в процесс тестирования последний модуль. Для нашего примера это будет модуль А. Для его тестирования совместно с вызываемыми программами нижележащего уровня драйвер разрабатывать не требуется. Альтернативное нисходящее тестирование состоит из следующих действий: Тестирование начинается с вызывающего модуля программы. Для модулей нижележащего уровня (вызываемых) программируются так называемые ‘заглушки’. После проверки ‘корня’ дерева структуры комплексной программы переходят к тестированию нижележащих модулей. Причем, формализованной процедуры подключения к вызывающему модулю нижележащих вызываемых модулей не существует. Единственное ограничение, которым руководствуются при выборе очередного претендента на тестирование, заключается в том, что этот модуль должен вызываться уже оттестированным модулем вышележащего уровня. Если очередной тестируемый модуль вызывает модули еще нижележащего уровня, то аналогично пункту а) для нижележащих модулей программируются ‘заглушки’ Процесс тестирования продолжается до тех пор, пока не будет оттестирован последний модуль из ‘листьев’ дерева структуры программы. 28. Классификация и проявление ошибок программирования Виды ошибок. Ошибки анализа. Связаны либо с неполным учетом ситуации, которые могут возникнуть, либо с неверным решением задачи. К 1 случаю относятся, например, пренебрежение возможностью появления отрицательных значений переменных, малых и больших величин. Во 2 случае обычно имеют место крупные и мелкие логические ошибки, из которых можно назвать:
Ошибки общего характера. После того, как найден подходящий алгоритм решения задачи, на этапе программирования также могут появиться ошибки, независимо от выбранного языка. Такими ошибками могут быть:
Ошибки физического характера. Можно назвать несколько типов ошибок, вызываемых неверными действиями программиста:
Большое значение для успешной отладки программы имеют простота и рациональность ее кодирования. Когда программа написана аккуратно и логично, легче избежать ошибок или выявить их в случае возникновения. Следует избегать возможных программистских трюков, т.к. чем их больше, тем труднее отладка программы для самого автора, а кто-то другой этого сделать просто не сможет. Правильность программ. Любые программы - правильные в отношении их логического построения только для определенного типа данных, поэтому необходимо четко определить область значений данных, в которой программа способна функционировать. Необходимо вводить операторы, позволяющие проверить, находятся ли данные в установленных границах. Нарушение правильности может проявляться двумя способами:
Правильность синтаксиса означает, что должны быть точно сформированы наименования переменных; арифметические и логические операции должны подчиняться определенным синтаксическим правилам и т.п. Синтаксические ошибки. Выявление транслятором синтаксических ошибок представляет собой самый важный и необходимый этап отладки программы. Если под синтаксической ошибкой понимать "всякое нарушение требований языка программирования", то следует признать, что многие ошибки остаются необнаруженными. В качестве примеров синтаксических ошибок можно назвать:
Примерами синтаксических ошибок, охватывающих взаимодействие двух или более операторов, могут служить:
Неопределенные переменные. Распространенными источниками программных ошибок являются неопределенные переменные и переменные, для которых не заданы начальные значения. Определение начальных значений:
Разные прогоны программы с одними и теми же данными могут привести к различным результатам. 29. Методы отладки программ. 1) метод индукции; 2) метод дедукции. Название методов напоминают о криминалистике и не напрасно, ибо есть аналогия между этими методами и расследованием преступления. Метод индукции включает: 1) определение данных тестирования, имеющих отношение к ошибке; 2) анализ от частного к общему позволит выявить закономерности в данных пункта 1); 3) в результате анализа (п.2) выдвигается гипотеза о причине ошибки; 4) для подтверждения гипотезы 3 разрабатывается один или больше тестов, которые должны либо подтвердить, либо опровергнуть гипотезу; если дополнительные тесты подтверждают гипотезу, можно приступать к исправлению ошибки, а вот если не подтверждают, то требуется в лучшем случае возврат к п.3, а в худшем - к п.2. Альтернативный метод дедукции заключается в: 1) перечисление возможных причин или гипотез: 2) использование данных тестирования для исключения некоторых возможных причин; 3) уточнение выбранной наиболее вероятной гипотезы, возможно с использованием дополнительных тестов: 4) доказательство выбранной гипотезы совпадает с п.4 и п.5 метода индукции. |