
- •Типы данных
- •Переменные
- •Операции c#.
- •Линейная программа
- •Циклы с предусловием
- •Цикл с постусловием.
- •Исключения.
- •Двумерные массивы.
- •Символы и строки.
- •Деструктор.
- •Свойства
- •Конструктор класса – инициализирует поля. Индексатор.
- •Операции класса
- •Поля методы и свойства класса.
- •Виртуальные методы
- •Перегрузка методов.
- •Рекурсивные методы.
- •Interface (Интерфейсы)
- •Стандартные интерфейсы .Net
- •Клонирование объектов.
- •Абстрактный класс.
- •Бесплодные классы.
- •Класс Object.
- •Структуры
- •Структурное программирование.
- •Потоки файлов.
- •Потоки байтов
- •Потоки символов
- •Отладка программы.
- •Классификация ошибок
- •Методы отладки
- •Методика отладки по
- •Исправление ошибки.
- •Стадия разработки программ и программной документации.
- •Двоичные потоки
- •Тестирование программных продуктов.
- •Сериализация (сохранение объектов)
- •Структурный подход при проектировании программного обеспечения.
- •Объектно-ориентированное проектирование
- •Диаграммы вариантов использования
- •Составление программной документации
- •Руководство пользователя
- •Типы пользовательских интерфейсов и этапы их разработки
- •Этапы разработки пользовательского интерфейса
- •Модульное программирование
- •Сцепление модулей
- •Связность модулей
Двоичные потоки
Двоичные файлы, хранят данные в том же виде, в котором они представлены в оперативной памяти, т.е. во внутренней форме представления. Выходной поток BinaryWriter. т.е. имеется возможность выполнять запись в произвольную позицию, двоичного файла. Двоичный файл открывается на основе базового потока в качестве которого чаще всего FileStream. Наиболее важные элементы класса BinaryWriter.
BaseStream – базовый поток с которым работает объект BinaryWriter.
Close – закрыть
Flush – отчистить буфер
Seek – установить позицию, в текущем потоке
Write – записать значение в текущий поток
Наиболее важные элементы класса BinaryReader
BaseStream - базовый поток с которым работает объект BinaryReader.
Close – закрыть поток
PeekChar – возвратить следующий символ без перемещения внутреннего указателя в потоке
Read – считать поток байтов или символов и сохранить в массиве передаваемом как входной параметр
ReadXXXX – считать из потока данные определенного типа
ReadBoolean, ReadInt32.
При создании базового потока в него передается объект базового потока. В указателе текущей позиции в файле учитывается длина значения определенного типа.
Тестирование программных продуктов.
Тестирование это процесс выполнения программы, целью которого является выявление ошибок. Никакое тестирование не может доказать отсутствие ошибок в сложном программном продукте. Соблюдение основных правил тестирования, и научно обоснованный подбор тестов, может уменьшить их количество. Процесс разработки программного обеспечения, предполагает 3 стадии тестирования:
автономное тестирование компонентов программного обеспечения
комплексное тестирование разрабатываемого программного обеспечения
системное или оценочное тестирование на соответствие основным критериям качества
Для повышения качества тестирования, рекомендуется соблюдать следующие принципы:
Следует избегать тестирования программ автором
Предполагаемые результаты должны быть известны до тестирования
Необходимо досконально изучать результата каждого теста
Необходимо проверять действие программы на неверных данных
Необходимо проверять программу на неожиданные побочные эффекты на неверных данных
Формирование тестовых наборов
Существует два принципиально различных подхода к формированию тестовых наборов:
Структурный и функциональный
Наборы тестов, полученные в соответствии с методами этих подходов обычно объединяют, обеспечивая всестороннее, тестирование программного обеспечения.
Структурное тестирование
Структурное тестирование называется так же тестированием по маршруту, так как тестовые наборы в этом случае, формируют путем анализов маршрутов предусмотренных алгоритмом. Под маршрутами понимают последовательность операторов программы, которые выполняются при конкретном варианте исходных данных. При структурном тестировании нужно предусмотреть, максимально полное тестирование всех маршрутов программы. Считается, что программа проверена полностью, если с помощью тестов удается осуществлять выполнение программы по всем возможным маршрутам передач управления. Структурный подход к тестированию имеет ряд недостатков. Тестовые наборы, построенные в соответствии со структурным подходом, не обнаруживают пропущенных маршрутов, не обнаруживают ошибок, зависящих от обрабатываемых данных, и не дают гарантий, что программа правильна. Если вместо сортировки по убыванию реализована сортировка по возрастанию.
Формирование тестовых наборов может осуществляться по критерию, покрытие операторов, покрытие решений, покрытие условий, комбинаторное покрытие условий.
Функциональное тестирование
Функциональное тестирование это тестирование по управлению по данным или по принципу «черного ящика». Программа рассматривается как черный ящик, и целью тестирования является выяснение обстоятельств, в которых поведение программы не соответствуют спецификации. Функциональное тестирование не дает гарантий отсутствия отклонений от спецификаций. При функциональном тестировании различают, следующие методы формирования тестовых наборов:
Эквивалентное разбиение
Анализ граничных значений
Анализ причинно-следственных связей
Предположение об ошибке
Эквивалентное разбиение – область всех возможных наборов входных данных программы, по каждому параметру, разбивают, на конечное число групп, классов эквивалентности. Наборы данных такого класса объединяют по признаку обнаружения одних и тех же ошибок. Если набор, какого либо класса, обнаруживает некоторую ошибку, то предполагается что все другие тесты этого класса эквивалентности тоже обнаружат эту ошибку и наоборот. Разработка тестов методом эквивалентного разбиения осуществляют в 2 этапа:
На первом выделяют классы эквивалентности
На втором формируют тесты
В отдельные классы эквивалентности выделяют наборы, содержащие допустимые и недопустимые значения, некоторого параметра, при этом существует ряд правил:
Если некоторый параметр X принимает значения, в промежутке [1, 999] то выделяется один правильный класс, 1<=X<=999, и два не правильных X>999 и X<1
Если входное условие определяет диапазон значений порядкового типа «В автомобиле могут ехать от 1 до 6 человек», то выделяется правильный класс и два не правильных
Если входное условие описывает множество входных значений и каждое значение программист трактует особо, например: Типы графических файлов: BMP, jpeg, PNG… То определяют правильный класс для каждого значения и один не правильный класс (txt).
Если входное условие описывает ситуацию должно быть например, первым символом идентификатора должна быть буква, то определяется один правильный класс эквивалентности 1-й символ буква, и один не правильный 1-й символ не буква.
Если есть основание считать, что различные элементы класса эквивалентности трактуются программой неодинаково, то данный класс разбивается на меньшие классы эквивалентности.
Анализ граничных значений
Граничные значения, это значения на границах класса эквивалентности входных значений и около них. Анализ показывает, что в этих местах резко увеличивается возможность, обнаружения ошибок, существует несколько правил для применения этого метода:
Если входное условие описывает область значений, то следует построить тесты для границ области и тесты с неправильными входными данными для ситуаций, незначительного выхода, за границы области.
Следует построить тесты, содержащие значения большие и меньшие минимального и максимального значения. Например, если входной файл может содержать от 1 до 255 записей то следует проверить 1, 255 и 0, 256
Если существует ограничение выходных значений, то желательно тестировать и их.
Если некоторое входное или выходное значение программы является упорядоченным множеством. Например, это последовательный файл или таблица. То следует сосредоточить внимание на первом, и последнем элементах этого множества.
Анализ причинно-следственных связей
Данный метод использует алгебру логики и оперирует понятиями причина и следствие. Причина это отдельное входное условие или класс эквивалентности. Следствие это выходное условие, или преобразование системы. Идея метода заключается в причинно-следственных связях.
Данный метод позволяет обнаружить неполноту, и не однозначность исходных спецификаций. Построение тестов осуществляют в несколько этапов, сначала по возможности выделяют в отдельные таблицы независимые группы, причинно-следственных связей. Затем в спецификации определяют множество причин и следствий. Далее на основе анализа, смыслового содержания спецификации строят таблицу истинностей, в которой в каждой возможной комбинации причин, ставятся в соответствие, следствие. Истина – 1, Ложь – 0. Для обозначения безразличных состояний условий принято обозначение x. Которое предполагает произвольное значение 0 либо 1.
Таблицу сопровождают примечаниями, задающими ограничения и описывающими комбинации причин и (или) следствий, которые являются невозможными из-за синтаксических или внешних ограничений. При необходимости аналогично строится таблица истинности, для класса эквивалентности, и наконец, каждую строку таблицы преобразуют в тест.
Предположение об ошибке
Метод основан на интуиции. В некотором списке перечисляются возможные ошибки или ситуации, в которых они могут появиться, а затем на основе этого списка составляются тесты.