Лекция №16
Программное обеспечение и технологии программирования
Основные термины и определения
Программа (program) – это упорядоченная последовательность команд (инструкций) компьютера (программного кода), реализующая некоторый алгоритм для решения поставленной задачи.
Программное обеспечение (software), ПО – совокупность программ, процедур и правил обработки информации, и эксплуатационных документов, необходимых для сопровождения этих программ.
Задача (problem, task) – проблема, подлежащая решению.
Прикладная задача – это задача, связанная с некоторой областью деятельности человека, называемой «прикладной областью». Например, задача, связанная с математикой, физикой, химией, экономикой, бухгалтерией, полиграфией и т.д.
Приложение (application) или прикладная программа (software application) – программная реализация решения некоторой прикладной задачи.
Интерфейс прикладного программирования (иногда интерфейс программирования приложений) (Application Programming Interface, API) — набор готовых подпрограмм, структур данных, классов и констант, предоставляемых некоторым приложением (библиотекой, сервисом) для её использования во внешних программных продуктах.
Системная программа (system program) – программа, реализующая решение некоторых задач по управлению компьютерной системой или аппаратурой ЭВМ.
Программирование (programming) – теоретическая и практическая деятельность, связанная с созданием программ.
Кодирование (coding) – процесс написания программного кода с целью реализации определённого алгоритма на определённом языке программирования.
Тестирование (testing) – процесс поиска ошибок работы программы, посредством проверки правильности результатов ее функционирования на наборах данных, характерных для рабочего состояния программы, называемых тестами.
|
Отладка (debug) – точное определение местоположения ошибок в программе, причин и условий их возникновения, с целью последующего их устранения.
Трассировка (tracing) или раскрутка алгоритма (программы) – это процесс пошагового выполнения алгоритма (программы) с целью анализа значений переменных, логических условий и результатов выполнения алгоритма (программы).
Инструментальное программное обеспечение – ПО, предназначенное для облегчения процесса создания, тестирования, трассировки, отладки новых программ и подготовки для них эксплуатационных документов.
Классификация ПО
Рассмотрим наиболее распространенный способ классификации программного обеспечения, который основывается на области применения программных продуктов:
Системное программное обеспечение
Инструментальное программное обеспечение
Прикладное программное обеспечение
Системное ПО
Системное программное обеспечение (System Software), СПО – совокупность системных программ и программных комплексов для организации работы аппаратного обеспечения компьютера (Hardware) и сетей ЭВМ.
СПО можно разделить на две категории: базовое СПО и сервисное СПО (или утилиты).
В базовое программное обеспечение входят:
Базовая система ввода-вывода (БСВВ, BIOS);
Операционная система, сетевая операционная система;
|
Командные процессоры, операционные оболочки (текстовые и графические).
Базовая система ввода-вывода является низшим уровнем программного обеспечения. Она отвечает за взаимодействие с базовыми аппаратными средствами. Базовое программное обеспечение содержится в составе базового аппаратного обеспечения и сохраняется в специальных микросхемах постоянного запоминающего устройства (ПЗУ), которые обычно называются BIOS – Base Input-Output System (базовая система ввода-вывода). Программы и данные записываются в ПЗУ на этапе производства и не могут быть изменены во время эксплуатации. Примерами программ из BIOS могут служить:
- программа стартовой загрузки компьютера (запуска процессора) при включении;
- программа самотестирования аппаратных компонентов компьютера после стартовой загрузки - «POST (Power-On Self Test)»
- программа первоначальной загрузки компьютера, которая получает управление после успешного завершения тестов POST и делает первый шаг для загрузки операционной системы. Она считывает с жесткого, гибкого диска, DVD или CD программу начальной загрузки операционной системы, записанную в загрузочном секторе, и передает ей управление;
- программа установки параметров компьютера «Setup», которая предназначена для просмотра и модификации энергонезависимой CMOS-памяти, например для изменения текущего времени и даты, параметров быстродействия процессора, памяти, шин и т.п.
- программа низкоуровневого форматирования дисков, программы для автоматического определения конфигурации накопителей на жестких магнитных дисках, программы конфигурирования системных плат;
|
- подпрограммы обработки прерываний от различных периферийных устройств, например для отображения на экране компьютера символов, для ввода данных с клавиатуры и мыши, записи и чтения данных с магнитных дисков, для печати на принтере и т.п.
Операционная система представляет собой совокупность программных средств и предназначена для:
Управления ресурсами ЭВМ (техническим оборудованием, аппаратурой, периферийными устройствами, памятью и т.п.);
Управления процессами (программами, приложениями), выполняемыми на ЭВМ;
Предоставления пользователю средств (интерфейса) по взаимодействию с ЭВМ с целью управления ресурсами и процессами.
Другими словами, пользователь, взаимодействуя с ОС управляет работой всей вычислительной системой, включая: оперативную память, процессор, монитор, печатающее устройство, магнитные и оптические диски, программы различного типа, файлы, события и т.д.
Основные функции ОС:
Загрузка пользовательских программ в оперативную память и их исполнение;
Обеспечение работы с устройствами долговременной памяти, такими как магнитные диски, ленты, оптические диски и т.д. ОС управляет свободным пространством на этих носителях и структурирует пользовательские данные, организует файловую систему;
Предоставление стандартного доступа к различным устройствам ввода/вывода, таким как терминалы, модемы, печатающие устройства и т.д.;
Обеспечивать пользовательский интерфейс для управления любыми ресурсами;
Параллельное (псевдопараллельное) исполнение нескольких задач;
Распределение ресурсов компьютера между задачами;
Организация взаимодействия задач друг с другом;
Взаимодействие пользовательских программ с нестандартными внешними устройствами;
Организация межмашинного взаимодействия и разделения ресурсов;
Защита системных ресурсов, данных и программ пользователя, исполняющихся процессов и самой себя от ошибочных и зловредных действий пользователей, и их программ.
Операционные системы делятся на:
Одно- и многозадачные (в зависимости от числа параллельно выполняемых прикладных процессов);
Одно- и многопользовательские (в зависимости от числа пользователей, одновременно работающих с операционной системой);
Непереносимые и переносимые на другие типы компьютеров;
Несетевые и сетевые, обеспечивающие работу в вычислительных сетях ЭВМ.
Наиболее известные ОС: MS-DOS, IBM OS/2, Unix, Free BSD, GNU/Linux, MS Windows, Apple Mac OS, Novell NetWare, SunOS, Solaris и др.
Сетевая операционная система (Network operating system) – это операционная система, которая обеспечивает обработку, хранение и передачу данных в информационной сети.
Системный администратор сетевой ОС определяет разделяемые ресурсы, задаёт пароли, определяет права доступа для каждого пользователя или группы пользователей. Таким образом, сетевые ОС делят на сетевые ОС для серверов и сетевые ОС для пользователей. Сетевая ОС для пользователей – это операционная система отдельного компьютера, обеспечивающая ему возможность работать в сети.
Серверные сетевые ОС имеют более широкие функции. Рассмотрим их подробнее.
Основными задачами сетевой ОС являются:
Разделение ресурсов сети (например, дисковые пространства, принтеры и т.п.);
Администрирование сети.
Сетевая ОС должна уметь обеспечивать:
Адресацию объектов в сети;
Функционирование сетевых служб;
Коммуникационные функции (сообщения, почта);
Адресацию, буферизацию, маршрутизацию информации в сети;
Безопасность данных;
Защиту от несанкционированного доступа к данным в сети;
Ограничение доступа в определенное время, и (или) для определенных станций, и (или) определенное число раз;
Управление пользователями и ограничение совокупности доступных конкретному пользователю каталогов и ресурсов;
Ограничение для конкретного пользователя списка возможных действий (например, только чтение файлов);
Отказоустойчивость сети;
Все функции управление сетью;
И т.п.
Отказоустойчивость сети определяется наличием в сети автономного источника питания, отображением или дублированием информации в дисковых накопителях. Отображение заключается в хранении двух копий данных на двух дисках, подключенных к одному контроллеру, а дублирование означает подключение каждого из этих двух дисков к разным контроллерам. Сетевая ОС, реализующая дублирование дисков, обеспечивает более высокий уровень отказоустойчивости. Дальнейшее повышение отказоустойчивости связано с дублированием серверов.
Основные функции управления сетью реализуются в программном обеспечении, поддерживающем протоколы управления такие, как например ICMP и SNMP и др.Такое программное обеспечение представлено менеджерами и агентами. Менеджер - прикладная программа, выдающая сетевые команды. Агенты доводят эти команды до исполнительных устройств и сигнализируют о событиях в состоянии устройств, они следят за трафиком и фиксируют аномалии, помогают восстановлению информации после сбоев, борются с вирусами и т.п.
В сетевых ОС обычно выделяют ядро, реализующее большинство из перечисленных функций и ряд дополнительных программ (служб), ориентированных на реализацию протоколов верхних уровней, организацию распределенных вычислений и т.п. К сетевому программному обеспечению относятся также драйверы сетевых плат, различные для разных типов ЛВС (Ethernet, TokenRing, AppleTalk и др.). Но и внутри одного типа ЛВС имеется много плат с разными характеристиками интеллектуальности, скорости, объема буферной памяти.
Наиболее известные сетевые ОС: Apple Talk, LANtastic, Novell NetWare, NFS, OS/2 LAN Server/Manager, MS Windows 2003/2008 Server, POWERfusion, POWERLan, Vines, Unix, GNU/Linux и др.
Командный процессор (интерпретатор команд) – системная программа, предназначенная для интерпретации (выполнения) команд пользователя, запуска программ, выполнения скриптов (последовательности команд), заданий и некоторых других задач. Командный процессор запускается либо при входе пользователя в систему, либо из какой-то программы, например из графической оболочки (в т.ч. из другого командного процессора).
Приведем примеры командных процессоров:
Command.com (MS-DOS и Windows 9x)
cmd.exe (NT, 2000, 2003, XP, Vista)
Bash, Sh, csh (Linux, Unix)
Операционные оболочки — специальные программы, предназначенные для облегчения общения пользователя с командами операционной системы. Операционные оболочки имеют текстовый и графический варианты интерфейса конечного пользователя.
Текстовые оболочки, как правило «надстраиваются» в виде дополнительной системной программы над командным процессором и усовершенствуют его командный интерфейс, делая удобным для пользователя выполнение основных операций в операционной системе, например, создание файлов, каталогов, копирование, перемещение, переименование файлов, просмотр, распечатка файлов, просмотр содержимого каталогов и т.п.
Наиболее популярны следующие виды текстовых оболочек операционной системы Windows:
Norton Commander 5.0;
XTree Gold 4.0;
Far;
Norton Navigator и др.
Графические оболочки являются более удобными по сравнению с текстовыми, т.к. используют встроенный графический интерфейс ОС. По функциональному назначению отличия от текстовых оболочек – минимальны. Как правило, в современных ОС графические оболочки встраиваются непосредственно в ОС и запускаются в самом конце загрузки ОС. Примером такой оболочки может служить «Проводник Windows» (Windows Explorer), который представляет собой визуальную среду управления включающую в себя Рабочий стол, Меню пуск, Панель задач, а также функции управления файлами.
Примеры графических оболочек: Windows Explorer, FreeBSD GNOME, X-Windows System, Motif, CDE, KDE, Aston shell, Geoshell, Secure Desktop и др.
Сервисное СПО или утилиты позволяют расширить набор дополнительно устанавливаемых программ для выполнения вспомогательных операций обработки данных или обслуживания компьютеров, которые можно разделить на следующие группы:
Программы диагностики работоспособности компьютера;
Антивирусные программы, обеспечивающие защиту компьютера, обнаружение и восстановление зараженных файлов;
Программы обслуживания дисков, обеспечивающие проверку качества поверхности магнитного диска, контроль, сохранности файловой системы на логическом и физическом уровнях, сжатие дисков, резервное копирование данных на внешние носители и т.п.;
Программы архивирования данных, которые обеспечивают процесс сжатия информации с целью уменьшения объема памяти для ее хранения;
Дополнительные программы обслуживания сети
и др.
Инструментальное программное обеспечение
Инструментальное ПО предназначено для использования в ходе проектирования, разработки и сопровождения компьютерных программ. К инструментальному ПО можно отнести следующие виды программ:
Компиляторы
Трансляторы
Ассемблеры
Интерпретаторы
Компоновщики
Отладчики
Средства автоматизированного тестирования программ
Генераторы документации
Комплект средств разработки (SDK)
Системы управления версиями
Системы программирования и интегрированные среды разработки программ
Системы автоматизации программирования (CASE)
и др.
Компилятор – это программное средство для перевода программ, написанных на каком-либо языке программирования, в программы, представленные в двоичных машинных кодах. Компиляторы делятся на три вида – трансляторы, ассемблеры и интерпретаторы.
Транслятор –это компилятор, который полностью переводит программы на каком-либо языке программирования в машинные коды или в так называемый объектный код. Полученная программа в машинных кодах может быть позже преобразована в исполнимый модуль, загружена в оперативную память и запущена на выполнение процессором. Разновидностью транслятора считается ассемблер – программа, которая переводит текст программы, написанный на машинно-ориентированном языке («мнемокоде» или «языке ассемблера») в двоичный код. Понятие ассемблера зачастую связывается непосредственно с машинно-ориентированным языком. Поэтому этот термин иногда используется в значении – язык программирования машинного уровня.
Интерпретатор – это компилятор, который построчно (или по одной команде) переводит исходную программу на языке программирования в двоичные коды и тут же передает этот двоичный код процессору на выполнение.
Компоновщик – программа, которая производит компоновку исполняемого или загрузочного кода – принимает на вход один или несколько объектных модулей и собирает по ним один исполнимый модуль, который может быть загружен в память и запущен на выполнение процессором.
Отладчик – как правило, является частью среды разработки программного обеспечения или отдельным приложением, предназначенным для поиска ошибок в программе. Отладчик позволяет выполнять пошаговую трассировку программы, отслеживать, устанавливать или изменять значения переменных в процессе выполнения программы, устанавливать и удалять контрольные точки или условия остановки и т. д.
Средства автоматизированного тестирования программ – программные модули, позволяющие создавать автоматизированные тесты с минимальным участием человека и в автоматизированном режиме выдавать на вход тестовые последовательности, отслеживать реакцию работы тестируемой программы. Как правило, такие средства тестируют программы на быстродействие, надежность при больших потоках данных, – это так называемое «нагрузочное тестирование». Например, проверка программ при большом сетевом трафике и т.п. Но существуют средства по проверке функциональных возможностей, например инструменты, предназначенные для проверки соответствия приложения предъявляемым бизнес-требованиям.
Генератор документации – программа или пакет программ, позволяющая получать документацию, предназначенную для программистов (документация на API) и/или для конечных пользователей системы, по особым образом комментированному исходному коду и, в некоторых случаях, по исполняемым модулям (полученным на выходе компилятора). Обычно, генератор анализирует исходный код программы, выделяя синтаксические конструкции, соответствующие значимым объектам программы (типам, классам и их членам/свойствам/методам, процедурам/функциям и т. п.). В ходе анализа также используется метаинформация об объектах программы, представленная в виде документирующих комментариев. На основе всей собранной информации формируется готовая документация, как правило, в одном из общепринятых форматов – HTML, HTMLHelp, PDF, RTF и других.
Комплект средств разработки (SDK, Software Development Kit) или «devkit» – набор программ и библиотек подпрограмм, позволяющий специалистам по программному обеспечению создавать приложения для определённого пакета программ, программного обеспечения базовых средств разработки, аппаратной платформы, компьютерной системы, видеоигровых консолей, операционных систем и прочих платформ. Программист, как правило, получает SDK непосредственно от разработчика целевой технологии или системы. Часто SDK распространяется через Интернет. Многие SDK распространяются бесплатно для того, чтобы поощрить разработчиков использовать данную технологию или платформу.
Система управления версиями (Version Control System, VCS или Revision Control System) — программное обеспечение для облегчения работы с изменяющейся информацией. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости, возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение и многое другое. Такие системы наиболее широко применяются при разработке программного обеспечения, для хранения исходных кодов разрабатываемой программы. Однако, они могут с успехом применяться и в других областях, в которых ведётся работа с большим количеством непрерывно изменяющихся электронных документов.
Интегрированная среда разработки (ИСР) (Integrated development environment, IDE) – система программных средств, используемая для разработки программного обеспечения. Обычно среда разработки включает в себя текстовый редактор, компилятор и/или интерпретатор, средства автоматизации сборки и отладчик. Иногда также содержит средства для интеграции с системами управления версиями и разнообразные инструменты для упрощения конструирования графического интерфейса пользователя. Многие современные среды разработки также включают браузер классов, инспектор объектов и диаграмму иерархии классов — для использования при объектно-ориентированной разработке ПО. Хотя и существуют среды разработки, предназначенные для нескольких языков — такие как Eclipse, NetBeans, Embarcadero RAD Studio или Microsoft Visual Studio, обычно среда разработки предназначается для одного определённого языка программирования — как например, Visual Basic, Delphi, Dev-C++. Частный случай ИСР — среды визуальной разработки, которые включают в себя возможность визуального редактирования интерфейса программы. Иногда ИСР называют «система программирования», хотя в большинстве случаях ИСР охватывает расширенный спектр функций и возможностей.
Системы автоматизации программирования (Computer-Aided System Engineering, CASE) – программный комплекс, автоматизирующий весь технологический процесс анализа, проектирования, разработки, кодирования, отладки и сопровождения сложных программных систем. Основное достоинство CASE-технологии – это поддержка коллективной работы над проектом за счет возможности работы в локальной и глобальной сети разработчиков, экспорта(импорта) любых фрагментов проекта, организованного управления программами. Как правило, CASE-системы поддерживают автоматическую кодогенерацию программ – создание каркаса программой системы и создание полного продукта с системной документацией.