Как вы знаете, новые программы для компьютеров пишут программисты. Но это не совсем точно: любая достаточно сложная программа проходит несколько этапов от рождения идеи до выпуска готового продукта, и в этом участвует множество специалистов.
1. Постановка задачи. Сначала определяют задачи, которые должна решать программа, и записывают все требования к ней в виде документа — технического задания. Это очень важный этап, потому что ошибка в самом начале разработки приведёт к тому, что будет решена совершенно другая задача.
2. Построение модели. Когда задача поставлена, нужно выполнить формализацию — записать все требования на формальном языке, например на языке математических формул. В результате строится модель исходной задачи, в которой чётко определяются все связи между исходными данными и желаемым результатом.
3. Разработка алгоритма и способа представления данных. Любая компьютерная программа служит для обработки данных. Поэтому очень важно определить, как будут представлены данные в памяти компьютера (например, в виде отдельных переменных или массивов).
Как Составить Самому Себе Программу Тренировок
Способ хранения данных определяет и алгоритмы работы с ними: если выбрана неудачная структура данных, очень сложно написать хороший алгоритм обработки. Известная книга швейцарского специалиста Никлауса Вирта, автора языка Паскаль, так и называется «Алгоритмы 4- структуры данных = программы».
4. Кодирование. Только теперь, когда выбран способ хранения данных и готовы алгоритмы для работы с ними, программисты приступают к написанию программы. Эта работа называется кодированием, потому что программист кодирует алгоритм — записывает его на языке программирования. Результат его работы — текст программы — часто называют программным кодом.
5. Отладка. Ни один человек не может написать достаточно большую программу без ошибок. Поэтому программисту приходится искать и устранять ошибки в программах. Этот процесс называется отладкой программы.
Все ошибки можно разделить на две группы: синтаксические ошибки и логические ошибки. Синтаксические ошибки — несоответствие правилам языка программирования — обнаруживаются транслятором, поэтому найти и исправить их достаточно просто.
Сложнее исправлять логические ошибки — ошибки в составлении алгоритма. Из-за логических ошибок программа работает не так, как требуется. Чтобы исправить такую ошибку, программисту приходится внимательно изучить работу программы, иногда даже выполнить многие вычисления вручную, без компьютера, и сравнить результаты каждого шага с теми результатами, которые даёт программа.
Логические ошибки могут привести к отказу — аварийной ситуации, например к делению на ноль. Часто при отказе операционная система завершает работу программы, и данные могут быть потеряны. Отказы часто называют ошибками времени выполнения (англ. runtime error).
6. Тестирование. Когда программист исправил все обнаруженные им ошибки, он передаёт программу на тестирование — тщательную проверку в различных режимах. Обычно эту работу выполняют специально обученные люди — тестировщики.
Уроки по С++.1 урок.Как создать программу?
Тестирование в компании, которая разрабатывает программу, называется альфа-тестированием. Когда оно завершено, начинается бета-тестирование (внешнее тестирование). Программа (бета- версия) рассылается некоторым клиентам или даже распространяется свободно. Цель этого этапа — привлечь к тестированию множество людей, чтобы они смогли найти как можно больше ошибок в программе.
7. Документирование — это разработка документации на программу. Этим занимаются технические писатели. Техническая документация описывает, как работает программа, а руководство пользователя содержит инструкцию по использованию программы.
8. Внедрение и сопровождение. Когда программа отлажена и документация по ней готова, её нужно передать заказчику. Компания берёт на себя сопровождение программы — обучение пользователей, исправление найденных ими ошибок, техническую поддержку (ответы на вопросы). Часто компании выпускают новые версии программ, в которых исправляются ошибки и добавляются новые возможности.
Методы проектирования программ
Современные программы очень сложны, они могут состоять из сотен тысяч и миллионов строк. Написать такую программу в одиночку невозможно, поэтому над проектом работают большие команды программистов. Нужно как-то разделить работу между ними, чтобы каждый мог выполнять свою часть независимо от других. Для этого необходимо разбить задачу на подзадачи (рис. 4.7).
Рис. 4.7
Решение каждой подзадачи оформляется в виде подпрограммы — вспомогательного алгоритма (вспомните материал 7 класса). Программист получает персональное задание — написать одну или несколько подпрограмм. Он может работать независимо от других, важно только соблюдать правила обмена данными между «его» подпрограммой и остальными.
Если нужно, подзадачи разбиваются на более мелкие подзадачи (см. третий уровень дерева на рис. 4.7) и т. д., пока все подпрограммы не будут записаны полностью на языке программирования. Обычно подпрограмма не должна быть длиннее, чем 30—40 строк.
Такой приём называется последовательным уточнением или проектированием «сверху вниз», от основной задачи к мелким подзадачам.
Существует и другой подход — проектирование «снизу вверх»: сначала разработать подпрограммы для решения самых простых задач, а потом собирать из них подпрограммы для более крупных задач, как из кубиков. При этом мы строим дерево, показанное на рис. 4.7, снизу вверх, с нижнего уровня. На практике программисты обычно сочетают оба подхода.
Отладка программы
Простейший метод отладки программы — это вывод отладочной информации. Рассмотрим этот способ на примере.
Программисту нужно было написать программу, которая вычисляет корни квадратного уравнения ах 2 + bх + с = 0. Он поспешил и написал программу так:
Для вычисления квадратного корня здесь используется стандартная функция sqrt. Оказалось, что программа в некоторых случаях работает верно (например, при а = 1, b = 2 и с = 1), а в других случаях — неверно (например, при а = 1, b = -5 и с = 6).
Для того чтобы найти ошибку, нужно определить её возможные причины. В нашем случае есть три варианта:
1) неверно вводятся данные;
2) неверно вычисляется дискриминант D = b 2 -4ас;
3) неверно вычисляются корни
Добавим в программу две дополнительные команды для вывода отладочной информации:
1) выведем значения коэффициентов а, Ъ и с сразу после ввода;
2) выведем вычисленное значение дискриминанта.
Значения корней уравнения уже и так выводятся в конце работы программы.
При вводе коэффициентов 1, -5 и 6 программа (на алгоритмическом языке) выводит:
По первой строке видим, что ввод выполнен правильно — именно такие числа мы вводили. А вот значение дискриминанта, вычисленного программой, отличается от того, что мы ожидаем получить: D = (-5) 2 — 4 • 1 • 6 = 1. Поэтому нужно искать ошибку в выражении для вычисления D.
Если исправить эту ошибку (сделайте это самостоятельно), мы увидим, что дискриминант считается правильно, а корни уравнения — нет (при а = 1, 5 = -5 и с = 6 мы должны получить х1 = 3 и х2 = 2). Поэтому останется исправить ошибки в строках, где вычисляются корни.
Современные среды программирования, в том числе КуМир, АЛГО и PascalABC.NET, содержат встроенный отладчик, который позволяет:
• выполнять программу в пошаговом режиме;
• после выполнения очередной команды просматривать значения переменных в памяти;
• устанавливать точки останова, где программа должна остановиться и перейти в пошаговый режим.
Доработайте программу так, чтобы учесть случай, когда уравнение не имеет вещественных корней.
Документирование программы
К выпуску программы компания-разработчик должна подготовить документацию на программу. Руководство пользователя (это наиболее важная часть документации) содержит всю информацию, необходимую для использования программы:
• назначение программы;
• формат входных данных;
• формат выходных данных;
• примеры использования программы.
Для примера составим документацию на простую программу, отладкой которой мы только что занимались.
Назначение программы: вычисление корней квадратного уравнения ах 2 + bх + с = 0.
Формат входных данных: значения коэффициентов а, b и с вводятся с клавиатуры через пробел в одной строке.
Формат выходных данных: значения корней уравнения выводятся на экран через пробел в одной строке; перед значением первого корня выводится текст х1=, перед значением второго корня — текст х2=.
Пример использования программы (решение уравнения х 2 — 5х + 6 = 0):
Введите а, b, с: 1 -5 6
Выводы
• Этапы разработки программного обеспечения:
— постановка задачи;
— построение модели;
— разработка алгоритма и способа представления данных;
— кодирование;
— отладка;
— тестирование;
— документирование;
— внедрение и сопровождение.
• При использовании метода проектирования «сверху вниз» (метода последовательного уточнения) задача разбивается на подзадачи, каждая из подзадач оформляется в виде вспомогательного алгоритма. Сначала составляется основная программа, а затем все вспомогательные алгоритмы.
• При использовании метода проектирования «снизу вверх» разработка программы начинается с наиболее мелких подзадач, из которых основная программа затем собирается, как из кубиков.
Нарисуйте в тетради интеллект-карту этого параграфа.
Вопросы и задания
1. Почему алгоритмы и способы хранения данных разрабатываются одновременно?
2. Чем отличается тестирование от отладки?
3. Можно ли считать, что программа, успешно прошедшая тестирование, не содержит ошибок?
4. Может ли произойти отказ в программе, в которой нет логических ошибок?
5. Если программа плохо документирована, к каким последствиям это может привести?
6. Как вы думаете, почему важно сопровождение программы после её сдачи заказчику?
7. Чем отличаются два подхода к проектированию программ: «сверху вниз» и «снизу вверх»?
8. Выполните по указанию учителя задания в рабочей тетради.
Подготовьте сообщение
а) «Структурное программирование»
б) «Парадигмы (стили) программирования»
§23. Как разрабатывают программы?
Источник: murnik.ru
Что такое правильная разработка программ?
Что такое правильная разработка программных систем? Что является правильным? Создаете ли вы «программу на коленке» или используете новейшие методологии RUP , XP , UML , или что-то более экзотическое. Когда можно сказать, что разработка правильна, что является критерием? Вот некоторые мысли по этому поводу.
Мне кажется, что этот вопрос, вынесенный в заголовок, сродни уже обсуждавшемуся на страницах сайта вопросу, какой язык программирования лучше Delphi или VC ++? Найдется масса людей, которые проигнорируют его, и будут доказывать вам, что все этих «сях» и «дельфях» нет ничего интересного и Visual Basic самый лучший из когда-нибудь написанных человечеством языков программирования.
Ведь он такой простой, в нем нет никаких там классов или еще чего-нибудь такого, что можно может быть использовано при работе со страшным, похожим на ругательство словом UML .
И оставим этих людей при их мнении, поскольку разубеждать человека в чем-то занятие неблагодарное. Итак, не будем касаться вопроса, на чем или при помощи каких средств создаются программы, а подумаем о том, как они создаются, т.е. нас интересует собственно процесс. (Как в анекдоте про поручика Ржевского, которого спросили «Вы любите детей?», ответ, я думаю, вам известен*)
Представим, что есть такой программист или системный администратор, в общем, человек, которого сегодня называют гордым именем « IT специалист» Вася Пупкин (персонаж полностью вымышленный и все совпадения с реальными людьми в части имени фамилии или отчества, года рождения и вероисповедания, совершенно случайны).
Как истинно русский человек, он приходит на работу к обеду, зато до трех часов ночи может долбить по клавишам компьютера. Когда он в настроении, то может написать какой-нибудь мудреный алгоритм, которым потом похвастается перед друзьями, а когда не в духе, то гоняет по сети в «кваку» или просто «чатится»**.
Итак, наш Василий в свободное от основной работы время, или даже на работе, когда начальство смотрит в другую сторону, пишет под заказ небольшие программы, скажем на Visual Basic , макроязыке 1 C , Delphi (выберите нужное и подчеркните это на своем мониторе), которые автоматизируют рутинные операции в какой-нибудь знакомой бухгалтерии, для его девушки, бабушки или просто знакомых (продолжаем интенсивно подчеркивать).
Совершенно не используя никаких новомодных штучек, не нуждаясь в команде аналитиков и тестеров (с которыми потом нужно делиться дивидендами) он получает за свою работу нормальное вознаграждение, которого хватает на пиво с друзьями, и совершенно, ну то есть абсолютно доволен жизнью (что даже как-то странно в наше время).
Как вы думаете, он правильно разрабатывает программы, не используя никаких методологий, не написав ни строчки официальных документов и не нарисовав в Rational Rose , Visio или еще Бог знает в чем, каких-нибудь UML диаграмм? На мой взгляд, такая разработка совершенно правильна. И я могу аргументировать эту точку зрения, читайте дальше.
Как говорят, не переключайтесь на другой канал, мы вернемся к вам после рекламной паузы :).
Есть определенная цель разработки, которая может быть не всегда точно очерчена и осознается, но она есть всегда. В нашем случае – эта работа делается, для того чтобы создать нужный кому-то программный продукт, за который и будет получено вознаграждение.
Если вознаграждение наш программист получает, значит – цель достигнута. Вознаграждение может быть получено как в денежном эквиваленте, так и в форме опыта, признания товарищей, получения внутреннего удовлетворения от глубины собственного интеллекта и т.д.
Однако если программа делается для пользователя, коим не является сам программист, то его (пользователя) меньше всего волнует, что там внутри и как организован процесс разработки. По большому счету его даже не волнует, сделана ли программа на Visual Basic или С++, главное, чтобы программа была не слишком «тормознутой», занимала не очень много места, стоила тех денег, которые за нее просят, и, самое главное, выполняла желаемые функции без большого количества «жучков»***, чтобы работа с программой не превращалась в хождение по минному полю, где «шаг вправо, шаг влево – расстрел на месте».
Итак, отталкиваясь от мысли, что получение адекватного вознаграждения, которого, к примеру, хватает на распитие легких спиртных напитков, а может и на ресторан, боулинг, поездки на Гаваи, за вполне определенную работу – есть показатель, что работа выполняется успешно (если вы еще подчеркиваете, то вам пора прекратить это занятие и идти за тряпочкой для протирки монитора). Если нашего Василия не поджидают вечером после работы разъяренные пользователи его программных продуктов, чтобы высказать ему все, что они о нем думают, а может не только высказать, что также является одним из показателей успешно выполненной работы.
Вознаграждение есть, пользователи не более или менее довольны – наш Василий идет правильным путем (согласно завещанию великого рассказчика).
Теперь немного расширим наш пример и представим, что небольшая компания-разработчик программного обеспечения до 10-15 человек, «клепает» свои программы для таких же небольших компаний, которые занимаются торговлей, штучным изготовлением мебели или чем-то подобным, но у которых оборот таков, что Excel или того хуже, бумажный гроссбух не справляется с ними.
Должна ли такая компания придерживаться объектно-ориентированных методов разработки, использовать UML , RUP , MSF или что-то еще? Вот здесь мы как раз и попадаем в ловушку. Мы не можем точно сказать, нуждается ли конкретная компания в этих средствах, если не рассмотрим то вознаграждение, которое она получает за свои труды.
Ведь эти средства только помогают ускорить разработку и сделать ее более качественной. А если компания-разработчик не нуждается в том, чтобы ее продукция выпускалась быстрее?
Если вы думаете, что таких уже нет, то ошибаетесь.
Я знал несколько компаний, руководители которых на вопрос о том, хотелось ли ему сделать разработку более быстрой и более качественной, а значит более дешевой и, соответственно, получать большие прибыли мне отвечал, что в этом нет необходимости (!).
На постановку процесса нужны дополнительные деньги, а компания нормально существует, доход ее стабилен и его (обычно!) хватает на оплату труда программистов и с трудом хватает на upgrade технических средств.
Да, программисты делают свое дело долго, не очень качественно, часто переделывают, но и платят им не особенно много, поскольку нужны кодировщики не очень высокого класса, достаточно студентов вузов, которые часто работают только за опыт и небольшие деньги.
Обычно, в таких компаниях есть жесткая иерархия.
Есть костяк профессионалов, на которых собственно и держится разработка, таких людей немного, один-два в компании и они могут общаться между собой, не пользуясь программными инструментами, а держа все вопросы в голове или в большой схеме на стене.
Правильно ли организован в такой компании процесс разработки? С точки зрения руководителя – совершенно правильно.
Цели достигаются, разработка идет, клиент, обычно, доволен. Зачем в таком случае тратить деньги на приобретение программных средств, для использования которых нужно нанять профессионалов или отправить всех своих работников на дорогостоящие курсы (а они после обучения найдут себе работу с большим окладом).
Небольшие компании вырабатывают собственный стиль ведения программных проектов, который со стороны выглядит несколько странно, но только на первый взгляд. Если приглядеться, то такие компании сами создают себе программные средства, которые облегчают им жизнь.
Например, я видел несколько программных продуктов в той или иной степени повторяющих функциональность Rational ClearQuest и разработанных для внутреннего использования. Хотя такие продукты и обладают меньшим набором функций, однако не меньшим, чем нужно для нормального ведения программного проекта в конкретной компании.
Такие компании создают собственные регламенты разработки, общаются по e — mail между собой и «подкручивают» ПО под заказчика без бюрократических проволочек. Процесс поставлен таким образом, что он как бы балансирует между затратами и прибылью и при нормальном ходе вещей он все-таки прибыльный.
И в конце концов, Microsoft или Oracle тоже не всегда были большими компаниями, они тоже начинали, и тоже вырабатывали свои методики.
Теперь мы непосредственно подошли к ответу на вопрос, вынесенный в заголовок. А именно, что такое правильная разработка программ? Я думаю, что для вас ответ уже очевиден.
Правильная разработка – не та, в которой используются самые последние методы и средства разработки. Правильная разработка – это процесс, приносящий дивиденды. Не так важно, в каком виде приходят эти дивиденды, и не важно, сколько затрачено на это времени и сил. Возможно, это время можно было сократить, но после того, как проект закончен уже трудно об этом судить.
Важно, что прибыль компания или отдельный разработчик получает именно здесь и сейчас и это его устраивает.
* * *
P . S . Однако, если вас в чем-то не устраивает процесс разработки, в котором вы участвуете, или вы задумываетесь о будущем, то вам стоит немного почитать о современных методах и средствах создания программных систем.
______________________________________________________
*Имеется ввиду анекдот
– Поручик, Вы любите детей?
– Детей-с, хм…, но сам процесс…** Quake – известная стрелялка («шутер»).
Чатиться – общаться посредством чата.
*** bug – жучок, как часто называют ошибки в программах.
Вася: «у меня глаза теперь открылись. «
А статья вполне любопытна. Но я (прошу не бить ногами, это мое личное мнение) лучше бы почитал нечто более приземленное.
Борису:
Я не понимаю:
а) Что вы понимаете под настоящим программистом, и когда это Шалыто сказал вам, что он программист?
б) Зачем гадить человеку в месте, где он этого не увидит, вы так боитесь Шалыто, что не можете сказать ему это в лицо?
в) А вы написали 2 книги, десятки статей, попробовали поиметь дело с этими талантливейшими (не спорю. :-)) программистами и «испортить» их души? Не уверен на 100%, но думаю — нет. Как попробуете, расскажите результат — будет интересно 🙂
Не собираюсь защищать Шалыто (тем более не знаю кто он), но советую все же прислушаться к его словам. Видно, что человек сталкивался с серьезными вещами на практике! И не стоит здесь ИМХО студентам их личное отношение высказывать.
Статья, в общем, хороша тем, что достаточно точно описывает ситуацию создания ПО в большинстве фирм, а именно: практически полная безответсвенность программиста перед своим продуктом. Работаем по принципу «лишь бы продать», а потом, если что, патчей наклепаем.
А вы можете себе представить (судя по комментам к статье и автор и «сочувствующие» на практике не сталкивались с ПО для жизнекритичных систем.) такую задачу, где каждый «патч» может человеческих жизней стоить?? Например в системе управления тормозами грузовика? (я не говорю о системах ПРО или управления ядерным реактором).
В общем видно, что автор этой статьи даже не удосужился взглянуть на те методы, что предлагаются нынче для написания «правильного ПО». Существуют даже стандарты (напр. TickIT).
Заключение: Статья студента первокурсника о способах написания ПО. Описана живым и понятным языком.Но выводы сделаны просто ущербные!!
Источник: www.caseclub.ru
§1. Этапы разработки программы на языке Паскаль
Программа, написанная на любом языке программирования должна быть четко сформулирована на языке Паскаль . При написании программы необходимо придерживаться следующей структуры:
Первая необязательная строка программы: Program n ame, где вместо слова namе может быть любое другое слово, отвечающее за название программы. Название программы всегда должно начинаться с латинской буквы и состоять из одного слова, если необходимо в названии программы указать два слова, то эти слова соединяются знаком нижнего подчёркивания.
Следующей строкой программы, как правило, проописывается раздел объявления переменных V ar . В данной строке через запятую прописываются переменные, которые будут использованы в программе, с указанием их типа данных. Важно помнить, что имена переменных не должны совпадать с названием программы.
Далее следует раздел операторов, который начинается со служебного слова Begin , затем прописывается алгоритм решения конкретной задачи и заканчивается программа служебным словом End . Так же важно не забывать про синтаксис любой программы на языке программирования Паскаль: после каждой строки или завершенного действия ставится точка с запятой. Не ставится точка с запятой после слова Begin, возможно её опустить перед словом end, а так же после последнего слова End ставится точка, которая означает завершение программы.
§2. Структура простой программы на языке Паскаль
Рассмотрим cтруктуру простой программы на языке Паскаль на примере решения задачи нахождения площади круга заданного радиуса R .
Первым этапом решения задачи необходимо определить входные и выходные данные. К входным данным относится радиус круга R . К выходным данным площадь S . Для составления алгоритма так же необходимо знать формулу площади круга S = ? R 2 .
Значение ? возьмём равным 3,14.
Составим блок-схему алгоритма нахождения площади круга .
Первый блок – начало .
Второй блок ввода данных – параллелограмм, блок в котором записывается переменная R , так как именно это значение будет вводить пользователь.
Третий блок – прямоугольник, в котором записываем формулу нахождения площади круга .
Четвертый блок – параллелограмм вывода, с записанной в нем переменной S -результат вычислений.
Последний блок – конец .
Теперь, по имеющейся блок-схеме нам необходимо составить программу на языке программирования Паскаль.
Первая строка Program Square ;
Во второй строке необходимо описать переменные, которые будут участвовать в решении задачи, и определить их тип. Так как площадь круга находится с использованием значения = 3,14 , это означает, что переменная S будет типа Real. Так же пользователь при вводе радиуса круга может ввести вещественное значение переменной. Таким образом, раздел var содержит переменные S и R вещественного типа Real.
Обратите внимание, что раздел описания переменных var не реализован в блок-схеме, однако, при помощи блок-схемы возможно определить количество и тип переменных .
Третьей строкой программы будет слово begin, то есть начало. После соответствующего блока в блок-схеме следует параллелограмм ввода, однако, если пользователь не знает, что именно вводить, необходимо вывести подсказку. Для данной задачи подсказкой является фраза: «Введите радиус круга: ». Для вывода строки на экран монитора используют процедуру write или writeln . Важно помнить, что если при помощи процедуры write выводится строка, она должна быть заключена в апострофы.
После фразы-подсказки пользователь должен ввести значение переменной R c клавиатуры. Для того чтобы прочитать введенные данные с клавиатуры необходима процедура read или readln , в скобках пишется переменная, которая будет содержать вводимое значение.
Находим площадь круга: S:= 3.14 * R * R ; однако, нахождение переменной S, не означает, что пользователь увидел ответ. Необходимо вывести значение переменной при помощи процедуры write. Обратите внимание на то, что строка оформления «Площадь круга равна» и переменная S записаны через запятую.
Итак, результат будет выведен на экран монитора, значит, осталась последняя строка программы End.
§3. Краткие итоги по теме урока
Итак, структура простой программы состоит из строки Program, в которой указывается имя программы, раздела описания переменных Var, где определяется размер памяти, выделяемой на хранение переменных рассматриваемой задачи, последовательности действий, то есть алгоритм решения задачи, заключенный между словами Begin и End. Для вывода информации на экран монитора используется процедура Write или Writeln; для ввода – процедура Read или Readln.
Литература:
1. Босова Л.Л., Босова А.Ю. Информатика и ИКТ: учебник для 9 класса: в 2 ч. – М.: БИНОМ. Лаборатория знаний, 2012.
2. Семакин И.Г. Основы программирования: Учебник/ И.Г. Семакин, А.П. Шестаков. – 3-е изд., стереотип. – М.:Издательский центр «Академия», 2004.
Источник: znaika.ru