Стандартизация, сертификация и управление качеством ПО. Программное обеспечение и его классификация. Технологии программирования программного обеспечения. Классификация программного обеспечения (ПО). Пакеты прикладных программ (ППП). Инструментарий технологии программирования. Методо-ориентированные ППП.

Решение задач и выполнение научно-исследовательских разработок: Отправьте запрос сейчас: irina@bodrenko.info    
математика, IT, информатика, программирование, статистика, биостатистика, экономика, психология
Пришлите по e-mail: irina@bodrenko.info описание вашего задания, срок выполнения, стоимость





 

Стандартизация, сертификация и управление качеством программного обеспечения

 

Лекция 1.

 

Тема лекции: «Программное обеспечение и его классификация».

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

2. Классификация программного обеспечения (ПО).

3. Пакеты прикладных программ (ППП).

  1. ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.

 

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

Первый этап — «стихийное» программирование. Этот этап  охватывает период от момента появления первых вычислительных машин до середины 60-х годов XX в. В этот период практически отсутствовали сформулированные технологии и  программирование фактически было искусством. Первые программы имели простейшую структуру. Они состояли из собственно программы на машинном языке и обрабатываемых ею данных (рисунок 1).

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

 

Рисунок 1. Структура первых программ.

Появление ассемблеров позволило вместо двоичных или 16-ричных кодов использовать символические имена данных  мнемоники кодов операций. В результате программы стали  более «читаемыми».

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

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

Типичная программа того времени состояла из основной программы, области глобальных данных и набора подпрограмм (в основном библиотечных), выполняющих обработку всех  данных или их части (рисунок 2).

 

Рисунок 2. Архитектура программы с глобальной областью данных.

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

Например, подпрограмма поиска корней уравнения на заданном  интервале по методу деления отрезка пополам меняет величину  интервала. Если при выходе из подпрограммы не предусмотреть восстановления первоначального интервала, то в глобальной  области окажется неверное значение интервала. Чтобы сократить количество таких ошибок в подпрограммах, было предложено размещать локальные данные (рисунок 3).

 

Рисунок 3. Архитектура программы, использующей подпрограммы с локальными данными.

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

В начале 60-х годов XX в. разразился «кризис  программирования». Он выражался в том, что фирмы, взявшиеся за  разработку сложного программного обеспечения, такого как  операционные системы, срывали все сроки завершения проектов.

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

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

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

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

Второй этап — структурный подход к программированию (60—70-е годы XX в.). Структурный подход к программированию представляет собой совокупность рекомендуемых  технологических приемов, охватывающих выполнение всех этапов  разработки программного обеспечения. В основе структурного подхода лежит декомпозиция (разбиение на части) сложных систем с  целью последующей реализации в виде отдельных небольших (до 40—50 операторов) подпрограмм. С появлением других  принципов декомпозиции (объектного, логического и т. д.) данный  способ получил название процедурной декомпозиции.

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

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

Поддержка принципов структурного программирования была заложена в основу так называемых процедурных языков  программирования. Как правило, они включали основные «структурные» операторы передачи управления, поддерживали вложение  подпрограмм, локализацию и ограничение области «видимости» данных. Среди наиболее известных языков этой группы стоит  назвать PL/1, ALGOL-68, Pascal, С. Одновременно со структурным программированием  появилось огромное количество языков, базирующихся на других  концепциях, но большинство из них не выдержало конкуренции.

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

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

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

Модульное программирование предполагает выделение групп подпрограмм, использующих одни и те же глобальные данные в отдельно компилируемые модули (библиотеки подпрограмм),  например модуль графических ресурсов, модуль подпрограмм  вывода на принтер (рисунок 4).

 

Связи между модулями при  использовании данной технологии осуществляются через специальный интерфейс, в то время как доступ к реализации модуля (телам подпрограмм и некоторым «внутренним» переменным)  запрещен. Эту технологию поддерживают современные версии языков Pascal и С (C++), языки Ада и Modula.

 

