Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Надежность программного обеспечения систем обработки данных

..pdf
Скачиваний:
8
Добавлен:
12.11.2023
Размер:
8.74 Mб
Скачать

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

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

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

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

Подготовка и повышение квалификации персонала. Совершенствование процесса разработки программного обеспечения происходило по различным направлениям, среди которых особое место занимают проблемы подго­ товки и повышения квалификации персонала, обеспе-

31

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

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

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

развитие многоцелевых языков и систем программи­ рования очень высокого уровня, пригодных для реализа­ ции сложных прикладных программных систем програм­ мистами с небольшим опытом;

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

создание схемио-реализованных программ, допускаю­ щих настройку применительно к нуждам пользователя; разработка и широкое применение языков компоновки

с блочной структурой; создание средств автоматической генерации языков

программирования для конкретных применений (эти средства могут быть программными и схемными)

Развитие языков и систем программирования в по­ следние годы свидетельствует о том, что не все хорошие системы получают должное распространение и примене­ ние Это обусловлено тем, что в процессе внедрения языков и систем программирования принимают участие произво­ дители ЭВМ, пользователи и разработчики языков Эти группы пользуются различными средствами и преследу­ ют неодинакоаые цели. Производители ЭВМ стремятся сохранить существующее положение и продавать как мож-

32

Иа «ОЛьше Э0М. Как правило, проняципсцн ЭВМ № |М и 1Ит<я -о'^Ьышенйн aAAeKTHBHocfkt Поогоаммивовв- ШШ- Разработчики языков обычно не принимают ВО киймание трудности реализации и внедрения яэыкбв и систем программирования и склойны изобретать, новый язык, как Иолькб становятся ощутимыми недостатки и огркнячения существующих языкбв и систем програмиировбния.

Для повышения эффективности разработкой внедре­ ния языков’ и систем ИрограммнрбвИнйЯ иеобхбдн|1к> принять следующие меры:

производителям ЭВМ:

1)привлекать длк разработки программного обеспе­ чения более квалифицированных разработчиков, полно­ стью использующих возможности оборудования;

2)публиковать спецификации языков микропрограм­ мирования н системно^ программирования С тем, чтобы облегчить дальнейшее сойершенствовйНие программного обеспечения;

3)разрабатывать такие ЭВМ, которые бы допускаАй настройку иа ту или иную Область применений (бутем прямой интерпретации языков высокой уровиВ1, Исполь­ зований1расширяемых языкбв'*и т. Д.);

4)обеспечить ббДее эффективное аднЯнке Системных

иприкладных программистов на!' структуру и' функцкк

разрабатываемой ЭВМ;

пользователям Иметь возм ож ность использования дей­

ственной ёистеиы сравнения существующих языков lik e # пйлйторов;

разработчикам 1языкбв более полЦЬ знать Облас¥й применения языков и удеДять болыбее внймание пройз*- водительности компиляторов, новым режимам работы компиляторов (таким, как реким отладки, ТеЦерацйИ тестовых данных и т. д ) и новым вбзможностям компи­ ляторов.

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

Взаимозависимость между аппаратным оборудова­ нием и надежностью ПО настолько наглядна и проста,

2 Зак 1922

33

 

что ’.вдетоз o « t « w i нвзатч€0№рй..Надежнвсть J1Q су­ щественна зависит от установившейся тенденции достнщеяци максимального быстродействия аппаратуры и ми­ нимальвой стоимости. В силу противоречий между эф­ фективностью и надежностью показатели надежности часто отбрасываются ради достижения эффективности. Например, зачастую пренебрегают защитными мероприя­ тиями во той причине, что ояи снижают скорость выпол­ нения программы;.набегают применения модульной струк­ туры программ из-за некоторого увеличения времени выполнения за счет передач параметров; ограничивают­ ся контрольные функции компиляторов из-за дополни­ тельного расхода времени на создание программ и де­ лаются попытки использовать различные «ухищрения» программирования с целью сокращения времени работМ программ.

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

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

34

Возможно,* что вкстремалыганг игмом « дальнейшем

cOB^pnl^Ht^

i l iiMte арЮГгектурЫ ЭВМ'бЫЛОбя ’Ш кЫШ

тНкоГб Ш

^ | > й |й й 1 КОторбе Ш И М М О 1кен>с^|вт-

ивнуИ im R sa m n i п Ас^ юоА нзУйМ^ярограммйровй*

ння МбмЬп» уровня. ЭтЗ Проблемна омебясвнок м ^е решена в отечественной ЭВМ 'МИР (г] « ' 4 машине SYMBOL [ 13]. Последняя машина спроектирована* дкя выполнения ВЫсдКЬуроЗневОТо йэьпга SPL; ОбъеДИняпоЩе- Ш ряд черт таив* языков, как П Л /1. Алгол к АПЛ. Дан­ ная ЭВМ не нЯёет операционной системы, а все тради­ ционные функции ОС Выполняет машина. ЕстественнЬ, чТо достижение заданного уровня' надежности системы обработки информации должно здесь решаться на аппа­ ратурном уровне, что сделать значительно проще при су­ ществующих успехах и достижения надежности слож­ ных технических систем.

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

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

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

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

2*

35

мые> при мимкпяяф большихпрограммных комилеодвв, дзджяы лрвдуемвяривлть механизм* посродигвом кото­ рцев программные комплексы делятся на модули с опи­ санием взаимосвязи, н мехаиизи, гарантирующей соответствне связей между модулями описанию взаимосвя­ зей.* ..Требования^к ипивтрукции я взаимосвязи модулей могут быть'сформулированы следующим образом:

