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