Рисунок 4. Архитектура программы, состоящей из модулей.

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

Практика показала, что структурный подход в сочетании с модульным программированием позволяет получать достаточно надежные программы, размер которых не превышает 100 000  операторов [10]. Узким местом модульного программирования  является то, что ошибка в интерфейсе при вызове подпрограммы  выявляется только при выполнении программы (из-за раздельной компиляции модулей обнаружить эти ошибки раньше  невозможно). При увеличении размера программы обычно возрастает сложность межмодульных интерфейсов, и с некоторого момента предусмотреть взаимовлияние отдельных частей программы  становится практически невозможно. Для разработки программного обеспечения большого объема было предложено использовать объектный подход.

Третий этап — объектный подход к программированию (с  середины 80-х до конца 90-х годов XX в.). Объектно-ориентированное  программирование определяется как технология создания сложного программного обеспечения, основанная на представлении  программы в виде совокупности объектов, каждый из которых  является экземпляром определенного типа {класса), а классы образуют иерархию с наследованием свойств. Взаимодействие программных объектов в такой системе осуществляется путем  передачи сообщений (рисунок 5).

Объектная структура программы впервые была использована в языке имитационного моделирования сложных систем Simula, появившемся еще в 60-х годах XX в. Естественный для языков моделирования способ представления программы получил  развитие в другом специализированном языке моделирования языке Smalltalk (60-е годы XX в.), а затем был использован в  новых версиях универсальных языков программирования, таких как Pascal, C++, Modula, Java.

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

Рисунок 5. Архитектура программы при объектно-ориентированном подходе.

 

Бурное развитие технологий программирования, основанных на объектном подходе, позволило решить многие проблемы. Так, были созданы среды, поддерживающие визуальное программирование, например Delphi, C++ Builder, Visual C++ и т. д. При  использовании визуальной среды у программиста появляется  возможность проектировать некоторую часть, например интерфейсы  будущего продукта, с применением визуальных средств добавления и настройки специальных библиотечных компонентов.

Результатом визуального проектирования является заготовка будущей программы, в которую уже внесены соответствующие коды. Использование объектного подхода имеет много  преимуществ, однако его конкретная реализация в  объектно-ориентированных языках программирования, таких как Pascal и C++, имеет существенные недостатки:

1) фактически отсутствуют стандарты компоновки двоичных результатов компиляции объектов в единое целое даже в пределах одного языка программирования. Компоновка объектов,  полученных разными компиляторами C++, в лучшем случае  проблематична, что приводит к необходимости разработки программного обеспечения с использованием средств и возможностей одного языка программирования высокого уровня и одного  компилятора, а значит, требует наличия исходных кодов используемых  библиотек классов;

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

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

Четвертый этап — компонентный подход и CASE-технологии (с середины 90-х годов XX в.). Компонентный подход предполагает построение программного обеспечения из отдельных компонентов физически отдельно существующих  частей программного обеспечения, которые взаимодействуют между собой через стандартизованные двоичные интерфейсы. В отличие от обычных объектов объекты-компоненты можно собрать в  динамически вызываемые библиотеки или исполняемые файлы, распространять в двоичном виде (без исходных текстов) и  использовать в любом языке программирования, поддерживающем соответствующую технологию. На сегодня рынок объектов стал реальностью, так, в Интернете существуют узлы,  предоставляющие большое количество компонентов, рекламой компонентов забиты журналы. Это позволяет программистам создавать  продукты, хотя бы частично состоящие из повторно  использованных частей, т. е. использовать технологию, хорошо  зарекомендовавшую себя в области проектирования аппаратуры.

Компонентный подход лежит в основе технологий,  разработанных на базе COM (Component Object Model — компонентная модель объектов), и технологии создания распределенных  приложений CORBA (Common Object Request Broker Architecture —общая архитектура с посредником обработки запросов  объектов). Эти технологии используют сходные принципы и  различаются лишь особенностями их реализации.

