Разработка программного модуля на основе понятийно-тезисной модели
Сравнительный анализ технологий тестирования. Разработка программного модуля "Интеллектуальная обучающая система для широкого перечня курсов". Обоснование необходимости и важности этапа отладки в процессе разработки данного программного обеспечения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 17.06.2011 |
Размер файла | 101,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Проблема отладки существует также и для программ средней сложности. Хотя стоит отметить тот факт, что для таких программ эффективность и достоверность отладки не является настолько жизненно необходимой, а также то, что обнаружение серьезных ошибок в ходе эксплуатации программы не приводит к столь печальным последствиям, как для больших систем. Автор программы обычно бывает в состоянии исправить их в приемлемые сроки.
Таким образом, вопросы повышения надежности программы, ускорения процесса её разработки и отладки являются актуальными как для профессиональных программистов, работающих над отдельными блоками программных систем, так и для дипломников, самостоятельно разрабатывающих свои программы.
2.2 Обзор возможностей, предоставляемых программистам различными технологиями
Программирование с использованием Win32/C
Язык программирования Си отличается минимализмом. Однопроходный компилятор компилирует программу, не возвращаясь назад, к уже откомпилированному тексту. Поэтому использованию функции должно предшествовать её объявление. Код на Си можно легко писать на низком уровне абстракции, почти как на ассемблере. Иногда Си называют «универсальным ассемблером» или «ассемблером высокого уровня», что отражает различие языков ассемблера для разных платформ и единство стандарта Си, код которого может быть скомпилирован без изменений практически на любой модели компьютера. Си часто называют языком среднего уровня или даже низкого уровня, учитывая то, как близко он работает к реальным устройствам. Компиляторы Си разрабатываются сравнительно легко благодаря относительно низкому уровню языка и скромному набору элементов. Поэтому данный язык доступен на самых различных платформах (возможно, круг этих платформ шире, чем у любого другого существующего языка). К тому же, несмотря на свою низкоуровневую природу, язык позволяет создавать переносимые программы и поддерживает программиста в этом. Программы, соответствующие стандарту языка, могут компилироваться на самых различных компьютерах.
Си (как и ОС UNIX, с которой он долгое время был связан) создавался программистами и для программистов, круг которых был бы ненамного шире круга разработчиков языка. Несмотря на это, область использования языка значительно шире задач системного программирования.
Си создавался с одной важной целью: сделать более простым написание больших программ с минимумом ошибок по правилам процедурного программирования, не добавляя лишних накладных расходов на итоговый код программы компилятором, как это всегда делают языки очень высокого уровня, такие как Бейсик. С этой стороны Си имеет следующие важные особенности:
· простую языковую базу, из которой вынесены в библиотеки многие существенные возможности, вроде математических функций или функций управления файлами;
· ориентацию на процедурное программирование, обеспечивающую удобство применения структурного стиля программирования;
· систему типов, предохраняющую от бессмысленных операций;
· использование препроцессора для, например, определения макросов и включения файлов с исходным кодом;
· непосредственный доступ к памяти компьютера через использование указателей;
· минимальное число ключевых слов;
· передачу параметров в функцию по значению, а не по ссылке (при этом передача по ссылке выполняется с помощью указателей);
· указатели на функции и статические переменные;
· области действия имён;
· записи - определяемые пользователем собирательные типы данных (структуры), которыми можно манипулировать как одним целым;
С другой стороны многие элементы Си потенциально опасны, а последствия неправильного использования этих элементов зачастую непредсказуемы. В связи со сравнительно низким уровнем языка многие случаи неправильного использования опасных элементов не обнаруживаются и не могут быть обнаружены ни при компиляции, ни во время исполнения. Это часто приводит к непредсказуемому поведению программы. Иногда в результате неграмотного использования элементов языка появляются уязвимости в системе безопасности. Необходимо заметить, что использования многих таких элементов можно избежать.
Другим потенциальным источником опасных ситуаций служит механизм указателей. Указатель может ссылаться на любой объект в памяти, включая и исполняемый код программы, и неправильное использование указателей может порождать непредсказуемые эффекты и приводить к катастрофичным последствиям. К примеру, указатель может быть неинициализированным или, в результате неверных арифметических операций над указателем, указывать в произвольное место памяти; на некоторых платформах работа с таким указателем может вызвать аппаратный останов программы, на незащищённых же платформах это может привести к порче произвольных данных в памяти, причём эта порча может проявиться в самые произвольные моменты времени и намного позже момента порчи. Также, область динамической памяти, на которую ссылается указатель, может быть освобождена (и даже выделена после этого под другой объект) - такие указатели называются «висячими». Или, наоборот, после манипуляций с указателями на область динамической памяти может не остаться ссылок, и тогда эта область, называемая «мусором» (garbage), никогда не будет освобождена, что может приводить к «утечкам памяти» в программе. В других языках подобные проблемы пытаются решить введением более ограниченных ссылочных типов.
Проблемой является также то, что автоматически и динамически создаваемые объекты не инициализируются, и они могут содержать значения, оставшееся в памяти от ранее удалённых объектов. Такое значение полностью непредсказуемо, оно меняется от одной машины к другой, от запуска к запуску, от вызова функции к вызову. Если программа использует такое значение, то результат будет непредсказуемым и не обязательно проявится сразу.
Ещё одной распространённой проблемой является то, что память не может быть использована снова, пока она не будет освобождена программистом с помощью функции free(). В результате программист может случайно забыть освобождать эту память, но продолжать её выделять, занимая всё большее и большее пространство. Это обозначается термином утечка памяти. Наоборот, возможно освободить память слишком рано, но продолжать использовать хранящиеся в ней данные.
Программирование с использованием C++/MFC
С++ компилируемый строго типизированный язык программирования общего назначения. Поддерживает разные парадигмы программирования: процедурную, обобщённую, функциональную; наибольшее внимание уделено поддержке объектно-ориентированного программирования.
Язык Си++ во многом является надмножеством Си. C++ - чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых утилит и драйверов до сложных программных комплексов самого различного назначения. В частности:
· Высокая совместимость с языком С, позволяющая использовать весь существующий С-код (код С может быть с минимальными переделками скомпилирован компилятором С++; библиотеки, написанные на С, обычно могут быть вызваны из С++ непосредственно без каких-либо дополнительных затрат, в том числе и на уровне функций обратного вызова, позволяя библиотекам, написанным на С, вызывать код, написанный на С++).
· Поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП, обобщенное программирование, метапрограммирование (шаблоны, макросы).
· Имеется возможность работы на низком уровне с памятью, адресами, портами.
· Возможность создания обобщённых контейнеров и алгоритмов для разных типов данных, их специализация и вычисления на этапе компиляции, используя шаблоны.
· Кроссплатформенность. Доступны компиляторы для большого количества платформ, на языке C++ разрабатывают программы для самых различных платформ и систем.
· Эффективность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Ни одна из языковых возможностей, приводящая к дополнительным накладным расходам, не является обязательной для использования - при необходимости язык позволяет обеспечить максимальную эффективность программы.
В то же время язык С++ далеко не идеален, отчасти недостатки C++ унаследованы от языка-предка - С, - и вызваны изначально заданным требованием возможно большей совместимости с С. К собственным недостаткам C++ можно отнести:
· Сложность и избыточность, из-за которых C++ трудно изучать, а построение компилятора сопряжено с большим количеством проблем. В частности:
o В языке практически полностью сохранён набор конструкций С, к которому добавлены новые средства. Во многих случаях новые средства и механизмы позволяют делать то же самое, что и старые, но в языке сохраняются оба варианта.
o Поддержка множественного наследования реализации в ООП-подсистеме языка вызывает целый ряд логических проблем, а также создаёт дополнительные трудности в реализации компилятора.
o Шаблоны в своём исходном виде приводят к порождению кода очень большого объёма, а введённая позже в язык возможность частичной спецификации шаблонов трудно реализуема и не поддерживается многими существующими компиляторами.
· Метапрограммирование на основе шаблонов C++ сложно и при этом ограничено в возможностях. Оно состоит в реализации средствами шаблонов C++ интерпретатора примитивного функционального языка программирования выполняющегося во время компиляции. Сама по себе данная возможность весьма привлекательна, но такой код весьма трудно воспринимать и отлаживать.
· Хотя декларируется, что С++ мультипарадигменный язык, реально в языке отсутствует поддержка функционального программирования. Отчасти, данный пробел устраняется различными библиотеками, использующими средства метапрограммирования для расширения языка функциональными конструкциями (например, поддержкой лямбд / анонимных методов), но качество подобных решений значительно уступает качеству встроенных в функциональные языки решений. Такие возможности функциональных языков, как сопоставление с образцом, вообще крайне сложно эмулировать средствами метапрограммирования.
· Некоторые считают недостатком языка C++ отсутствие встроенной системы сборки мусора. С другой стороны, в C++ имеется достаточно средств, позволяющих почти исключить использование опасных указателей, нет принципиальных проблем и в реализации и использовании сборки мусора (на уровне библиотек, а не языка). Отсутствие встроенной сборки мусора позволяет программисту самому выбрать стратегию управления ресурсами.
Программирование с использованием Visual Basic.
Visual Basic считается хорошим средством быстрой разработки прототипов программы, для разработки приложений баз данных и вообще для компонентного способа создания программ, работающих под управлением операционных систем семейства Microsoft Windows. Этот язык очень сильно привязан к своей среде разработки и к операционной системе Windows, являясь исключительно инструментом написания Windows-приложений. Привязка к среде заключается в том, что существует большое количество средств, предназначенных для помощи и удобства программирования: встроенный отладчик, просмотр переменных и структур данных на лету, окно отладки, всплывающая подсказка при наборе текста программы. Все эти преимущества делают бесполезным и даже невозможным использование Visual Basic вне среды разработки, например в обычном текстовом редакторе.
К основным достоинствам VB можно отнести;
· Высокая скорость создания приложений с графическим интерфейсом для MS Windows
· Простой синтаксис, позволяющий очень быстро освоить язы
· Возможность как компиляции в машинный код, так и интерпретации во время отладки
Но данные достоинства никак не перекрывают такие явные «недоработки» языка, как отсутствие механизма наследования. Существующие в языке наследование, позволяет наследовать только интерфейсы объектов, а не их самих. Таким образом, в унаследованном классе должны быть явно переписаны все функции базового класса. Также в унаследованном классе невозможно добавление каких-либо методов, присущих только данному классу, то есть если абстрактный базовый класс содержит только два метода, то и производный класс содержит только два метода, не более и не менее того.
VB конечно достаточно простой для изучения язык но подходит он именно для изучения, подготовки умов студентов к более высокоуровневым и развитым языкам.
Программирование и использованием Java.
Язык Java - это полностью объектно-ориентированный язык, который в отношении синтаксиса многое унаследовал от C++. Но язык Java в отношении синтаксиса намного проще и логичнее, чем C++. Java - это очень элегантный и красивый язык.
Однако при его использовании проблем избежать не удастся. Одна из серьёзных проблем заключается в том, что при создании сложного приложения на Java вам придётся использовать только этот язык для создания частей этого приложения. В Java предусмотрено не так уж много средств межъязыкового взаимодействия. В реальном мире существуют миллионы строк готового кода, который хотелось бы интегрировать с новыми приложениями на Java. Однако это очень трудно сделать. Таким образом, можем заключить, что Java - это далеко неидеальный язык во многих ситуациях.
13 февраля 2003 года состоялся официальный старт новой платформы Microsoft.NET - на грандиозной презентации в Сан-Франциско были представлены рабочие версии двух главных ее элементов: операционной среды.NET Framework и инструментального набора Visual Studio.NET.
Структура.NET Framework показана на Рис. 2.1, из которого видно, что эта среда представляет собой дополнительный операционный слой, разделяющий приложения пользователя и базовые сервисы Windows. Таким образом.NET Framework - это фактически новая платформа разработки и исполнения прикладных программ.
NET Framework состоит из двух главных компонентов: библиотеки базовых классов и CLR (Common Language Runtime - общая для языков среда исполнения NET-приложений), которые соответственно предназначены для решения следующих задач:
· унификации библиотек функций для всех приложений, независимо от используемого языка программирования;
· повышения управляемости приложений с точки зрения безопасности и эффективного использования ресурсов.
В этой среде ведется разработка и исполнение программ. Главным инструментом создания приложений является конечно же Visual Studio.NET, в котором каждый из языков программирования взаимодействует с.NET Framework через общий интерфейс. В состав VS.NET входит несколько языков Microsoft, среди которых важнейшая роль отводится C/C++, C# и VB.
В саму среду разработки вошли средства, ранее реализованные в виде пакета Visual InterDev. VS.NET позволяет создавать.NET-приложения различных типов, но все они являются теми или иными модификациями трех базовых вариантов - Console Application, Windows Application и Class Library.
Создание универсальной среды разработки и общих базовых функций предопределило то, что отныне все языки программирования Microsoft поставляются в виде единого пакета (например, отдельного продукта VB.NET уже нет). Кроме того, это сильно упрощает подключение к ней (в виде дополнительных модулей Add-Ins) других языков программирования. В настоящее время о создании таких средств (Cobol, Fortran, Perl и пр.) объявили многие разработчики. Кроме того, некоторые поставщики (в частности, Borland) предлагают собственные интегрированные средства программирования для.NET.
Среда исполнения .NET-программ CLR - это краеугольный камень в фундаменте организации вычислительных процессов всей концепции.NET. Именно здесь решаются основные задачи повышения надежности и безопасности программ, а также платформной независимости.
Фактически CLR исполняет программы, написанные только на одном стандартном языке Microsoft Intermediate Language (MSIL), который в свою очередь соответствует спецификациям Common Language Specification. Кстати, MSIL - это вполне реальный язык программирования (с использованием синтаксиса в стиле «Си»), на нем можно писать исходные модули и транслировать их с помощью автономного компилятора, который входит в состав.NET Framework SDK.
Все же остальные языки, в том числе и C#, - это языки верхнего уровня, платформно-независимые. Можно было бы легко включить MSIL в визуальную среду Visual Studio.NET, но, видимо, Microsoft решила не дразнить гусей, чтобы иметь возможность говорить о «равных правах для всех поставщиков средств программирования».
Соответственно задача всех средств разработки .NET-приложений заключается в формировании результирующего исполняемого модуля на MSIL, но только реализованного уже в виде двоичного байт-кода.
Однако, в отличие от классической схемы интерпретатора, используемой в том числе и в Java, CLR выполняет байт-код путем предварительной компиляции в машинный код отдельных фрагментов программы или приложения целиком.
Первый вариант является основным, при этом применяется так называемый Just-In-Time - компилятор, который выполняет преобразование MSIL в машинный код по мере обращения к соответствующим процедурам (т.е. неиспользуемые фрагменты программы вовсе не компилируются). Данный подход тоже достаточно известен, он, в частности, уже несколько лет используется в платформе «1С: Предприятие».
Режим интерпретации имеет два главных преимущества по сравнению с машинным кодом: повышается безопасность программ (точнее, защищенность системы в целом от действия конкретных программ) и более просто решается вопрос адаптации программ к конкретной аппаратной платформе. В этой связи рассмотрим структуру CLR-модулей.
Они состоят из исполняемого кода и метаданных. Метаданные (например, различные декларации полей, методов, свойств и событий) широко применяются и в COM-технологии, что и составляет ее основное отличие от обычных двоичных DLL. В случае же CLR состав метаданных значительно расширен, что позволяет эффективнее контролировать версии, проверять надежность источников поступления программ и пр.
Программы на языке MSIL создают так называемый «управляемый код» (managed code). Это означает, что CLR не просто преобразует MSIL в машинные инструкции, а выполняет эти действия с учетом внешних установок.
Например, Модуль1 может задать собственный набор прав, предоставляемый вызываемому им Модулю 2, запретив, в частности, любые операции коррекции файлов. То есть в CLR мы видим реализацию идей Интернет-браузеров, которые предоставляют промежуточную среду выполнения программ, но только с более высоким уровнем управляемости правами по сравнению с обычной OC.
Microsoft предлагает три языка программирования в составе Visual Studio.NET для формирования «управляемого кода» (создания .NET-приложений) - VB, C# и специальный вариант С++ With Managed Extensions. Как видно из этого списка, Visual C+ занимает совершенно особую позицию в средствах разработки Microsoft: с его помощью можно писать как традиционные Windows-приложения с «неуправляемым кодом» (unmanaged code), так и .NET-приложения, исполняемые в среде CLR.
Что касается платформной независимости, то вроде бы CLR имеет все предпосылки для этого, ведь нужен лишь JIT-компилятор (как это делается для Java).
C# сочетает в себе объектно-ориентированные и аспектно-ориентированные концепции программирования.
Он разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает FCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем. (Однако эта закономерность была нарушена с выходом C# 3.0, представляющим собой расширения языка, не опирающиеся на расширения платформы .NET) CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для программ на VB.NET, J# и др.
Синтаксические конструкции C# унаследованы не только от C++, но и от Visual Basic. Например, в C#, как и в Visual Basic, используются свойства классов. Как C++, C# позволяет производить перегрузку операторов для созданных Вами типов. При этом C# синтаксически не менее (если не более) чист, чем Java, так же прост, как Visual Basic, и обладает практически той же мощью и гибкостью, что и C++.
Выделим основные особенности C#:
· Указатели больше не нужны. В программах на C#, как правило, нет необходимости в работе с ними (однако если это потребуется, то, пожалуйста, возможности для работы с указателями в Вашем распоряжении);
· Управление памятью производится автоматически;
· В C# предусмотрены встроенные синтаксические конструкции для работы с перечислениями, структурами и свойствами классов;
· В C# осталась возможность перегружать операторы, унаследованные от C++. При этом значительная часть возникавших при этом сложностей ликвидирована;
Предусмотрена полная поддержка использования программных интерфейсов. Однако в отличие от классического COM применение интерфейсов - это не единственный способ работы с типами, используя различные двоичные модули..NET позволяет передавать объекты (как ссылки или как значения) через границы программных модулей;
Также предусмотрена полная поддержка аспектно-ориентированных программных технологий (таких как атрибуты).
Возможно, самое важное, что необходимо сказать о языке C#, - это то, что он генерирует код, предназначенный для выполнения только в среде выполнения .NET. Согласно терминологии Microsoft код, предназначенный для работы в среде выполнения .NET, - это управляемый код (managed code). Двоичный файл, который содержит управляемый файл, называется сборкой (assembly).
SQL Server 2005 предоставляет мощные, знакомые инструменты для профессионалов информационных технологий так же, как и для работников информационной сферы, уменьшая сложность создания, развёртывания, управления и использования данных предприятия и аналитических приложений на платформах от мобильных устройств до информационных систем предприятия. Благодаря исчерпывающему набору функций, взаимодействию с существующими системами и автоматизации типовых задач, SQL Server 2008 предоставляет полное решение в области хранения данных для предприятий всех масштабов. Рис. 2.2 показывает схему платформы данных SQL Server 2008.
Microsoft SQL Server в качестве языка запросов использует версию SQL, получившую название Transact-SQL (сокращённо T-SQL), являющуюся реализацией SQL-92 (стандарт ISO для SQL) с множественными расширениями. T-SQL позволяет использовать дополнительный синтаксис для хранимых процедур и обеспечивает поддержку транзакций (взаимодействие базы данных с управляющим приложением). Microsoft SQL Server и Sybase ASE для взаимодействия с сетью используют протокол уровня приложения под названием Tabular Data Stream (TDS, протокол передачи табличных данных). Протокол TDS также был реализован в проекте FreeTDS с целью обеспечить различным приложениям возможность взаимодействия с базами данных Microsoft SQL Server и Sybase.
Microsoft SQL Server также поддерживает Open Database Connectivity (ODBC) - интерфейс взаимодействия приложений с СУБД. Версия SQL Server 2005 обеспечивает возможность подключения пользователей через веб-сервисы, использующие протокол SOAP. Это позволяет клиентским программам, не предназначенным для Windows, кроссплатформенно соединяться с SQL Server. Microsoft также выпустила сертифицированный драйвер JDBC, позволяющий приложениям под управлением Java (таким как BEA и IBM WebSphere) соединяться с Microsoft SQL Server 2000 и 2005.
SQL Server поддерживает зеркалирование и кластеризацию баз данных. Кластер сервера SQL - это совокупность одинаково конфигурированных серверов; такая схема помогает распределить рабочую нагрузку между несколькими серверами. Все сервера имеют одно виртуальное имя, и данные распределяются по IP адресам машин кластера в течение рабочего цикла. Также в случае отказа или сбоя на одном из серверов кластера доступен автоматический перенос нагрузки на другой сервер.
SQL Server поддерживает избыточное дублирование данных по трем сценариям:
· Снимок: Производится «снимок» базы данных, который сервер отправляет получателям.
· История изменений: Все изменения базы данных непрерывно передаются пользователям.
· Синхронизация с другими серверами: Базы данных нескольких серверов синхронизируются между собой. Изменения всех баз данных происходят независимо друг от друга на каждом сервере, а при синхронизации происходит сверка данных. Данный тип дублирования предусматривает возможность разрешения противоречий между БД.
В SQL Server 2005 встроена поддержка.NET Framework. Благодаря этому, хранимые процедуры БД могут быть написаны на любом языке платформы.NET, используя полный набор библиотек, доступных для .NET Framework, включая Common Type System (система обращения с типами данных в Microsoft .NET Framework). Однако, в отличие от других процессов .NET Framework, будучи базисной системой для SQL Server 2005, выделяет дополнительную память и выстраивает средства управления SQL Server вместо того, чтобы использовать встроенные средства Windows. Это повышает производительность в сравнении с общими алгоритмами Windows, так как алгоритмы распределения ресурсов специально настроены для использования в структурах SQL Server.
Последняя версия SQL Server - SQL Server 2008 (кодовое название «Katmai»). Была выпущена 6 августа 2008 года.
SQL Server 2008 направлен на то, чтобы сделать управление данными самонастраивающимся, самоорганизующимся и самообслуживающимся механизмом - для реализации этих возможностей были созданы технологии SQL Server Always On. Это позволит уменьшить до нуля время нахождения сервера в нерабочем состоянии.
В SQL Server 2008 была добавлена поддержка структурированных и частично структурированных данных, включая цифровые форматы для изображений, звуков, видео и других типов мультимедиа. Поддержка мультимедиа форматов внутри СУБД позволяет специализированным функциям взаимодействовать с этими типами данных. Кроме этого, были включены специализированные форматы даты и времени и пространственный тип для пространственно зависимых данных. Для неструктурированных данных были добавлены специализированные типы, например, тип File.
Для повышения эффективности администрирования в SQL Server были включены библиотеки Declarative Management Framework, позволяющие распределять полномочия для баз данных или отдельных таблиц. Были улучшены методы компрессии данных. SQL Server Katmai поддерживает набор библиотек ADO.NET Entity Framework и средства оповещения, репликации и определения данных.
DirectX - совокупность технологий, разработанных корпорацией Microsoft с целью превратить Windows в оптимальную платформу для мультимедийных приложений и компьютерных игр с полноцветной графикой, видео, трехмерной анимацией и объемным звуком. Технология DirectX станет составной частью будущих версий ОС корпорации Microsoft - Windows 98 и Windows NT 5.0, а также браузера Internet Explorer 4.0. Уже сегодня DirectX дает возможность разработчикам игровых программ и приложений мультимедиа создавать продукты, не привязанные жестко к тем или иным аппаратным средствам, пользователи же могут приобретать игры и программы мультимедиа для Windows, не беспокоясь о их несовместимости с аппаратурой своего компьютера.
До появления DirectX большинство мультимедиа приложений для компьютеров реализовывались на платформе MS-DOS. Каждую программу разработчикам приходилось комплектовать множеством видео- и аудиодрайверов (с тем, чтобы охватить как можно больше установленных у пользователей аппаратных компонентов) и при этом применять расширители DOS для преодоления барьера в 640 Кбайт. Среда Windows, упростившая взаимодействие пользователей с ПК благодаря удобному графическому интерфейсу, не облегчила жизнь программистов: в Windows графические программы функционировали слишком медленно. Как ни парадоксально это звучит, Windows, являясь графической средой, не была приспособлена для выполнения быстрых графических операций.
Разработчики DirectX стремились к тому, чтобы программисты могли создавать игровые и прикладные программы, не задумываясь о том, какие аппаратные компоненты имеются у конкретного пользователя. Сама операционная среда должна была содержать все необходимые драйверы и взять на себя взаимодействие программы с аппаратурой ПК, такой как аудио-видеоплаты и принтеры. Между тем даже после выхода в свет ОС Windows 95 платформа Microsoft по-прежнему не соответствовала заявленным обещаниям. Только сегодня с появлением усовершенствованных технологий, получивших обобщенное название DirectX, положение начинает меняться.
Базовый слой (DirectX Foundation) предоставляет разработчикам единый набор API-интерфейсов, обеспечивающих прямой доступ к аппаратным средствам - ускорителям 3D-графики, звуковым платам. Эти API выполняют так называемые функции нижнего уровня, в частности управление устройствами ввода (такими, как джойстики, мышь и клавиатура), микшированием и воспроизведением звука. Указанные функции поддерживаются четырьмя компонентами, составляющими DirectX Foundation: DirectDraw, Direct3D, DirectInput и DirectSound, AudioVidroPlayback. В одной из последних версии DirectX так же был добавлен так называемый Managed DirectX APIs обеспечивающий связь структуры.NET Framework со стандартными API функциями
HAL и HEL
До появления DirectX создателям приложений мультимедиа для платформы Windows приходилось настраивать свои продукты для работы на широком спектре устройств и конфигураций. DirectX Foundation предусматривает так называемый уровень абстрагирования аппаратных средств HAL (Hardware Abstraction Layer). HAL функционирует как промежуточное звено между программным обеспечением и аппаратурой, позволяя разработчикам обращаться к тем или иным компонентам, не зная их марки, модели и других деталей. В результате они получают возможность писать лишь одну версию приложения, взаимодействующую с DirectX.
Кроме того, DirectX Foundation предоставляет в распоряжение разработчиков инструментальные средства для достижения наивысшей производительности. Данный базовый слой определяет возможности аппаратуры компьютера и устанавливает соответствующие параметры приложения. Он обеспечивает также выполнение мультимедиа-приложений, использующих функции, не поддерживаемые в системе на аппаратном уровне. Это достигается за счет уровня HEL (Hardware Emulation Layer), с помощью которого DirectX программно эмулирует функции, не реализуемые самим устройством. Если аппаратное обеспечение не совместимо с запрашиваемым программой сервисом, уровень HEL пытается эмулировать его наилучшим возможным образом. Чаще всего эмулируются средства 3D-графики. Хотя эмуляция и не так эффективна, как аппаратная реализация, зато разработчику не приходится писать несколько версий одной и той же программы.
Мультимедийный слой DirectX
Над базовым уровнем DirectX (DirectX Foundation) расположен мультимедийный слой DirectX Media. Если DirectX Foundation реализует функции нижнего уровня, то DirectX Media предоставляет средства высокого уровня для поддержки анимации, потоков мультимедиа (просмотр и прослушивание видео и аудиофайлов, загружаемых из Internet), а также интерактивных функций.
DirectX Media, как и DirectX Foundation, состоит из нескольких интегрированных компонентов: AudioVideoPlayback, DirectModel, DirectAnimation, DirectPlay, Direct3D Retained Mode (иногда в него включают и поддержку VRML).
В целом мультимедийный слой DirectX помогает разработчикам решить одну из наиболее сложных задач, возникающих при создании высококачественных мультимедийных программ для Windows, - координировать различные типы мультимедийных эффектов. Это делается с помощью набора API-интерфейсов, синхронизирующих разные эффекты в рамках одного приложения. До появления DirectX в подобной ситуации приходилось использовать API-интерфейсы разных производителей (средств видео, аудио или анимации), что затрудняло объединение элементов. Слой DirectX Media помогает разработчикам также синхронизировать воспроизведение мультимедиа, привязывая его элементы к единой шкале времени.
Технология DirectX оказалась необходима вследствие открытости платформы PC, которая оснащается все новыми и более сложными мультимедийными периферийными устройствами разных производителей. Хотя при наличии соответствующих видео и аудиостандартов разработчики могли бы создавать свои программы, ориентируясь непосредственно на аппаратное обеспечение и не пользуясь никакой прослойкой типа DirectX, это противоречило бы заложенному в основу платформы Windows и Windows NT принципу исключения прямого доступа к аппаратным ресурсам (для предотвращения отказов ОС из-за неправильно написанных приложений).
DirectX предоставляет разработчикам новые возможности для творчества: им не нужно беспокоиться о том, какой адаптер дисплея, звуковая плата или процессор ускорения трехмерной графики установлен на ПК пользователя. Поскольку технология DirectX изначально рассчитана на появление усовершенствований в программном и аппаратном обеспечении, разработчики и пользователи могут быть уверены, что их приложения будут оптимально использовать новые аппаратные технологии.
Ориентация DirectX на платформу Windows и полный контроль со стороны Microsoft далеко не у всех вызывают восторг. Однако, несомненно, этот продукт существенно упростит реализацию мультимедиа-приложений под Windows и обеспечит еще более широкое распространение данной платформы.
Для воспроизведения аудио и видео файлов в проекте использовал пространство имен Microsoft. DirectX. AudioVideoPlayback.
Основным отличием DirectX. AudioVideoPlayback от существующих аналогов является простота использования, что существенно уменьшает временные затраты на разработку, в итоге мы можем запустить воспроизведение музыкального файла с помощью одной строки:
Audio someAudio = new Audio («Lect1.mp3», true);
Имеются два основных класса, которые включены в пространство имен AudioVideoPlayback: класс Video и класс Audio. Эти названия довольно очевидны. Конструктор для каждого класса имеет два варианта. Первый параметр для каждого из вариантов представляет собой имя файла, который мы хотим запустить. Другой параметр содержит булево значение, которое определяет автоматическое воспроизведение этого файла, в нашем случае «true» (по умолчанию «false», то есть файл не будет проигрываться без соответствующей команды).
Конструкторы - не единственный способ создавать (или загружать) эти файлы. Наиболее близким является статический метод FromFile, который принимает те же самые параметры и возвращает новый экземпляр класса. Имеется также статический метод FromUri, который ведет себя подобно методу FromFile, за исключением того, что он загружает данные с web-узла (или любого корректного URL). При этом воспроизведение при использовании URL может начаться еще до того, как файл загрузится полностью.
Таблица 2.1. Основные методы пространство имен Microsoft. DirectX. AudioVideoPlayback. Audio
Методы |
||
Audio |
Инициализирует новый объект и открывает аудио файл на воспроизведение |
|
Dispose |
Немедленно освобождает ресурсы неиспользуемые объектом |
|
Finalize |
При вызове освобождает ресурсы объекта еще до его уничтожения сборщиком мусора |
|
FromFile |
Создает аудио объект из указанного файла |
|
FromUrl |
Создает аудио объект с указанного URL |
|
Open |
Загружает новый файл в аудио объект |
|
Play |
Воспроизводит аудио объект. |
|
Pause |
Приостанавливает воспроизведение. |
|
SeekCurrentPosition |
Устанавливает начальную позицию воспроизведения |
|
SeekStopPosition |
Устанавливает конечную позицию воспроизведения |
|
Stop |
Останавливает воспроизведение |
2.4 Этапы разработки программного обеспечения
Задача, которую предстоит решить на ЭВМ, выдается в виде специального задания на разработку программы. Задание содержит формулировку задачи, необходимые характеристики разрабатываемой программы, требования к взаимодействию с ней. Выдаче такого задания для крупных задач может предшествовать большая работа научно-исследовательского характера.
Задание на разработку программы по форме и характеру должно быть аналогично техническому заданию (ТЗ) на разработку какого-либо технического продукта.
Техническое задание полезно и в том случае, когда заказчик и исполнитель работают в одной и той же комнате или даже являются одним и тем же лицом. Наличие четкой письменной формулировки будет препятствовать подмене или отходу в процессе разработки программы от сформулированных в ТЗ требований в угоду каким-то другим побочным целям. Кроме того, письменно сформулированное задание делает возможным обсуждение, оценку или согласованную с заказчиками (пользователями) корректировку отдельных требований ТЗ в ходе разработки программы. ТЗ препятствует проникновению в программу таких ошибок и противоречий, которые могут быть обнаружены только после разработки большей части программы или уже на стадии анализа полученных результатов счета. Чем более формализованным по характеру будет техническое задание, тем больше шансов, что разрабатываемая программа будет решать именно ту задачу, которую имел в виду заказчик.
Техническое задание должно содержать также требования или указания, касающиеся принципов проверки и испытаний готовой программы.
На основании анализа технического задания выбирается основной метод решения задачи, составляется общий проект программы. Выбранный подход к решению задачи должен обеспечивать правильные результаты для тех условий функционирования программы, которые определены ТЗ, гарантировать требуемую скорость работы, предусматривать удобство использования программы и т.п.
В проекте, помимо формулировки выбранного общего метода решения задачи, характеризуются основные части проектируемой программы, их функции, взаимосвязь и последовательность выполнения, а также точно определяются входные данные и выдаваемые результаты, как всей программы, так и основных ее частей. Поскольку каждая разрабатываемая программа, как правило, используется в дальнейшем не только ее автором, но и другими программистами, составляется и проект инструкции для пользователей, в которой фиксируется (и, таким образом, может быть заранее оценен и исправлен) предполагаемый режим общения пользователя (и оператора) с программой.
Для очень простых задач проектирование может производиться мысленно, без фиксации на бумаге. Наоборот, очень сложные задачи могут потребовать нескольких этапов проектирования: предэскизное, эскизное, техническое по аналогии с инженерным проектированием.
Замечание. Этапы 2.4.1. и 2.4.2. для несложных задач мало зависят от ЭВМ и операционной системы, с помощью которых предполагается решать задачу, а также от языка, на котором она будет программироваться; выбор ЭВМ и языка может быть произведен и на следующих этапах разработки.
Алгоритмизация
Этот этап иногда воспринимают, как вспомогательный. Он является подготовительным к выполнению следующего этапа, считающегося основным, на котором производится написание программы на выбранном языке программирования. Введение такого «промежуточного» этапа преследует цель облегчить выполнение следующего этапа и тем самым предотвратить возникновение многих ошибок при его осуществлении для сложных задач. Формулировка алгоритма закрепляет последовательность основных шагов выполнения программы, четко фиксирует функциональное содержание ее частей, позволяет уделить необходимое внимание простоте логической структуры разрабатываемой программы. Этап алгоритмизации является совершенно необходимым также, в случае, если язык, на котором предстоит программировать, не вполне освоен и предвидятся трудности при его использовании на следующем этапе.
При разработке алгоритма необходимо учитывать ресурсы используемой ЭВМ (ее скорость, память) и возможности применяемой для решения задачи операционной системы. Алгоритмы для несложных задач, требования которых к ресурсам невелики, являются обычно машинно-независимыми.
В ходе разработки общего алгоритма используется некоторый специальный язык, который по своему характеру является промежуточным, переходным между неформальным, словесным способом изложения метода решения задачи на этапе 2.4.2. и формальным алгоритмическим языком для программирования. Промежуточный язык должен сочетать в себе с одной стороны, наглядность для отображения содержания и смысла, выполняемых в алгоритме действий (что делается) и, с другой стороны, формализм для указания конкретных операций и последовательности их выполнения (как делается).
В качестве такого промежуточного языка обычно используют блок-схемы, которые позволяют наиболее наглядно представить логическую структуру разрабатываемой программы, взаимосвязь отдельных частей программы, условия или кратность выполнения таких частей. Для отображения вычислительной (арифметической) стороны программы используются обычные математические средства или элементы алгоритмических языков, а в самых общих блок-схемах - просто словесная формулировка; иногда используются и все эти способы вместе.
Для достаточно сложных программ алгоритмизация проводится в несколько шагов с целью постепенной детализации алгоритма. Для простых задач обычно разрабатывают блок-схемы на двух уровнях: общая блок-схема программы и блок-схемы отдельных частей (блоков) программы.
В ходе разработки алгоритма, возможно, придется уточнять или изменять решения, принятые на этапе 2.4.2., и в этом случае такие изменения обязательно вносятся в проект, который всегда должен соответствовать разрабатываемому алгоритму.
В случае, когда на предыдущем этапе был получен детально разработанный алгоритм, составление программы на выбранном для программирования языке (алгоритмическом языке высокого уровня, автокоде, языке ассемблера или машинном языке) сводится к переводу этого алгоритма на язык программирования. Основные трудности и, следовательно, причины ошибок на этом этапе заключаются, во-первых, в необходимости знания всех требований и ограничений выбранного языка программирования и, во-вторых, в необходимости постоянного внимания ко многим деталям языка, которые приходится учитывать в ходе написания программы. Если этап 2.4.3. был выполнен некачественно, и алгоритм представлен недостаточно детально, то его доводку придется выполнять «на ходу», во время программирования. Это затруднит процесс программирования-перевода и поведет к возникновению дополнительных ошибок в программе. Чем более процесс программирования будет походить на перевод, тем более «механическим» будет такой перевод, тем более легким будет составление программы, и тем меньше возникнет ошибок на этом этапе, самом щедром на ошибки. После составления программы проводится ее проверка для обнаружения и исправления ошибок, внесенных на этом этапе. Если при проверке обнаруживаются ошибки, допущенные на предыдущем этапе 2.4.3., то соответствующие исправления вносятся и в алгоритм, поскольку к нему еще придется обращаться на следующих этапах, и тексты алгоритма и программы должны соответствовать друг другу.
Препарация
После составления программы производится ее перенос на машинные носители, т.е. подготовка программы к выполнению ее на ЭВМ; будем называть этот этап препарацией. Для предупреждения и сокращения ошибок препарации текст программы должен быть написан ясно и четко: чем небрежнее будет написан текст программы, тем больше ошибок возникнет в препарированной программе. Проверка правильности препарации осуществляется распечаткой программы, введенной в ЭВМ с использованных носителей, и последующей сверкой с исходным текстом.
Трансляция
Транслятор в ходе осуществления трансляции, производит поиск синтаксических ошибок в программе и, в случае их обнаружения, печатает диагностику, помогающую последующей локализации ошибок. Трансляция, а вместе с ней, и поиск синтаксических ошибок, могут быть прекращены, если найдена очень грубая, с точки зрения транслятора, ошибка. Отсутствие синтаксических ошибок не говорит о том, что в программе нет ошибок препарации (например, вместо знака * был набран + или записана не та буква). Поэтому тщательная сверка напечатанной программы с исходным текстом всегда необходима на данном или предыдущем этапе.
На этапе отладки производится обнаружение с помощью ЭВМ ошибок в программе и их исправление. Этап отладки можно разделить на три подэтапа:
Контроль правильности программы;
Локализация ошибок;
Исправление ошибок.
Сначала осуществляется контроль программы: путем пропуска на машине специальных контрольных примеров устанавливается факт отсутствия или, в противном случае, наличия ошибок в программе. Здесь речь идет о содержательных (семантических) ошибках, которые не проявляются при трансляции программы.
Затем происходит локализация ошибок - точно устанавливается место, где в программе допущена ошибка (ошибки), последствия которой проявились при выполнении первого подэтапа.
После выполнения двух подэтапов производится исправление ошибок, выявленных на втором подэтапе. Исправления вносятся как в программу, так и в алгоритм, если он затрагивается этими исправлениями.
Перечисленные подэтапы могут повторяться многократно (включая и этап трансляции, точнее перетрансляции), до тех пор, пока контроль покажет, что ошибок в программе, по-видимому, нет.
Замечание. Поиск и исправление ошибок в программе происходит и на более ранних этапах ее разработки, но там он имеет подготовительный характер и отличается тем, что основным материалом при этом является текст программы, а не результаты ее работы.
Для возможности эксплуатации программы она должна быть оформлена: составлено ее описание, изготовлены машинные носители для передачи программы пользователям. В описание включается инструкция по использованию программы, излагается примененный метод решения, приводятся алгоритмы (иногда и текст программы), а также контрольные примеры с эталонными результатами. Наличие описания программы позволяет не только успешно эксплуатировать ее длительное время, но и проводить модернизацию и использовать в дальнейших разработках. Основную часть описания составляют материалы, с которыми шла работа на предыдущих этапах разработки (проект разработки и описание метода решения, общая блок-схема, алгоритмы, проект инструкции для пользователя и т.п.). Поэтому для ускорения этапа оформления все перечисленные материалы всегда должны быть в рабочем состоянии и по содержанию вполне соответствовать друг другу и отлаживаемой программе.
Эксплуатация
По окончании отладки и оформления программы начинается ее эксплуатация. Первые полученные результаты реальных расчетов подвергаются тщательному анализу, чтобы убедиться в пригодности использованного метода и установить согласованность полученных результатов с имеющимися данными и теорией. Если правильность получаемых результатов не вызывает сомнений и эффективность программы удовлетворительна, то ее эксплуатация продолжается по мере необходимости.
Отчет о работе
На основании результатов, полученных в ходе эксплуатации программы, составляется отчет о проделанной работе, оценивается выбранный метод решения задачи и эффективность программы; публикуются научные выводы.
Модернизация
При постоянной работе в некоторой области науки или техники, обычно рано или поздно наступает такой момент, когда возникает вопрос о модернизации старой программы или о составлении новой, развивающей идеи, реализованные в прежней программе. Модернизация программы проходит те же этапы, что и разработка, и начинается с составления технического задания на модернизацию. Успешное осуществление модернизации зависит от того, насколько легко можно будет при разработке новой программы использовать блоки старой программы и вносить в них изменения. Быстрое выполнение такого рода работ зависит, в свою очередь, как от структуры модернизируемой программы, так и от качества ее оформления (наличие описания программы, подробных алгоритмов, пояснений к программе и т.п.).
2.5 Необходимость отладки программного продукта
Оказывается, практически невозможно составить реальную программу без ошибок, и почти невозможно для достаточно сложной программы быстро найти и устранить все имеющиеся в ней ошибки.
Таким образом, можно сказать, что наличие ошибок в только что разработанной программе - это вполне нормальное и закономерное явление. А совсем ненормальным, из ряда вон выходящим фактом, является отсутствие ошибок в программе, которая не была еще подвергнута тщательной отладке. Конечно, речь здесь идет о реальных, достаточно сложных программах. Учитывая этот печальный закон, разумно уже при разработке программы на этапах алгоритмизации и программирования готовиться к обнаружению ошибок на стадии отладки принимать профилактические меры по их предупреждению. Например, уже на этапе когда выбирается общий, метод решения задачи, следует разработать и основную стратегию отладки, общий план ее проведения. Необходимо уже на этой стадии разработки программы решить, каким путем можно будет в дальнейшем убедиться, что выбранный метод решения задачи обеспечивает правильные результаты для указанных в ТЗ диапазонов изменения величин и условий функционирования программы.
Разрабатывая алгоритм, следует, таким образом, учитывать, можно ли будет достаточно просто проконтролировать программу, составленную по выбранному алгоритму, и в случае, когда предвидятся большие затруднения, нужно отдать предпочтение другому, более выгодному для этапа отладки, алгоритму.
Стремление к максимально быстрому составлению программы с целью скорейшего начала (и окончания) ее отладки, приводит к тому что: отладка затягивается надолго, получение достоверных результатов откладывается на длительный срок. Такая задержка вызывается тем, что уже на поздних этапах отладки (а иногда - и эксплуатации) вскрываются все новые и новые ошибки, допущенные на этапах алгоритмизации и программирования, и приходится тратить много времени на их обнаружение и исправление. Отсюда можно сделать вывод, что кратность внутреннего цикла становится слишком большой, и при этом захватываются и этапы 2.4.3. и 2.4.4., а иногда и кратность внешнего цикла (от этапа 2.4.2 до 2.4.9.), оказывается отличной от единицы.
Напрашивается вывод, что для ускорения отладки нужно сократить кратности указанных циклов, выходя на машину с программой уже тщательно проверенной и подготовленной заранее к отладке.
Подобные документы
Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.
отчет по практике [296,1 K], добавлен 19.04.2015Структурная диаграмма программного модуля. Разработка схемы программного модуля и пользовательского интерфейса. Реализация программного модуля: код программы; описание использованных операторов и функций. Вид пользовательской формы с заполненной матрицей.
курсовая работа [215,3 K], добавлен 01.09.2010Структурная диаграмма программного модуля. Нахождение суммы элементов, находящихся над главной диагональю. Реализация программного модуля: код программы; описание использованных операторов и функций. Особенности тестирования программного модуля.
курсовая работа [146,6 K], добавлен 01.09.2010Обоснование необходимости разработки компьютерной системы тестирования студентов. Анализ используемого программного и технического обеспечения на предприятии. Требования к функционированию модуля. Сведения о программе: структура, настройка и проверка.
курсовая работа [1,7 M], добавлен 13.06.2017Функционально-модульная структура программного обеспечения контроллера домофона. Электронная схема электронного замка, модуля микрофона и динамика. Выбор комбинированного источника питания. Разработка программного модуля. Программа управления домофоном.
курсовая работа [484,7 K], добавлен 29.03.2017Основные стадии разработки, принципы тестирования и отладка программного модуля "VFS". Особенности проектирования на языке UML. Методы "грубой силы" и их применение при отладке программы. Вредные факторы, присутствующие на рабочем месте программиста.
дипломная работа [827,0 K], добавлен 07.03.2012Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.
курсовая работа [81,7 K], добавлен 18.08.2014Разработка программного модуля, позволяющего создать с помощью шаблона класса "бинарное дерево" картотеку абонентов, содержащую сведенья о телефонах и их владельцах. Выбор технологии, языка и среды программирования. Выбор стратегии тестирования программы.
курсовая работа [1,1 M], добавлен 11.12.2010Разработка концептуальной модели базы данных. Реализация алгоритмов и разработка управляющей программы. Разработка структуры системы управления данными. Методика проведения и результаты тестирования. Функционирование разработанного программного модуля.
курсовая работа [550,5 K], добавлен 08.06.2023Методика разработки программного модуля для нахождения методом хорд корня уравнения x3-x-0,3=0 с точностью до 0,001 на языке программирования Visual Basic for Application. Схема программного модуля и описание процедуры обработки кнопки "Найти корни".
курсовая работа [394,0 K], добавлен 08.09.2010