Смекни!
smekni.com

Курс лекций (стр. 6 из 24)

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

Кодирование обычно является наиболее простым этапом, а его реализация облегчается при использовании алгоритмических языков высокого уровня и методов структурного программирования. Было показано (B.Boehm, 1975), что в среднем приблизительно 64% всех ошибок вносится на этапе проектирования и лишь 36% - на этапе кодирования.

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

Модуль, прошедший автономное тестирование, попадает под комплексное тестирование, в процессе которого производится совместная проверка групп программных компонентов. Системное (оценочное) тестирование предполагает испытание системы в целом с помощью независимых тестов. Для случая, когда сравниваются характеристики нескольких систем (например, изготовленных разними исполнителями), такая процедура известна, как сравнительное тестирование.

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

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

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

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

ЯЗЫКИ ПРОГРАММИРОВАНИЯ

Следует еще раз повторить, что компьютер может обрабатывать команды и данные только тогда, когда они представлены в машинном коде, т.е. выражены на языке нулей и единиц, непосредственно связанном с электронной «начинкой» компьютера. Машинная команда состоит из кода операции и адресной части (рис.). Код операции указывает вид выполняемого действия (сложить, вычесть и т.д.). Адресная часть содержит адреса (номера) ячеек памяти, в которых расположены операнды, и адрес ячейки, куда следует поместить результат. Преимущества машинного кода – детализация управления, максимальная эффективность. Недостатки – трудность написания кода, его тестирования и последующего сопровождения.

Создание программ в более привычном человеку виде, нежели машинный код, связано с использованием машинно-ориентированных языков (языков ассемблера). Такие языки отличаются от машинного кода тем, что коды операций заменены буквенными обозначениями и вместо номеров ячеек используются символические адреса. Время появления языка ассемблера относится к началу 50-х годов, когда авторы машины «ЭДСАК» ввели систему мнемоники, где каждая машинная команда представлялась одной заглавной буквой (S – вычитание, I – прочитать следующий ряд дырочек во входной бумажной ленте, Т – передать информацию в память, Z – остановка машины). Они назвали эту систему assembly system (собирающая система), отсюда название ассемблер (кроме мнемоники, также была введена библиотека стандартных подпрограмм).

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

Языки ассемлера используются и в настоящее время, поскольку тесно связаны с машиной; дествительно, язык ассемлера – это машинно-зависимый язык, спроектированный так, чтобы он соответствовал набору машинных команд, заложенных в центральный процессор конкретного компьютера. Язык ассемлера предпочитают те программисты, которые стремяться сжать свои программы до минимального размера, что позволяет выполнить их максимально быстро и эффективно. Однако ассемблер имеет и свои недостатки. Поскольку он ближе к языку машины, чем к естественному языку, то весьма труден для работы. Тот кто пользуется языком ассемлера, должен быть близко знаком с работой компьютера – например, должен знать шаги, которые выполняет компьютер при том или ином действии. Более того, поскольку ассемблер машинно-зависим, программа, написанная на ассемблере одного компьютера, абсолютно непонятна компьютеру другого типа. Языки ассемблера – это языки низкого уровня. 8088 (ХТ) - ассемблер работает только с целыми числами. 8087 - сопроцессор позволяет работать и с вещественными.

Языки программирования, имиттирующие естественные языки и способные на основании одного предложения строить несколько команд компьютера, принято считать языками высокого уровня. Но по сравнению с естественными языками, они, как правило, более строги и точны, в них остутствует многозначность слов, употребление их в переносном смысле, игра слов и т.д. В настоящее время насчитывается несколько сотен таких языков; если же учитывать все их варианты, называемые диалектами то, возможно, и более тысячи.

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

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

Самого лучшего языка программирования не существует, как нет самого лучшего естественного языка.

Теоретически для решения большинства задач можно использовать любой язык. Однако на практике оказывается, что написать программу для конкретной задачи гораздо легче на одних языках, чем на других. Это связано с тем, что в языках программирования способ выражения те или иных понятий приспособлен к потребностям конкретного образа мыслей.

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

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

БЕЙСИК (BASIC). Сравнительно несложен для изучения и хорошо подходит для разработки коротких и простых программ. В то же время большие программы на этом языке могут оказаться неуклюжими и плохо организованными. В свое время завоевал признание своей компактностью и пригодностью для первых персональных компьютеров с их ограниченным объемом памяти. VB хорош для маленьких приложений, которые должны быть написаны быстро и относительно неопытными программистами. Недостаток VB – не поддерживает некотороые важные конструкции: указатели или числовые типы данных без знака (абстрактные переменные?).