Технология СОМ определяет общую парадигму взаимодействия программ любых  типов: библиотек, приложений, операционной системы, т. е.  позволяет одной части программного обеспечения использовать  функции (службы), предоставляемые другой, независимо от того, функционируют ли эти части в пределах одного процесса, в  разных процессах на одном компьютере или на разных компьютерах (рисунок 6).

 

 

Рисунок 6. Взаимодействие программных компонентов различных типов.

 

Модификация СОМ, обеспечивающая передачу  вызовов между компьютерами, называется DCOM (Distributed COM — распределенная СОМ).

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

На базе технологии СОМ и ее распределенной версии DCOM были разработаны компонентные технологии,  решающие различные задачи разработки программного обеспечения. OLE-automation или просто Automation (автоматизация) — технология создания программируемых приложений,  обеспечивающая программируемый доступ к внутренним службам этих приложений. Вводит понятие диспинтерфейса (dispinterface) — специального интерфейса, облегчающего вызов функций  объекта. Эту технологию поддерживает, например, Microsoft Excel, предоставляя другим приложениям свои службы.

Технология CORBA, разработанная группой компаний ОМG (Object Management Group — группа внедрения объектной  технологии программирования), реализует подход, аналогичный СОМ, на базе объектов и интерфейсов CORBA. Программное ядро CORBA реализовано для всех основных аппаратных и программных платформ, и потому эту технологию можно  использовать для создания распределенного программного обеспечения в гетерогенной (разнородной) вычислительной среде.

Автоматизированные технологии  разработки и сопровождения программного обеспечения были названы CASE-технологиями (Computer-Aided Software/System Engineering — разработка программного обеспечения  программных систем с использованием компьютерной поддержки). Существуют CASE-технологии, поддерживающие как структурный, так и объектный (в том числе,  и компонентный) подходы к программированию.

Методология SOA. Одним из подходов к созданию современных корпоративных информационных систем (ИС) является проектирование сервис-ориентированных архитектур на основе методологии SOA (Service Oriented Architecture). При этом сама SOA представляет собой набор бизнес-методов, методов процесса, организационных методов, методов управления и технических методов для создания гибкой среды. Сервис-ориентированная архитектура предлагает возможность гибкой работы с элементами бизнес-процессов и лежащей в их основе ИТ-инфраструктурой как с компонентами, которые можно использовать многократно и комбинировать при изменении приоритетов организации.

 

Технически, реализация архитектур на основе SOA стала возможной в результате развития технологии Web-служб. Современные открытые стандарты Web-служб играют важную роль в организации процессов взаимодействия компонентов ИС различных производителей.

Архитектурные решения, реализованные на основе SOAP, WSDL и UDDI, несмотря на свою кажущуюся избыточность, показывают свою жизнеспособность и полезность. Механизм сервисов SOAP является каркасом для интеграции бизнес-процессов и поддерживающей их ИT-инфраструктуры в форме безопасных, стандартизированных компонентов (служб) предназначенных для многократного использования.

 

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

 

1.2. Основные понятия и определения.

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

Программа (program, routine) — упорядоченная  последовательность команд (инструкций) компьютера для решения задачи.

Программное обеспечение (software) — совокупность  программ обработки данных и необходимых для их эксплуатации документов.

Задача (problem, task) — проблема, подлежащая решению.

Приложение (application) — программная реализация на  компьютере решения задачи.

 

Термин «задача» в программировании означает единицу  работы вычислительной системы, требующую выделения  вычислительных ресурсов (процессорного времени, памяти).

Процесс создания программ можно представить как  последовательность следующих действий:

1) постановка задачи;

2) алгоритмизация решения задачи;

3) программирование.

Постановка задачи (problem definition) — это точная  формулировка решения задачи на компьютере с описанием входной и выходной информации.

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

Программирование (programming) — теоретическая и  практическая деятельность, связанная с созданием программ.

