Смекни!
smekni.com

Способы обеспечения качества программных продуктов (стр. 2 из 3)

Обеспечение надежности на этапе кодирования и компиляции программного обеспечения.

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

Все время существования программного средства от зарождения идеи по его созданию, до завершения его эксплуатации, обычно определяют как жизненный цикл. Укрупнено можно выделить пять наиболее важных этапов жизненного цикла программного средства (ЖЦ ПС): спецификацию (10%), проектирование (10%), кодирование (10%), отладку (20%) и сопровождение (50%). В скобках записаны относительные затраты ресурсов на создание ПС.

По затратам времени, человеческих и машинных ресурсов все эти этапы не одинаковы. Наиболее “дорогими”, в этом смысле, являются этапы, связанные с поиском ошибок в программах. Затраты ресурсов на них могут быть равными, или даже превосходить совокупные затраты ресурсов на остальных этапах. В стандарте DOD‑STD‑2167‑A около 30% требований, документов и соответствующих им процессов непосредственно связаны с отладкой, тестированием и испытаниями программ. Данный стандарт является обязательным при выполнении заказов Министерства обороны США.

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

Ретроспектива развития методов и средств автоматизации программирования в этом отношении говорит сама за себя. В модульном программировании акцент делается на разбиение программы на модули таким образом, чтобы данные (обрабатываемые модулем) были спрятаны в нем. Эта доктрина, известная как “принцип ограничения доступа к данным”, в значительной степени повысила модифицируемость и эффективность порождаемого кода.

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

В 80-х годах исследование причин неудач при реализации больших программных проектов показало, что число ошибок в спецификациях на программы значительно превышает их количество в программных кодах. Так около 56% ошибок допускаются на этапе формулировки требований к программе при этом расходуется в среднем 82% всех усилий, затраченных коллективом на устранение ошибок проекта. В то время как на этапе кодирования программ допускается соответственно 7% ошибок и тратится 1% усилий на их ликвидацию. В это время формулируется тезис о том, что целью программирования является не порождение программы как таковой, а создание технологических условий, когда разрабатываемое программное обеспечение легко адаптируется к новым обстоятельствам и новому пониманию решаемой задачи. Р. Хемминг так формулирует этот тезис: “Здравая вычислительная практика требует постоянного исследования изучаемой задачи не только перед организацией вычислений, но также в процессе его развития и особенно на той стадии, когда полученные числа переводятся обратно и истолковываются на языке первоначальной задачи”.

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

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

Применение CASE-инструментов позволяет в значительной степени снизить трудоемкость создания ПС, а в отдельных случаях заменить программирование автоматическим синтезом программ.

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

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

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

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

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

Высокое качество ПС достигается либо методами безошибочного программирования (“пассивными” методами), либо путем выявления и устранения ошибок (“активными” методами).

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

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

- модульность и строгую иерархию в структурном построении программ;

- унификацию правил проектирования, структурного построения и взаимодействия компонент ПС;

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

- поэтапный контроль полноты и качества решения функциональных задач.

Тестирование программного обеспечения.

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

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