модуля взаимодействуют между собой только через интерфейс;

вся информация, передаваемая между модулями, должна соответствовать информационному описанию; часть информации-модуля недоступна извне, т. е. другие модули ие имеют прямого доступа к этой части

информации; некоторые модули могут быть объединены в более

крупные формирования, оформленные как отдельные модули;

каждый модуль транслируется отдельно; основной объем контрольных операций должец быть

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

Необходимость модульной структуры для обеспече­ ния надежности объясняется<еще и тем, что программист уделяет написанию программ очень небольшую часть своего времени, а большая часть времени уходит на про* верку программы. При этом контроль небольших, функ­ ционально самостоятельны» группйодов (модулей) спо­ собствует качественному выполнению работы.

Рассмотрим - отдельные языковые конструкции, не удовлетворяющие требованиям по надежности для раз­ рабатываемого ПО. В' большинстве случаев для анализа будут использоваться конструкции языка ПЛ/1 как наи­ более часто используемого для написания программ.

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

Ряд компиляторов получает право «усечения» идеи-

36

тифмсаторов, превышающих допустимую длину по отрог» установленному правшу. Если программист но будет об этом думал* -то подобное «усечение» «ожег кончиться тем, что появятся для различных объектов одинаковые идентификаторы.

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

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

Большинство существующих языков программирова­ ния не наделено соответствующим аппаратом проверки правильности использования указателя (ссылая; пере­ менной, что на практике порождает значительное коли­ чество ошибок, обнаружить которые очень сложно,

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

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

Чтобы обеспечить компилятор возможностью обнару­ жить сннтакскческне ошибки, язык программирования должен быть организован так, чтобы ошибки сянтакси-

37

са привели бы ц синтаксически неправильной программе. Компиляторы: обквдожяв Ошибки. нё должны их исправ­

лять. так жак^этот процесс;далеко не «сегда одяоаначен иможет привести к дополиительнымошибкам.Это же

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

Некоторые языки программирования содержат про* цедуры обработки внешних н внутренних прерываний. Этот-отличный ииструментарИй для ряда применений достаточно плох для обеспечения надежности,. так как нарушает естественный порядок выполнения команд й Затрудняет контроль. Если прерывания и разрешены языком, то программист должен тщательно взвесить неОбхОдимость ихиспользований■* своей программен тем, чтобы не нанести, ущерб надежности.

Аналогичное замечание мойно сделатьо языках, описывающих одновременное выполнение нескольких про* цессов. Параллельная, обработка возможна» если Инфор­ мация разбивается на модули таким образом, чтобы программист мог легко проверить,’ к каким программным модулям произошло обращение, к какой-области и в какоевремя.

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

2.2. «АКТО РЫ , СВЯЗАННЫЕ С РАЗРАБОТКОЙ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

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

Конструктивные факторы. Группа конструктивных факторов проявляет себя на стадии начального проекти­ рования разработки ПО и включает следующую сово­ купность:

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

36

степень сложности разраоатываемоя системы.г*тот показатель влитературе ад определен однозначно. Будем считать, чтец сложность определяется операторным соста­ вом программы;

структурное яоетроение программы.Модульяыйпринщга построения программ является одшш из путей ре­ шения проблемы обеспечения, надежности, так как по­ зволяет более глубоко проверять программу;

наличие опыта разработки у персонала. Наличие опыта разработки в определенной мере способствует Достижению надежности создаваемого ПО;

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

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

Технологические факторы. Группа технологических факторов проявляет себя лри разработке ПО. Существен­ ную роль в создании надежных программ играет техни­ ка программирования. Программирование рассматривается как методология конструктивных рассуждений, Приме­ няемых к некоторой проблеме, допускающей алгоритми­ ческое решение. Понятие программирования детально разработано в примерах и документаций как построение Дерева связей иа основании неформального описания но следующим один аа другим пОЙтеД^агтелЬным шйгам

уточнения до

получения

требуемой Ы сгвтк коДов.

В работах

но Теории

программирования дёлае'гся

акцент на то; что получить корре1аную программу лёгче И целесообразнее через стадию проектировайия, чек через исчерпывающее тестирование. Прн 'зтом утвержда­ ется, что тестирование может Использоваться для пока­

за

ёствования ошибок, а не их отсутствия.

 

; для конструктивных, так и для технологических

фактбров важно, что разработчик ПО руководствуется в евоей работе одним или несколькими критериями^ к w> торым' в " первую очередь относятся такие' понятия;1как общая стоимость программы, время разработки, возмож­ ность наиболее полного тестирования, удббетвЬ для поль­ зователя и т. д. Вопрос о том, какие цели долЖеи ставитЬ

39

перед собой проектировщик ПО» даждо «е, простой. Например, желание создать программу, максимально удобную для пользователя, может привести т расту об­ щей стоимости проекта. Цели программирования могут приходить в состояние конфликта, и этим диктуется необходимость установления относительной важности иля приоритетности целей.

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

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

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

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

управление надежностью в процессе разработки; степень обученности персонала как мера безошибоч­

ного написания программ; степень информативности персонала, участвующего в

разработке проекта, по всем особенностям и требовани­ ям, в том числе и специфическим;

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

40

Соседние файлы в папке книги