Цели и принципы стандартизации в Российской Федерации установлены Федеральным законом от 27 декабря 2002 г. № 184-ФЗ «О техническом регулировании», а правила применения национальных стандартов Российской Федерации - ГОСТ Р 1.0-2004 «Стандартизация в Российской Федерации. Основные положения».

 

С 1 марта 2012 года (взамен ГОСТ Р ИСО/МЭК 12207-99)  введен в действие национальный  стандарт  РФ ГОСТ Р ИСО/МЭК 12207-2010 «Информационная технология. Системная и программная инженерия. Процессы жизненного цикла программных средств» (Утвержден  приказом Федерального агентства по техническому регулированию и метрологии от 30 ноября 2010 г. № 631-ст).

 

Стандарт ГОСТ Р ИСО/МЭК 12207-2010 «Информационная технология. Системная и программная инженерия. Процессы жизненного цикла программных средств»  идентичен международному стандарту ISO/IEC 12207:2008 «System and software engineeringSoftware life cycle processes».

 

В настоящем стандарте применены следующие термины с соответствующими определениями.

 

разработчик (developer): Организация, которая выполняет разработку задач (в том числе анализ требований, проектирование, приемочные испытания) в процессе жизненного цикла.

 

Примечание. В настоящем стандарте термины «разработчик» и «исполнитель» являются синонимами.

 

пользователь (user): Лицо или группа лиц, извлекающих пользу из системы в процессе ее применения.

 

программная составная часть (software item): Исходный код, объектный код, контрольный код, контрольные данные или совокупность этих составных частей.

 

программный продукт (software product): Совокупность компьютерных программ, процедур и, возможно, связанных с ними документации и данных.

 

программный блок (software unit): Отдельная компилируемая часть кода.

 

процесс (process): Совокупность взаимосвязанных или взаимодействующих видов деятельности, преобразующих входы в выходы.

 

цель процесса (process purpose): Цель высокого уровня выполнения процесса и вероятные выходы эффективной реализации процесса.

 

выход процесса (process outcome): Наблюдаемый результат успешного достижения цели процесса.

 

задача (task): Требование, рекомендация или разрешенное действие, предназначенное для содействия достижению одного или более выходов процесса.

 

квалификационное требование (qualification requirement): Совокупность критериев или условий, которые должны быть удовлетворены для того, чтобы квалифицировать программный продукт как соответствующий спецификациям и готовый для применения в заданном окружении или интеграции с системой, для которой он предназначен.

 

квалификационное тестирование (qualification testing): Тестирование, проводимое разработчиком и санкционированное приобретающей стороной (при необходимости) с целью демонстрации того, что программный продукт удовлетворяет спецификациям и готов для применения в заданном окружении или интеграции с системой, для которой он предназначен.

 

гарантия качества (quality assurance): Все запланированные и систематические действия, выполняемые в рамках системы качества и продемонстрированные надлежащим образом для обеспечения соответствующей уверенности в том, что объект полностью удовлетворяет требованиям к качеству.

 

Примечание 1. Существуют как внутренние, так и внешние цели гарантии качества:

 

a) внутренняя гарантия качества: в пределах организации гарантия качества обеспечивает уверенность руководству организации;

 

b) внешняя гарантия качества: в контрактных ситуациях гарантия качества обеспечивает уверенность заказчику или другим сторонам.

 

Примечание 2.  Некоторые действия по управлению качеством и гарантии качества взаимосвязаны.

 

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

 

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

 

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

 

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

 

Процессы, виды деятельности и задачи настоящего стандарта - самостоятельно либо совместно с ИСО/МЭК 15288 - могут также использоваться во время приобретения системы, содержащей программные средства.

 

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

 

По отношению к ПО компьютерные пользователи делятся на следующие группы:

1) системные программисты. Занимаются разработкой,  эксплуатацией и сопровождением системного программного  обеспечения;

