Создание приложения, разработанного в среде Microsoft Visual Studio 2010 С#

Автор работы: Пользователь скрыл имя, 19 Мая 2013 в 16:10, курсовая работа

Краткое описание

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

Прикрепленные файлы: 1 файл

Курсовая КонстрПО.doc

— 159.50 Кб (Скачать документ)

Введение

 

Цель курсового проекта - рассмотреть подробно процесс конструирования программного обеспечения, ознакомиться со средствами автоматизации разработки, применить тестирование как составляющую процесса обеспечения качества разработки ПО, а также теоретически обосновать основные положения данных процессов и проверить их практически на основе разработанного приложения. Для этого разрабатывалась и проектировалась программа для работы с деками.

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

 

 

 

Нормативные ссылки

 

ГОСТ Р 1.5-2004 Стандарты национальные Российской Федерации.

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

ГОСТ 2.104-68 ЕСКД. Основные надписи 

ГОСТ 7.80-2000 СИБИД. Библиографическая  запись. Заголовок. Общие требования и правила составления 

ГОСТ 7.82-2001 СИБИД. Библиографическая  запись. Библиографическое описание электронных ресурсов. Общие требования и правила составления

ГОСТ 7.9-95 СИБИД. Реферат и аннотация. Общие требования

ГОСТ 19.001-77 ЕСПД. Общие положения 

ГОСТ 19.104-78 ЕСПД. Основные надписи 

ГОСТ 19.105-78 ЕСПД. Общие требования к программным документам

ГОСТ 19.401-78 ЕСПД. Текст программы. Требования к содержанию и оформлению

ГОСТ 19.402-78 ЕСПД. Описание программы 

ГОСТ 19.404-79 ЕСПД. Пояснительная записка. Требования к содержанию и оформлению

 

1 Постановка задачи

 

Целью данного курсового проекта являлось создание приложения, разработанного в среде Microsoft Visual Studio 2010 С#, выполняющего такие операции над стеками, как: заполнение стека, извлечение элементов стека и подсчет суммы извлеченных элементов; разработка модульных тестов для тестирования программы и подборка наборов тестовых данных, обеспечивающих наибольшую степень покрытия кода тестами.

Операции с стеком производятся с помощью класса Deistviа, для методов которого был написан ряд модульных тестов, проверяющих его работоспособность.

 

 

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

 

Стек (англ. stack — стопка) — структура данных, в которой доступ к элементам организован по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»). Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю.

Добавление элемента, называемое также  проталкиванием (push), возможно только в вершину стека (добавленный элемент становится первым сверху). Удаление элемента, называемое также выталкиванием (pop), тоже возможно только из вершины стека, при этом второй сверху элемент становится верхним.

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

Арифметические сопроцессоры, программируемые микрокалькуляторы и язык Forth используют стековую модель вычислений.

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

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

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

 

 

 

 

3 Анализ требований  к системе

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

    1. Задание размера стека;
    2. Заполнение стека вводимыми элементами с начала;
    3. Извлечение из начала и вывод на экран элементов стека;
    4. Извлечение из начала и вывод на экран элементов стека;
    5. Суммирование всех значений извлеченных из стека;
    6. Вывод на экран суммы извлеченных элементов;

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

ней (рис. 1).

 

 







 

пользователь


 

 

Рисунок 1 - Диаграмма UML для проектируемой программы

 

4 Описание примененных в проекте методов программирования

 

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

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

 

interface IDeque <T>: IEnumerable, ICloneable

 

При разработке программного продукта также использовались классы. Класс — это конструктор, который позволяет создавать свои собственные пользовательские типы путем группирования переменных других типов, методов и событий. Класс подобен чертежу. Он определяет данные и поведение типа. Если класс не объявлен статическим, то клиентский код может его использовать, создав объекты или экземпляры, назначенные переменной. Переменная остается в памяти, пока все ссылки на нее не выйдут из области видимости. Если класс объявляется статическим, то в памяти остается только одна копия и клиентский код может получить к ней доступ только посредством самого класса, а не переменной экземпляра.

 

class Deistvia<T>:IOchered<T>

{

}

 

В классе реализованы методы. Метод представляет собой блок кода, содержащий набор инструкций. Программа инициирует выполнение операторов, вызывая метод и задавая необходимые аргументы метода. В C# все инструкции выполняются в контексте метода. Метод Main является точкой входа для каждого приложения C#, и вызывается он средой CLR (Common Language Runtime) при запуске программы.

 

static void Main(string[] args)

 

Методы могут возвращать значения вызывающим их объектам. Если тип возвращаемого значения, указываемый перед именем метода, не равен void, для возвращения значения используется ключевое слово return. В результате выполнения инструкции с ключевым словом return, после которого указано значение нужного типа, вызвавшему метод объекту будет возвращено это значение. Кроме того, ключевое слово return останавливает выполнение метода. Если тип возвращаемого значения void, инструкцию return без значения все равно можно использовать для завершения выполнения метода. Если ключевое слово return отсутствует, выполнение метода завершится, когда будет достигнут конец его блока кода. Для возврата значений методами с типом возвращаемого значения отличным от void необходимо обязательно использовать ключевое слово return. Например, в следующих двух методах ключевое слово return служит для возврата целочисленных значений. Перегрузка методов позволяет использовать в качестве основного типа данных - определяемый пользователем тип.

 

public void push(T val)

 

Все перегрузки операторов являются статическими методами класса. Кроме того, следует учесть, что  если перегружается оператор равенства (==), то необходимо перегрузить и оператор неравенства (!=). Операторы < и >, а также <= и >= тоже следует перегружать парами.

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

 

 

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

В ходе разработки программного продукта, была построена следующая диаграмма  классов, которая отражает связи  между компонентами спроектированной системы (рис. 2):

 

Рисунок 2 – Диаграмма классов

 

Класс Iochered содержит все методы, которые используются в программе для выполнения операций над стеком. Также в приложении реализован полиморфизм — возможность объектов с одинаковой спецификацией иметь различную реализацию.

При полиморфизме классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования. Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций».

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

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

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

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

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

Использование параметрических классов  обладает следующими преимуществами:

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

 

 

6 Описание наборов тестов и тестовых планов

 

Для тестирования методов класса IOchered данного приложения был подобран следующий набор тестовых данных, состоящий из входных данных (добавляемые в дек элементы) и ожидаемых выходных данных (извлекаемые из дека элементы). Так как все тесты для методов класса Deque подобны друг другу – описывают динамику добавления и извлечения из дека элементов, перебирая все сочетания направлений его заполнения и опустошения, - то и набор тестовых данных для всех один (табл. 1):

 

Таблица 1 – Набор данных для  тестирования методов класса Deque

Входные данные

3  5  2

3

3

Ожидаемые выходные данные

5

Стек пуст

3


 

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

 

7 Тексты программ

7.1 Листинг класса Deistvia приложения OcherMas.cs

 

class Deistvia<T>:IOchered<T>

        {

           

            private int top;

            public T[] a;

Информация о работе Создание приложения, разработанного в среде Microsoft Visual Studio 2010 С#