Постановка задачи — это процесс формулировки назначения программного обеспечения и основных требований к нему. Описываются функциональные требования, определяющие функции, которые должно выполнять программное обеспечение, и эксплуатационные требования, определяющие характеристики его функционирования. Этан постановки задачи заканчивается разработкой технического задания с принятием основных проектных решений.
Техническое задание в соответствии со стандартом ГОСТ 19.201—78 «Техническое задание. Требования к содержанию и оформлению» имеет следующие основные разделы:
- введение: наименование и краткая характеристика программного обеспечения;
- основание для разработки;
- назначение разработки: описание функционального и эксплуатационного назначения, функций;
- требования к программному изделию: к функциональным характеристикам, к надежности, к техническим средствам;
- требования к программной документации;
- технологические требования.
Другое описание:
Спецификация изменений требований: постановка задачи или база знаний
Постановка задачи — важнейший этап в разработке программы. Результатом должна быть спецификация программы.
Программная спецификация — точное описание того результата, который необходимо получить с помощью программы — это описание должно точно устанавливать, что должна делать программа, не указывая как она должна это делать.
Для программ, заканчивающих свою работу каким-либо результатом, программная спецификация может иметь форму спецификации ввода-вывода, которая описывает желаемое отображение множества входных величин и множества выходных величин.
Для циклических программ, в которых нельзя указать точку завершения невозможно дать спецификацию ввода-вывода, поэтому специфицируются отдельные функции, реализуемые программой в ходе циклических операций.
Постановка задачи разработки программного обеспечения является самым первым и наиболее важным этапом при проектировании программного обеспечения. Именно здесь закладывается фундамент будущей программы. Если на этом этапе допущены ошибки или не предусмотрены какие-то важные детали, то это отразится на конечном результате, а вносить изменения и исправления в такой проект будет крайне проблематично. Более того, если задача поставлена неверно, то ее дальнейшее решение не имеет смысла. На этапе постановки задачи необходимо ответить на следующие вопросы:
- существуют ли методы или способы решения задачи без использования ЭВМ, нужно ли решать данную задачу на ЭВМ;
- какую пользу принесет использование ЭВМ для решения задачи, что будет улучшено, ускорено, оптимизировано, сэкономлено при использовании ЭВМ, какова основная цель применения ЭВМ;
- что необходимо из оборудования, кроме универсальной ЭВМ, какой тип ЭВМ необходим для решения задачи, какая платформа(ы) ЭВМ может подойти, какая операционная система будет управлять работой ЭВМ, какое дополнительное программное обеспечение нужно;
- каковы бизнес-процессы и документооборот прикладной предметной области, где будет применяться разрабатываемое программное обеспечение;
- каков формат исходных (входных) данных, какие данные и в какой форме необходимы для решения задачи;
- каков формат промежуточных и выходных данных, какие данные и в какой форме необходимо получить;
- какой интерфейс пользователя программного обеспечения нужно обеспечить, какой интерфейс с дополнительным оборудованием необходим;
- какова «глубина» проработки пользовательской, инженерной, программной и конструкторской документации, эксплуатационных документов, методических пособий и руководств по использованию программы, кто и как будет применять результаты решения.
Способы записи алгоритма
- Вербальный – алгоритм описывается на человеческом языке (Рецепт любого блюда).
- Символьный – алгоритм описывается с помощью набора символов (Листинг программы).
- Графический – алгоритм описывается с помощью набора графических изображений (Блок схема).
Общепринятыми способами записи являются графическая запись с помощью блок-схем и символьная запись с помощью какого-либо алгоритмического языка.
Постановка задачи
Описание алгоритма с помощью блок схем осуществляется рисованием последовательности геометрических фигур, каждая из которых подразумевает выполнение определенного действия алгоритма. Порядок выполнения действий указывается стрелками.
Базовые конструкции в блок-схемах
1. Базовая структура «следование». Образуется последовательностью действий, следующих одно за другим:
2. Базовая структура «ветвление». Обеспечивает в зависимости от результата проверки условия (да или нет) выбор одного из альтернативных путей работы алгоритма. Каждый из путей ведет к общему выходу, так что работа алгоритма будет продолжаться независимо от того, какой путь будет выбран.
3. Базовая структура «цикл». Обеспечивает многократное выполнение некоторой совокупности действий, которая называется телом цикла.
Источник: teletype.in
Отладка программы
Информация выступает для компьютера в качестве сырья для переработки, как скажем, железная руда является сырьем для металлургического производства. Но любое сырье, прежде чем поступить на переработку, нуждается в предварительной подготовке, чтобы его переработка была наиболее эффективной. В полной мере это относится и к информации.
Предположим, к изучению какого-то явления (процесса) мы хотим привлечь вычислительную технику. Первое, что мы при этом делаем – это организуем сбор информации об интересующем нас явлении, проводим систематизацию полученной информации. После этого может быть сформулирована задача, решение которой будет способствовать обогащению нас знаниями об интересующем явлении. Для решения задачи наиболее целесообразно использовать средства вычислительной техники, при этом, как было отмечено ранее, задача должна быть подготовлена соответствующим образом.
Независимо от степени сложности решаемой задачи, процесс подготовки ее к решению на ЭВМ, как правило, состоит из следующих основных этапов:
общая постановка задачи;
математическое описание (формализация) задачи;
выбор метода решения задачи;
алгоритмизация вычислительного процесса;
составление программы на языке программирования;
Общая постановка задачи является начальным этапом и предполагает формулирование задачи на содержательном (словесном) уровне. Она выполняется лицом, в интересах которого решается задача. На этом этапе осуществляется описание сущности задачи и цели ее решения (то есть, что должно быть определено в результате решения задачи). При этом на обычном русском языке записывается условие задачи, перечень постоянных и переменных исходных данных, а также порядок их поступления, перечень искомых величин и формы их представления, требуемая точность представления искомых величин и т. д. Как показывает практика, этот этап является очень ответственным и требует такой формулировки задачи, которая может быть однозначно истолкована.
Выбор метода решения задачи. Необходимость этого этапа обусловлена тем, что не всякое математическое описание задачи может быть пригодно для решения на ЭВМ. По этой причине нужно выбрать и обосновать такой метод, который исходную задачу сведет к определенной последовательности элементарных действий (арифметических и логических операций).
На практике часто одну и ту же задачу можно решить разными математическими методами. Поэтому перед лицом, подготавливающим задачу к решению на ЭВМ, стоит задача выбрать такой метод, который требует задействования наименьших ее вычислительных ресурсов. Очевидно, что успешный выбор метода решения задачи зависит от математической эрудиции лица, решающего эту задачу.
Алгоритмизация вычислительного процесса. Любая ЭВМ функционирует в соответствии с алгоритмом, составленным пользователем. Поэтому для решения какой-либо прикладной задачи должен быть составлен алгоритм ее решения, то есть последовательность тех элементарных операций, которые должна выполнить ЭВМ над исходными данными и промежуточными результатами для получения конечного результата (решения задачи). Более подробно сущность алгоритма и его свойства будут изучены в третьем учебном вопросе. Пока же только заметим, что при разработке алгоритма необходимо четко представлять сущность решаемой задачи, чтобы предусмотреть все возможные варианты действий.
После составления алгоритма решения задачи переходят к следующему этапу – составлению программы решения задачи на ЭВМ. На этом этапе алгоритм записывают на одном из алгоритмических языков программирования (BASIC, C ++ , Pascal и т. д.). Поскольку любой из алгоритмических языков является языком высокого уровня, а ЭВМ понимает только язык низкого уровня – язык машинных кодов (двоичные коды), программа с помощью транслятора или интерпретатора переводится в машинные коды и помещается в оперативную память ЭВМ.
На этапах алгоритмизации и программирования задачи могут быть допущены различные ошибки (в том числе, синтаксические, выражающиеся в неправильной записи операторов языка программирования, в использовании символов, не входящих в алфавит языка программирования и др., а также ошибки, связанные с неправильной интерпретацией исходных математических зависимостей на этапах алгоритмизации или программирования). Поэтому для того, чтобы быть уверенным, что при решении задачи на ЭВМ будут получены верные результаты, необходимо выполнить отладку программы, которая заключается в пробном решении задачи на ЭВМ и сравнении полученных результатов с результатами расчетов «вручную» для тех же исходных данных. Если результаты совпадают, программа может быть использована в дальнейшем для решения задачи на ЭВМ с любыми исходными данными.
Источник: studopedia.su
Тема 13. Постановка задачи и спецификация программы
Одним из наиболее важных шагов программирования является постановка задачи. Она выполняет функции контракта между пользователем и программистом (программистами). Как и юридически плохо составленный контракт, плохая постановка задачи бесполезна.
При хорошей постановке задачи как пользователь, так и программист ясно и недвусмысленно представляют задачу, которую необходимо выполнить, т.е. в этом случае учитываются интересы как пользователя, так и программиста. Пользователь может планировать использование еще несозданного программного обеспечения, опираясь на знание того, что оно может. Хорошая постановка задачи служит основой для формирования ее решения.
Постановка задачи (спецификация программы); по существу, означает точное, полное и понятное описание того, что происходит при выполнении конкретной программы. Пользователь обычно смотрит на компьютер, как на черный ящик: для него неважно, как работает компьютер, а важно, что может компьютер из того, что интересует пользователя. При этом основное внимание фокусируется на взаимодействии человека с машиной.
Характеристики Хорошей Постановки Задачи:
Точность, т.е. исключение любой неоднозначности. Не должно возникать вопросов относительно того, каким будет вывод программы при каждом конкретном вводе.
Полнота, т.е. рассмотрение всех вариантов для заданного ввода, включая ошибочный или непредусмотренный ввод, и определение соответствующего вывода.
Ясность, т.е. она должна быть понятной и пользователю и системному аналитику, поскольку постановка задачи – это единственный контракт между ними.
Часто требование точности, полноты и ясности находятся в противоречии. Так, многие юридические документы трудно понять, потому что они написаны на формальном языке, который позволяет предельно точно сформулировать те или иные положения, исключая любые самые незначительные разночтения. Например, некоторые вопросы в экзаменационных билетах иногда сформулированы настолько точно, что студент тратит больше времени на то, чтобы понять вопрос, чем на то чтобы на него ответить. Более того, студент вообще может не уловить основной смысл вопроса из-за большого количества деталей. Наилучшая постановка задачи та, при которой достигается баланс всех трех требований.
Стандартная форма постановки задачи.
Рассмотрим следующую постановку задачи: «Ввести три числа и вывести числа в порядке».
Такая постановка не удовлетворяет приведенным выше требованиям: она не является ни точной, ни полной, ни понятной. Действительно, должны ли числа вводиться по одному на строке или все числа на одной строке? Означает ли выражение «в порядке» упорядочение от большего к меньшему, от меньшего к большему или тот же порядок, в каком они были введены.
Очевидно, что подобная постановка не отвечает на множество вопросов. Если же учесть ответы на все вопросы, то постановка задачи станет многословной и трудной для восприятия. Поэтому Д. Райли предлагает для постановки задачи пользоваться стандартной формой, которая обеспечивает максимальную точность, полноту, ясность и включает:
наименование задачи (схематическое определение);
общее описание (краткое изложение задачи);
ак уже отмечалось выше, в качестве модульной структуры программы принято использовать древовидную структуру, включая деревья со сросшимися ветвями. В узлах такого дерева размещаются программные модули, а направленные дуги (стрелки) показывают статическую подчиненность модулей, т.е. каждая дуга показывает, что в тексте модуля, из которого она исходит, имеется ссылка на модуль, в который она входит.
Другими словами, каждый модуль может обращаться к подчиненным ему модулям, т.е. выражается через эти модули. При этом модульная структура программы, в конечном счете, должна включать и совокупность спецификаций модулей, образующих эту программу. Спецификация программного модуля содержит, во-первых, синтаксическую спецификацию его входов, позволяющую построить на используемом языке программирования синтаксически правильное обращение к нему (к любому его входу), и, во-вторых, функциональную спецификацию модуля (описание семантики функций, выполняемых этим модулем по каждому из его входов). Функциональная спецификация модуля строится так же, как и функциональная спецификация ПС.
В процессе разработки программы её модульная структура может по-разному формироваться и использоваться для определения порядка программирования и отладки модулей, указанных в этой структуре. Поэтому можно говорить о разных методах разработки структуры программы. Обычно в литературе обсуждаются два метода: метод восходящей разработки и метод нисходящей разработки.
Метод восходящей разработки заключается в следующем. Сначала строится модульная структура программы в виде дерева.
Затем поочередно программируются модули программы, начиная с модулей самого нижнего уровня (листья дерева модульной структуры программы), в таком порядке, чтобы для каждого программируемого модуля были уже запрограммированы все модули, к которым он может обращаться. После того, как все модули программы запрограммированы, производится их поочередное тестирование и отладка в принципе в таком же (восходящем) порядке, в каком велось их программирование.
На первый взгляд такой порядок разработки программы кажется вполне естественным: каждый модуль при программировании выражается через уже запрограммированные непосредственно подчиненные модули, а при тестировании использует уже отлаженные модули. Однако, современная технология не рекомендует такой порядок разработки программы.
Во-первых, для программирования какого-либо модуля совсем не требуется текстов используемых им модулей — для этого достаточно, чтобы каждый используемый модуль был лишь специфицирован (в объёме, позволяющем построить правильное обращение к нему), а для тестирования его возможно (и даже, как мы покажем ниже, полезно) используемые модули заменять их имитаторами (заглушками). Во-вторых, каждая программа в какой-то степени подчиняется некоторым внутренним для нее, но глобальным для ее модулей соображениям (принципам реализации, предположениям, структурам данных и т.п.), что определяет её концептуальную целостность и формируется в процессе ее разработки. При восходящей разработке эта глобальная информация для модулей нижних уровней ещё не ясна в полном объеме, поэтому очень часто приходится их перепрограммировать, когда при программировании других модулей производится существенное уточнение этой глобальной информации (например, изменяется глобальная структура данных). В-третьих, при восходящем тестировании для каждого модуля (кроме головного) приходится создавать ведущую программу (модуль), которая должна подготовить для тестируемого модуля необходимое состояние информационной среды и произвести требуемое обращение к нему. Это приводит к большому объему «отладочного» программирования и в то же время не дает никакой гарантии, что тестирование модулей производилось именно в тех условиях, в которых они будут выполняться в рабочей программе.
Метод нисходящей разработки заключается в следующем. Как и в предыдущем методе сначала строится модульная структура программы в виде дерева.
Затем поочередно программируются модули программы, начиная с модуля самого верхнего уровня (головного), переходя к программированию какого-либо другого модуля только в том случае, если уже запрограммирован модуль, который к нему обращается. После того, как все модули программы запрограммированы, производится их поочередное тестирование и отладка в таком же (нисходящем) порядке.
При таком порядке разработки программы вся необходимая глобальная информация формируется своевременно, т.е. ликвидируется весьма неприятный источник просчетов при программировании модулей. Существенно облегчается и тестирование модулей, производимое при нисходящем тестировании программы.
Первым тестируется головной модуль программы, который представляет всю тестируемую программу и поэтому тестируется при «естественном» состоянии информационной среды, при котором начинает выполняться эта программа. При этом все модули, к которым может обращаться головной модуль, заменяются их имитаторами (так называемые заглушки [5]).
Каждый имитатор модуля представляется весьма простым программным фрагментом, сигнализирующим, в основном, о самом факте обращения к имитируемому модулю с необходимой для правильной работы программы обработкой значений его входных параметров (иногда с их распечаткой) и с выдачей, если это необходимо, заранее запасенного подходящего результата. После завершения тестирования и отладки головного и любого последующего модуля производится переход к тестированию одного из модулей, которые в данный момент представлены имитаторами, если таковые имеются.
Для этого имитатор выбранного для тестирования модуля заменяется на сам этот модуль и добавляются имитаторы тех модулей, к которым может обращаться выбранный для тестирования модуль. При этом каждый такой модуль будет тестироваться при «естественных» состояниях информационной среды, возникающих к моменту обращения к этому модулю при выполнении тестируемой программы. Таким образом, большой объем «отладочного» программирования заменяется программированием достаточно простых имитаторов используемых в программе модулей. Кроме того, имитаторы удобно использовать для подыгрывания процессу подбора тестов путем задания нужных результатов, выдаваемых имитаторами.
Лекция 8
Источник: studopedia.ru