2) прикладные программисты. Осуществляют разработку и отладку программ для решения различных прикладных задач;

3) конечные пользователи. Имеют элементарные навыки  работы с компьютером и используемыми ими прикладными  программами;

4) администраторы сети. Отвечают за работу вычислительных сетей;

5) администраторы баз данных. Обеспечивают  организационную поддержку базы данных.

Сопровождение программы — поддержка работоспособности программы, переход на ее новые версии, внесения изменений, исправление ошибок и т. д.

Основные характеристики программ:

1) алгоритмическая сложность;

2) состав функций обработки информации;

3) объем файлов, используемых программой;

4) требования к операционной системе (ОС) и техническим средствам обработки, в том числе объем дисковой памяти, размер оперативной памяти для запуска программы, тип  процессора, версия ОС, наличие вычислительной сети и т. д.

 

ПОКАЗАТЕЛИ КАЧЕСТВА ПРОГРАММЫ:

1) мобильность (многоплатформенность) — независимость от технического комплекса системы обработки данных, ОС,  сетевых возможностей, специфики предметной области задачи и т. д.;

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

3) эффективность как с точки зрения требований  пользователя, так и расхода вычислительных ресурсов;

4) учет человеческого фактора — дружественный интерфейс, контекстно-зависимая подсказка, хорошая документация;

5) модифицируемость — способность к внесению  изменений, например, расширении функций обработки, переход на другую техническую базу обработки и т. п.

6) коммуникативность — максимально возможная  интеграция с другими программами, обеспечение обмена данными  между программами.

ВСЕ ПРОГРАММЫ ПО ХАРАКТЕРУ ИСПОЛЬЗОВАНИЯ И КАТЕГОРИЯМ ПОЛЬЗОВАТЕЛЕЙ МОЖНО РАЗДЕЛИТЬ НА ДВА КЛАССА — УТИЛИТАРНЫЕ ПРОГРАММЫ И ПРОГРАММНЫЕ ПРОДУКТЫ.

Утилитарные программы («программы для себя»)  предназначены для удовлетворения нужд их разработчиков. Чаще всего  такие программы выполняют роль отладочных приложений,  являются программами решения задач, не предназначенных для  широкого распространения.

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

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

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

shareware некоммерческие (условно-бесплатные)  программы, которые могут использоваться, как правило,  бесплатно.

 

Ряд производителей использует OEM-программы (Original Equipment Manufacturer), т. е. встроенные программы,  устанавливаемые на компьютеры или поставляемые вместе с  компьютерами.

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

 

2. КЛАССИФИКАЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.

 

Можно выделить три класса ПО:

1) системное ПО;

2) пакеты прикладных программ (прикладное ПО);

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

 

Системное ПО направлено:

1) на создание операционной среды функционирования  других программ;

2) обеспечение надежной и эффективной работы самого  компьютера и вычислительной сети;

3) проведение диагностики и профилактики аппаратуры  компьютера и вычислительных сетей;

4) выполнение вспомогательных технологических процессов (копирование, архивация, восстановление файлов  программ и БД и т. п.).

Системное ПО (System Software) — совокупность программ и программных комплексов для обеспечения работы компьютера и вычислительных сетей.

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

 

 

Таким образом, прикладное ПО — комплекс взаимосвязанных программ для решения задач определенного класса предметной области.

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

2.1. Системное программное обеспечение.

В составе системного ПО можно выделить две составляющие:

1) базовое ПО;

2) сервисное ПО.

Базовое ПО — минимальный набор программных средств, обеспечивающих работу компьютера.

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

В базовое ПО входят:

1) операционная система;

2) операционные оболочки (текстовые, графические);

3) сетевая операционная система.

 

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

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

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

 

(см.:  Гордеев А. В.  Операционные системы: Учебник для вузов. — 2-е изд. — СПб.: Питер, 2007. — 416 с.).  

 

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

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

Основные функции:

 

