Программное обеспечение состоит из нескольких сотен (и даже тысяч) программ и подпрограмм и создается коллективом программистов в течение нескольких месяцев и/или лет.
В общем случае каждое ПО характеризуется так называемым жизненным циклом, под которым понимают отрезок времени от момента «зарождения» комплекса программ до его вывода из эксплуатации. Жизненный цикл ПО, средняя продолжительность которого для АСУ достигает 4 – 6 лет, состоит, как правило, из 7 этапов разработки и одного (восьмого) этапа эксплуатации комплекса программ (рис. 4.1).
Рис. 4.1 – Жизненный цикл программного обеспечения
На этапе 1 – «Разработка спецификаций» формулируется цель создания ПО, выбираются его основные функции и составляется соответствующие спецификации-требования к программному комплексу.
Второй этап - «Проектирование ПО» связан с декомпозицией всего программного комплекса на отдельные программы, подпрограммы и даже модули, установлением информационных связей и иерархий, а также с выбором языка и метода программирования: «сверху вниз» или «снизу вверх».
Выбор метода программирования зависит от соотношения объемов логических и вычислительных операций в ПО. В частности, если в ПО преобладает доля логических операций, то целесообразно использовать программирование «сверху вниз», позволяющее уменьшить число логических и интерфейсных ошибок, при этом создаваемые программы будут более надежными.
Этапы 1, 2 выполняются без использования ЭВМ небольшим числом высококвалифицированных программистов.
Этап 3 – «Реализация (кодирование) программ» предполагает написание достаточно большим числом программистов средней квалификации отдельных программ, подпрограмм и модулей. Написание или кодировка программ ведется обычно на языке программирования, выбранном на этапе 2.
На 4-м этапе проводится отладка отдельных программ на ЭВМ, во время которой устраняются ошибки индивидуальных программ, но, естественно, не решаются вопросы их информационной совместимости.
После установления работоспособности отдельных программ, подпрограмм и модулей на этапе 5 осуществляется отладка всего программного обеспечения, при этом устраняются преимущественно интерфейсные ошибки.
На стадии 6 проверяется готовность ПО к решению тестовых задач с заранее известными ответами. При заметном отличии результата пробного решения от тестового, ПО возвращается на отладку и поиск причин расхождения решений.
Если тестирование ПО прошло успешно, то на этапе 7 осуществляется официальная сдача программного комплекса в эксплуатацию пользователю. При отказе будущего пользователя (покупателя) от приемки ПО, последнее возвращается на доработку на 5 или 6-й этап.
После подписания приемо-сдаточных документов начинается 8-й этап - «эксплуатация ПО пользователем» или этап сопровождения ПО разработчиком-программистом. Этот этап выделен на рис. 4.1 жирной линией, а время эксплуатации обозначено через , , где - процессорное время, - длительность этапа эксплуатации ПО. Общая продолжительность жизненного цикла ПО равна:
,
где - длительность разработки ПО (астрономическое время выполнения первых семи этапов). Момент времени окончания «жизни» ПО определяется одним или несколькими факторами:
- находящиеся в эксплуатации вычислительные машины заменяются на другие программно несовместимые ЭВМ;
- имеет место «моральный износ» самого ПО: некоторые алгоритмы оказались не эффективными или неверными, низкая надежность отдельных программ, реализация ПО ряда функций стала экономически невыгодной.
В общем случае при создании ПО стремятся увеличить продолжительность его жизненного цикла и, особенно отношение . Подобная тенденция ведет к уменьшению стоимости ПО и чаще всего негативно влияет на качество программного комплекса.
Качество разрабатываемого программного обеспечения оценивают вектором некоторых показателей, к числу важнейших (особенно для АСУ РВ) из них можно отнести:
- быстродействие,
- стоимость,
- корректность,
- надежность.
Быстродействие ПО оценивается затратами процессорного (машинного, операционного) времени на выполнение всех программ, необходимых для решения задачи или выполнения той или иной функции ПО. Быстродействие ПО является количественным показателем качества, зависящим от большого числа факторов, в частности: обрабатываемых кодов, начальных условий в итерационных и оптимизационных процедурах, частоты обращений к внешним ЗУ и другим устройствам, наличия прерываний, затрат времени на выполнение «коротких» и «длинных» операций и т.д. Вследствие этого, время выполнения функции ПО или решения задачи есть случайная величина, оцениваемая, как правило, средним арифметическим для универсальных ЭВМ и наибольшим значением затрат времени для вычислительных машин, используемых в АСУ РВ. Указанное среднее или наибольшее время выполнения ПО функции (задачи) находят экспериментально при отладке и тестировании программ, сдаче программного обеспечения в эксплуатацию.
Стоимость ПО также относится к количественным показателям качества программного обеспечения (при этом, чем выше качество ПО, тем больше, как правило, его стоимость) и оценивается финансовыми затратами на проектирование, реализацию программ и их сопровождение (последнее характерно для вновь разрабатываемых ПО). Определение этого важнейшего показателя ПО затруднено не только изменчивостью рыночных цен, но и практикой частичного включения стоимости общего ПО в покупную стоимость ЭВМ. Как правило, стоимость ПО составляет 50 и более процентов стоимости АСУ РВ.
Несмотря на случайный характер стоимости ПО, можно считать, что с ее увеличением при неизменном интерфейсе пользователя возрастает быстродействие и улучшаются другие качественные показатели типа корректности и надежности.
Корректность ПО представляет собой способность комплекса программ удовлетворять некоторым заранее установленным требованиям или спецификациям, вводимым на первом и втором этапах разработки программного обеспечения. Корректность ПО означает его формальную «правильность» относительно спецификаций, но не гарантирует получения правильных решений задач или выполнения функций. Иначе говоря, корректное ПО может давать неверные решения задач! Корректность ПО устанавливают эксперты-программисты при статической проверке всех программ, т.е. без «прогона» ПО на ЭВМ. Понятие корректности ПО носит семантический (смысловой) характер и пока не имеет количественных показателей корректности или, напротив, некорректности.
Надежность ПО есть свойство комплекса программ своевременно выполнять все наперед установленные функции в заранее оговоренных условиях эксплуатации.
Из этого общего определения надежности ПО можно сделать два следствия:
- здесь учитывается фактор времени: все функции должны быть выполнены к заданному моменту времени, поэтому для исследования надежности нужно «динамическое» тестирование программного комплекса, т.е. прогоны ПО на ЭВМ;
- под «заранее оговоренными условиями эксплуатации ПО» понимаются не только технические характеристики вычислительного оборудования, но и его абсолютная надежность, т.е. отказы технических средств, в том числе и носителей информации, не должны влиять на надежность программ.
Надежность программного комплекса более тонкое свойство по сравнению с корректностью ПО. В частности, корректное ПО может оказаться надежным или ненадежным, а некорректное ПО всегда будет ненадежным (для этого даже не требуется проводить динамическое тестирование).
Надежность ПО коррелирована с его быстродействием и стоимостью. Чем меньше затраты процессорного времени на выполнение той или иной функции ПО, тем выше надежность программного комплекса, но, вероятно, и выше его стоимость.
Введенное определение «надежность ПО» далее будет конкретизировано на основе уже известных понятий работоспособности и отказа, что позволит ввести функциональные и числовые показатели надежности программ и всего программного обеспечения.