Задачи разработки программного обеспечения

Многие студенты и авторы книг часто путают разработку ПО ,с кодированием. Кодирование представляет собой процесс составления программы на языке, который воспринимает ЭВМ. Фактически кодирование — небольшая часть процесса разработки ПО. Хотя в этой области проводилось мало количественных исследований, в нескольких работах показано, что на этап кодирования уходит менее одной пятой общего времени, затраченного на программирование. Остальное время затрачивается на проектирование программ, их тестирование и другие этапы разработки ПО. Довольно распространенным является мнение, что программист, принимающий участие в реализации крупного проекта по созданию ПО, должен иметь производительность от двух до десяти отлаженных операторов в день. Поскольку составление даже десяти операторов требует всего нескольких минут, становится очевидно, что кодирование не представляет собой самый трудоемкий этап разработки ПО.

Разработку ПО можно разделить на несколько этапов.

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

2. Проектирование программы. На этом этапе проектируется программа, удовлетворяющая требованиям постановки задачи. При этом целесообразно использовать такие методы, как проектирование сверху вниз, структурное программирование, модульное программирование и создание блок-схемы.

3. Кодирование (собственно программирование). На этом этапе спроектированная ранее программа переводится на язык машинных команд. Вопросы программирования на языке ассемблера были рассмотрены в гл. 5, а использование языков высокого уровня — в гл. 4. Вопросы кодирования программ рассматриваются во многих руководствах и справочниках, поэтому в давной главе рассмотрим их очень кратко и уделим основное внимание другим этапам разработки ПО.

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

5. Тестирование. На этом этапе проверяется корректность программы. Тестирование позволяет убедиться в том, что программа правильно выполняет возложенные на нее функции. Очень важным на данном этапе является правильный выбор тестовых данных и разработка методов тестирования.

6. Документирование. На этом этапе разрабатывается программная документация, которая дает возможность тем, кто должен исполь* зовать и сопровождать программу, разобраться в ее работе с целью расширений программы для других приложений. Для документирования широко используются такие средства, как блок-схемы, программные комментарии и карты памяти.

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

8. Расширение и повторное проектирование. На этом этапе происходит переработка программы с тем, чтобы она могла решать задачи, ие укладывающиеся в рамки исходной постановки. Разумеется, при этом проектировщики всегда стремятся использовать программы, соз* данные для решения ранее поставленных задача Проектировщики ПО 210 не должны рассматривать любую задачу совершенно изолированно от задач, которые могут возникнуть в будущем.

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

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

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

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

3. Стоимость аппаратных средств. Каждый дополнительный модуль памяти увеличивает стоимость системы. Разумеется, длинная программа потребует дополнительных модулей памяти только в том случае, если имеющиеся модули уже заполнены (каждый модуль памяти имеет емкость порядка тысяч байт). Подключение дополнительной памяти приводит к дополнительным соединениям, платам, схемам дешифрирования и требует соответствующих источников тока и напряжения и средств отвода тепловой энергии. По мере того как становятся доступными полупроводниковые ЗУ с меньшей стоимостью хранения одного бита информации, важность вопроса использования памяти существенно снижается. Однако до сих пор необходимо учитывать требуемый объем памяти, особенно при создании простых средств, когда стоимость каждого модуля оказывается существенной.

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

4. Время программирования и стоимость создания ПО, Время и средства, затраченные на создание ПО, являются важными факюрами. Хотя процессоры, ЗУ и другие аппаратные средства становятся все дешевле, затраты на программное обеспечение непрерывно растут. Изменение соотношения затрат на аппаратуру и людские ресурсы является главной причиной того, что сейчас много внимания уделяется применению методов структурного программирования и нисходящего проектирования, которые повышают производительность труда программистов. Правильно организованное проектирование, отладка, тестирование и документирование программ позволяют уменьшить совокупные затраты на программирование. Использование при составлении программ языков высокого уровня может существенно повысить производительность труда программиста и упростить многие этапы разработки ПО. Здесь также прослеживается тесная взаимосвязь между затратами на ПО и аппаратные средства: на языке высокого уровня программист может быстрее писать и отлаживать программы, но при этом полученная в результате машинная программа потребует больше памяти, чем программа, написанная на языке ассемблера. Практически нет убедительных результатов, которые позволили бы ответить на вопрос, какие языки и методы проектирования дают на«лучшие результаты. По мере того как оплата труда программиста будет расти по сравнению с затратами на разработку аппаратных средств, большое значение будет уделяться психологическим исследованиям в области программирования (по-видимому, это случится в недалеком будущем).

5. Простота использования. Программа, которую проще использовать другим программистам или пользователям-непрограммистам, имеет большую ценность по сравнению с той, с которой работать сложнее. Жестко заданные и сложные форматы данных, неясные сообщения об ошибках и плохо продуманные формы выдачи результатов усложнят и сделают более дорогим процесс отладки, использования и сопровождения программы. Здесь, как и ранее, относительно высокая стоимость труда программистов по сравнению с затратами на аппаратуру делает этот фактор важным. С точки зрения обеспечения удобства использования программы особенно важна роль этапов проектирования и документирования. Учет психологических и физиологических факторов часто оказывается важным, если при использовании программы предполагается взаимодействие ее с человеком. Очень многие микропроцессорные системы предназначены для того, чтобы упростить оператору выполнение типовых задач.

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

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

Надежность и стоимость программирования в настоящее время являются наиболее важными показателями при разработке ПО для микропроцессоров. В качестве начальной цели ставится задача за приемлемое время и с не очень большими затратами создать работоспособную программу. Оптимизацию программы можно выполнить позднее.

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

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

 


 



Свежая информация управление ИТ аутсорсинг у нас на сайте.