- Исполнение запросов программ (ввод и вывод данных, запуск и остановка других программ, выделение и освобождение дополнительной памяти и др.).

 

- Загрузка программ в оперативную память и их выполнение.

 

- Стандартизованный доступ к периферийным устройствам (устройства ввода-вывода).

 

- Управление оперативной памятью (распределение между процессами, организация виртуальной памяти).

 

- Управление доступом к данным на энергонезависимых носителях (таких как жёсткий диск, оптические диски и др.), организованным в той или иной файловой системе.

 

- Обеспечение пользовательского интерфейса.

 

- Сохранение информации об ошибках системы.

 

Дополнительные функции:

 

- Параллельное или псевдопараллельное выполнение задач (многозадачность).

 

- Эффективное распределение ресурсов вычислительной системы между процессами.

 

- Разграничение доступа различных процессов к ресурсам.

 

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

 

- Взаимодействие между процессами: обмен данными, взаимная синхронизация.

 

- Защита самой системы, а также пользовательских данных и программ от действий пользователей (злонамеренных или по незнанию) или приложений.

 

- Многопользовательский режим работы и разграничение прав доступа.

 

Операционные системы для ПК делятся:

• на одно- и многозадачные (в зависимости от числа  параллельного выполнения прикладных процессов);

• одно- и многопользовательские (в зависимости от числа пользователей, одновременно работающих с ОС);

• непереносимые и переносимые на другие типы  компьютеров;

• несетевые и сетевые.

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

 

Операционные оболочки — специальные программы,  предназначенные для облегчения общения пользователя с командами ОС. Операционные оболочки имеют текстовый и графический варианты интерфейса конечного пользователя.

 

Расширением базового ПО компьютера является набор  сервисных, дополнительно устанавливаемых программ, которые можно классифицировать по функциональному признаку  следующим образом:

• программы диагностики работоспособности компьютера;

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

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

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

• программы обслуживания сети.

Эти программы часто называют утилитами.

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

 

Утилита (англ. utility или tool) — вспомогательная компьютерная программа в составе общего программного обеспечения для выполнения специализированных типовых задач, связанных с работой оборудования и операционной системы (ОС).

 

(см.: Воройский Ф. С. Информатика. Новый систематизированный толковый словарь-справочник. — 3-е изд. — М. : ФИЗМАТЛИТ, 2003. — 760 с. — (Введение в современные информационные и телекоммуникационные технологии в терминах и фактах)).

 

Утилиты предоставляют доступ к возможностям (параметрам, настройкам, установкам), недоступным без их применения, либо делают процесс изменения некоторых параметров проще (автоматизируют его).

 

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

 

Виды утилит по связи с ОС.

 

По зависимости от операционной системы можно различать:

 

- Независимые утилиты, не требующие для своей работы операционной системы.

 

- Системные утилиты, входящие в поставку ОС и требующие её наличия.

 

- Оптимизатор диска для восстановления целостности файловой системы и дефрагментации.

 

Виды утилит по функциям.

 

- Диспетчеры файлов;

 

- Архиваторы (с возможным сжатием данных);

 

- Просмотрщики;

 

- Утилиты для диагностики аппаратного или программного обеспечения;

 

- Утилиты восстановления после сбоев;

 

- Оптимизатор диска — вид утилиты для оптимизации размещения файлов на дисковом накопителе, например, путём дефрагментации диска;

 

- Шредеры файлов;

 

- Деинсталлятор — программа для удаления программного обеспечения;

 

- Утилиты управления процессами.

 

2.2. Инструментарий технологии программирования.

Инструментарий технологии программирования — это  программные продукты, предназначенные для поддержки  технологии программирования (рисунок 7).

 

Рисунок 7. Инструментарий технологии программирования.

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

Язык программирования — это формализованный язык для описания алгоритма решения задач на компьютере. Языки  программирования можно условно разделить на следующие классы:

• машинные языки — это языки, воспринимаемые  аппаратной частью компьютера (машинные коды);

