Курсовая работа: Этапы разработки программы на языке программирования
Язык программирования
Самому написать программу в машинном коде весьма сложно, причем эта сложность резко возрастает с увеличением размера программы и трудоемкости решения нужной задачи. Условно можно считать, что машинный код приемлем, если размер пр6граммы не превышает нескольких десятков байтов и нет потребности в операциях ручного ввода / вывода данных.
Поэтому сегодня практически все программы создаются с помощью языков программирования. Теоретически программу можно написать и средствами обычного человеческого (естественного) языка – это называется программированием на метаязыке (подобный подход обычно используется на этапе составления алгоритма), но автоматически перевести такую программу в машинный код пока невозможно из-за высокой неоднозначности естественного языка.
Языки программирования – искусственные языки. От естественных они отличаются ограниченным числом «СЛОВ», значение которых понятно транслятору, и очень строгими правилам и записи команд. Совокупность подобных требований образует синтаксис языка программирования, а смысл каждой команды и других конструкций языка – его семантику. Нарушение формы записи про граммы приводит к тому, что транслятор не Может понять назначение оператора и выдает сообщение о синтаксической ошибке, а правильно написанное, но не отвечающее алгоритму использование команд языка приводит к семантическим ошибкам (называемым еще логическими ошибками или ошибками времени выполнения).
Процесс поиска ошибок в программе называется тестированием, процесс устранения ошибок – отладкой.
Уровни языков программирования
Разные типы процессоров имеют разные наборы команд, Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкою уровня. В данном случае «низкий уровень» не значит «ПЛОХОЙ». Имеется в виду, что операторы языка близки к машинному коду и ориентированы на конкретные команды процессора.
Языком самого низкого уровня является язык ассемблера, который просто представляет каждую команду машинного кода, но не в виде чисел, а с помощью символьных условных обозначений, называемых мнемониками, Однозначное преобразование одной машинной инструкции в одну команду ассемблера называется транслитерацией. Так как наборы инструкций для каждого модели процессора отличаются, конкретной компьютерной архитектуре соответствует свой язык ассемблера, и написанная на нем про грамма может быть использована только в этой среде.
С помощью языков низкого уровня создаются очень эффективные и компактные про граммы, так как разработчик получает доступ ко всем возможностям процессора. С другой стороны, при этом требуется очень хорошо понимать устройство компьютера, затрудняется отладка больших приложений, а результирующая программа не может быть перенесена 'На компьютер с другим типом процессора. Подобные языки обычно применяют для написания небольших системных приложений, драйверов устройств, модулей стыковки с нестандартным оборудованием, когда важнейшими требованиями становятся компактность, быстродействие и возможность прямого доступа к аппаратным ресурсам. В некоторых областях, например в машинной графике, на языке ассемблера пишутся библиотеки, эффективно реализующие требующие интенсивных вычислений алгоритмы обработки изображений.
Языки программирования высокого уровня значительно ближе и понятнее человеку, нежели компьютеру. Особенности конкретных компьютерных архитектур в них не учитываются, поэтому создаваемые программы на уровне исходных текстов легко переносимы на другие платформы, для которых создан транслятор этого языка. Разрабатывать программы на языках высокого уровня с помощью понятных И мощных команд значительно проще, а ошибок при создании про грамм допускается гораздо меньше.
Комплексная отладка программыТестирование при комплексной отладке – применение программы к конкретным данным, которые могут возникнуть у пользователя, но, возможно, в моделируемой (а не в реальной) среде.
Тестирование архитектуры программного средства. Целью тестирования является поиск несоответствия между описанием архитектуры и совокупностью программ программного средства. К моменту начала тестирования архитектуры программы должна быть уже закончена автономная отладка каждой подсистемы.
Тестирование внешних функций. Целью тестирования является поиск расхождений между функциональной спецификацией и совокупностью программ программного средства. Несмотря на то, что все эти программы автономно уже отлажены, указанные расхождения могут быть,
Тестирование качества программы. Целью тестирования является поиск нарушений требований качества, сформулированных в спецификации качества программного средства. Завершенность программы проверяется уже при тестировании внешних функций.
Тестирование документации по применению программы. Целью тестирования является поиск несогласованности документации по применению и совокупностью программ программного средства а также выявление неудобств, возникающих при применении программы. Этот этап непосредственно предшествует подключению пользователя к завершению разработки программного средства.
Тестирование определения требований к программе. Целью тестирования является выяснение, в какой мере программного средства не соответствует предъявленному определению требований к нему. Особенность этого вида тестирования заключается в том, что его осуществляет организация-покупатель или организация-пользователь. Обычно производится с помощью контрольных задач – типовых задач, для которых известен результат решения.
Организация тестирования в объектно-ориентированных системах
Тестирование является достаточно независимым процессом, применимым к программному обеспечению, разработанному с помощью любого метода проектирования. Тем не менее объектно-ориентированный подход привносит свои особенности.
Традиционно тестирование делится на тестирование элементов, интеграционное тестирование и системное тестирование.
На уровне элементов тестирование объектно-ориентированных программ отличается по следующим показателям:
· определение единиц тестирования;
· тестирование наследования;
· тестирование полиморфизма.
Естественной единицей тестирования является класс. Разбиение его на более мелкие элементы (методы) нецелесообразно, поскольку они не существуют отдельно от классов. Иногда за единицу тестирования принимается тесно связанная группа классов.
Тестирование наследования состоит в тестировании методов, унаследованных классом от своего базового класса. Если базовый класс уже прошел тестирование, нужно ли повторять тестирование для унаследованных методов – Вопреки достаточно распространенным надеждам программистов перетестирование необходимо. Основная причина та, что методы выполняются в новом контексте.
Применимость тестовых сценариев базового класса для тестирования производного класса зависит от того, является ли наследование классификацией. Если нет, то даже для унаследованных методов необходимо разрабатывать новые тестовые сценарии.
Тестирование полиморфизма сходно с тестированием наследования в том, что в тестовых сценариях необходимо предусмотреть все варианты связывания, т.е. все варианты конкретной реализации полиморфизма.
Интеграционное тестирование представляет собой тестирование того, как отдельные элементы программы работают вместе. Свойства объектно-ориентированных языков исключают целый ряд возможных ошибок, прежде всего за счет строгого определения внешних интерфейсов классов и объектов. Однако это не означает, что интеграционное тестирование становится легче. Планирование интеграционного тестирования немного отличается.
При традиционном тестировании имеется такая характеристика, как степень покрытия кода. При тестировании по принципу открытого, или белого ящика (т.е. в случае, когда тестирующему известна структура кода) необходимо обеспечить прохождение управления по всем ответвлениям программы. Иными словами, требуется выполнить как можно больший процент инструкций, имеющихся в программе. Наряду с этой характеристикой планирование тестов для объектно-ориентированной программы должно включать «покрытие состояний».
То, что объект соединяет в себе состояние и поведение, обусловливает необходимость проверки всех возможных переходов из состояния в состояние. В планировании таких тестов должна помочь модель состояний класса, построенная на этапе анализа и проектирования.
Системное тестирование проверяет всю программную систему целиком и строится в большинстве случаев по принципу «черного ящика». Тестирующий знает только внешние характеристики системы, но не знает, как она работает.
Построение требований к системе в форме вариантов использования обеспечивает естественный и простой способ планирования системного тестирования. Фактически система вариантов использования становится основой плана тестов на этапе системного тестирования.
Программная документация
Пожалуй, самым неприятным и тяжелым этапом программистской работы является создание программной документации. К сожалению, обычно этому либо не учат совсем, либо, в лучшем случае, не обращают на качество получаемых документов должного внимания. Тем не менее, владение этим искусством является зачастую одним из важнейших фактором, определяющим качество программиста.
Во-первых, умение создавать программную документацию определяет профессиональный уровень программиста. Заказчик не будет вникать в тонкости и особенности даже самой замечательной программы. Заказчик будет сначала читать документацию. Большую роль играет в этом и психологический фактор. В частности, во всем мире ценилась (и ценится сейчас) былая советская школа программирования. Современные же отечественные программисты котироваться перестали. Класс не тот. Нынче программы уже не пишутся, а составляются (а это – «две большие разницы»). Так вот, созданный в «классическом» стиле пакет программной документации (далее – ПД) создаст у вашего заказчика или работодателя самое что ни на есть благоприятное впечатление. Тем более, если автор ПД будет избегать фраз вида «кликните на скроллбар…», «винт» и т.п. К сожалению, за подобной жаргонной трескотней обычно скрывается либо скудость мыслей, либо полная пустота (неизгладимое впечатление произвел на автора рассказ одного его знакомого о неком «геймере», который с кем-то там то ли «чатился», то ли «модераторством» занимался или что-то в этом роде.). Язык ПД – это своего рода бюрократический, весьма консервативный язык. Есть в нем своя особая прелесть. Согласитесь, что термины НЖМД, НГМД, ручной манипулятор типа «мышь» (или «колобок», как значилось в одном из старинных пакетов ПД) звучат совсем иначе, нежели соответствующие «винт», «флоп» и просто «мышь». Между прочим, дело уже дошло до того, что, говорят, появилась даже особая специальность – технический писатель, т.е. человек, умеющий создавать программную документацию.
Во-вторых, грамотно составленный (точнее, созданный) пакет ПД избавит вас от многих неприятностей. В частности, избавиться от назойливых вопросов и необоснованных претензий можно просто отослав пользователя к документации. Это касается прежде всего важнейшего документа – Технического задания. Об этом мы будем говорить ниже, а сейчас можно напомнить о многомиллионном иске к компании IBM. Этот иск предъявило одно крупное издательство, неудовлетворенное качеством ВТ и программного обеспечения. IBM суд выиграла. И выиграла только благодаря тому, что предъявила подписанное обеими сторонами Техническое задание. Было это давно, еще в 70-х гг., однако сути дела это не меняет.
И еще одно. Важно создать первый пакет ПД. Этого будет достаточно, чтобы на его основе строить все последующие, используя его как образец или шаблон. Но сделать это надо очень качественно. Не спеша. Очень основательно.
Для начала необходимо вооружиться ГОСТами. ГОСТ определяет все. В частности, в него входит и интересующая нас Единая система программной документации (ЕСПД).
Техническое задание оформляют на листах формата А4 и / или А3, как правило, без заполнения полей листа. Номера листов (страниц) проставляют в верхней части листа над текстом.
Для внесения изменений и дополнений в техническое задние на последующих стадиях разработки программы или программного изделия выпускают дополнение к нему. Согласование и утверждение дополнения к техническому заданию проводят в том же порядке, который установлен для технического задания.
Техническое задание должно содержать следующие разделы:
1. Наименование и область применения;
2. Основание для разработки;
3. Назначение разработки;
4. Технические требования к программе или программному изделию;
5. Технико-экономические показатели;
6. Стадии и этапы разработки;
7. Порядок контроля и приемки;
8. Приложения.
В зависимости от особенностей программы или программного изделия допускается уточнять содержание разделов, вводить новые разделы или объединять отдельные из них.
Список литературы
1. Информатика базовый курс. 2-е издание / Под ред. С.В. Симоновича. – Спб.: Питер, 2008. – 640 с.: ил
2. Гейн А.Г., Сенокосов А.И. справочник по информатике для школьников. – Екатеринбург: «У-Фактория», 2003. – 346 с.