• машинно-ориентированные языки, отражающие структуру конкретного типа компьютера (ассемблер);

• процедурно-ориентированные языки — это языки, в  которых имеется возможность описания программы как  совокупности процедур, или подпрограмм (Си, Паскаль и др.);

• проблемно-ориентированные языки, предназначенные для решения задач определенного класса (ЛИСП, ПРОЛОГ).

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

Системы программирования включают:

• компилятор (транслятор);

• интегрированную среду разработки программ (не всегда);

• отладчик;

• средства оптимизации кода программ;

• набор библиотек;

• редактор связей;

• сервисные средства (утилиты) (для работы с библиотеками, текстовыми и двоичными файлами);

• справочные системы;

• систему поддержки и управления продуктами  программного комплекса.

Компилятор транслирует всю программу без ее выполнения.

Трансляторы (интерпретаторы) выполняют пооперационную  обработку и выполнение программы.

Отладчики (debugger) — специальные программы,  предназначенные для трассировки и анализа выполнения других  программ. Трассировка — это обеспечение выполнения в  пооператорном варианте.

Инструментальная среда пользователя — это специальные средства, встроенные в пакеты прикладных программ, такие, например, как:

• библиотека функций, процедур, объектов и методов  обработки;

• макрокоманды;

• клавишные макросы;

• языковые макросы;

• конструкторы экранных форм и объектов;

• генераторы приложений;

• языки запросов высокого уровня;

• конструкторы меню и др.

Интегрированные среды разработки программ объединяют  набор средств для их комплексного применения на  технологических этапах создания программы.

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

Одним из современных средств разработки ИС является CASE-технология (CASEComputer-Aided System Engineering) — программный комплекс, автоматизирующий весь  технологический процесс анализа, проектирования, разработки и  сопровождения сложных программных систем.

Средства CASE-технологий делятся:

• на встроенные в систему реализации — все решения по  проектированию и реализации привязки к выбранной СУБД;

• независимые от системы реализации — все решения по проектированию ориентированы на унификацию  (определение) начальных этапов жизненного цикла программы и средств их документирования, обеспечивают большую  гибкость в выборе средств реализации.

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

В некоторых CASE-системах поддерживается кодогенерация программ — создание каркаса программ и создание полного продукта.

  1. ПАКЕТЫ ПРИКЛАДНЫХ ПРОГРАММ.

 

Классификация пакетов прикладных программ (ППП)  приведена на рисунке  8.

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

• ППП автоматизированного бухгалтерского учета;

• ППП финансовой деятельности;

• ППП управления персоналом;

• ППП управления производством;

• банковские информационные системы и т. п.

 

 

Рисунок 8. Классификация пакетов прикладных программ.

Основные тенденции развития:

• создание программных комплексов в виде  автоматизированных рабочих мест (АРМ) управленческого персонала;

• создание интегрированных систем управления предметной областью на базе вычислительных сетей, объединяющих АРМы;

• организация данных больших информационных систем в виде распределенной БД на сети ЭВМ;

• наличие простых языков средств конечного пользователя и др.

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

 

 

К ППП общего назначения относят:

1. Системы управления базами данных (СУБД),  обеспечивающие организацию и хранение локальных БД на автономно  работающих компьютерах либо централизованное хранение БД на файл-сервере и сетевой доступ к ним. В современных СУБД  содержатся элементы CASE-технологии процесса проектирования, в частности:

• визуализирована схема БД;

• осуществлена автоматическая поддержка целостности БД при различных видах обработки (включение, удаление,  модификация);

• предоставляются так называемые мастера, обеспечивающие поддержки процесса проектирования;

• созданы шаблоны (прототипы) структур БД, отчетов, форм и т. д.

2. Серверы БД — это ПО, предназначенное для создания и использования при работе в сети интегрированных БД в архитектуре «клиент — сервер». Многопользовательские СУБД в сетевом варианте обработки информации хранят данные на  файл-сервере, специально выделенном компьютере, но сама обработка  ведется на рабочих станциях. Серверы БД в отличие от этого  большую часть обработки (хранение, поиск, извлечение и передачу данных клиенту) данных выполняют самостоятельно,  одновременно обеспечивая данными большое число пользователей сети.

 

Общим для различных видов серверов БД является  использование реляционного языка SQL (Structured Query Language) для реализации запросов к данным. Большинство серверов БД  поддерживает несколько платформ, широкий спектр протоколов  передачи данных. Проблемы: обеспечение целостности данных,  тиражирование данных по узлам сети и синхронное обновление.

3. Генераторы отчетов (серверы отчетов), обеспечивающие реализацию запросов и формирование отчетов в печатном или экранном виде в условиях сети с архитектурой «клиент —  сервер». Сервер отчетов подключается к серверу БД,  использующему драйверы сервиса БД.

 

4. Текстовые процессоры, предназначенные для работы с  текстовыми документами. Развитием данного направления  являются издательские системы (пример:  Microsoft Word).

5. Табличные процессоры, являющиеся удобной средой для вычислений конечным пользователем, содержат средства  деловой графики, средства специализированной обработки (пример:  Microsoft Excel).

6. Средства презентационной графики — специализированные программы, предназначенные для создания изображений и их показа на экране, подготовки слайд-фильмов, мультфильмов и их проектирования (пример:  Microsoft PowerPoint).

 

7. Интегрированные пакеты  – набор нескольких  программных продуктов, функционально дополняющих друг друга,  поддерживающие единые информационные технологии,  реализованные на единой операционной и вычислительной платформе (пример: Microsoft Office). Компоненты интегрированных пакетов могут работать изолированно друг от друга, имеют общий интерфейс, благодаря этому их лучше осваивать.

 

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

Наиболее распространены системы компьютерной математики (СКМ) для решения  прикладных задач в области математики, физики, в технических науках (Maple, Maxima, MathLab, SkyLab и др.).  

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

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

• программы-переводчики, средства проверки орфографии,  распознавание текста;

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

• браузеры, средства создания WWW-страниц;

• средства электронной почты.

Настольные издательские системы. Данный класс ПО  включает программы (PageMaker, CorelDraw, PhotoShop for Windows и т. д.), обеспечивающие информационную технологию  компьютерной издательской деятельности:

• форматирование и редактирование текстов;

• автоматическую разбивку текста на страницы;

• компьютерную верстку печатной страницы;

• монтирование графики;

• подготовку иллюстраций и т. п.

 

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

Системы искусственного интеллекта:

• программы-оболочки для создания экспертных систем  путем наполнения баз знаний и правил логического вывода;

• готовые экспертные системы для принятия решений в  рамках определенных предметных областей;

• системы анализа и распознавания речи, текста и т. п.

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ.

 

[1] Благодатских В.А., Волнин В.А., Поскакалов К.Ф. Стандартизация разработки программных средств. Учебное пособие /Под ред. О.С. Разумова. М.: Финансы и статистика, 2005. – 288 с., ил.

 

[2] Брауде Э. Технология разработки программного обеспечения. СПб.: Питер, 2004. – 655 с.: ил.

[3] Вигерс К. Разработка требований к программному обеспечению /Пер. с англ. – М.: ИТД «Русская Редакция», 2004. – 576.: ил. 

 

 

[4] Гагарина Л.Г., Кокорева Е.В., Виснадул Б.Д. Технология разработки программного обеспечения. Учебное пособие /Под ред. Л.Г. Гагариной. – М.: ИД «Форум»: ИНФРА-М, 2008. – 400 с.: ил. – (Высшее образование).

  

[5] Котов С.Л., Палюх Б.В., Федченко С.Л. Разработка, стандартизация и сертификация программных средств и информационных технологий и систем. Учебное пособие. Тверь.: ТГТУ, 2006. – 104 с.