Программное обеспечение (ПО) – это совокупность программных средств, управляющих работой ЭВМ и/или автоматизированной системы, а также документация, необходимая для эксплуатации этих средств. Различают общее и прикладное (специальное) программное обеспечение.
• Общее ПО – это совокупность управляющих и обрабатывающих программ, предназначенных для планирования и организации вычислительного процесса, автоматизации программирования и отладки программ. В общее ПО входит ОС, программы технического обслуживания и вспомогательные программы.
• Прикладное (специальное) ПО – часть ПО, состоящая из отдельных прикладных программ и пакетов прикладных программ, предназначенных для решения различных задач пользователей ЭВМ и созданных на их основе автоматизированных систем.
Пакет прикладных программ – набор (комплект) программ, связанной с ними документации (лицензионное свидетельство, паспорт, инструкции пользователя и т.п.), предназначенный для решения задач в определенной проблемной области.
Документация как код
Виды программного обеспечения (ПО)
• Прикладное ПО.
• Служебное ПО.
• Системное ПО.
• Базовое ПО.
Базовый уровень — это самый низкий уровень программного обеспечения. Он отвечает за взаимодействие с базовыми аппаратными средствами. Базовые программные средства непосредственно входят в состав базового оборудования и хранятся в специальных микросхемах ПЗУ (BIOS).
Системный уровень — переходный. Программы, работающие на этом уровне, обеспечивают взаимодействие прочих программ компьютерной системы с программами базового уровня и непосредственно с аппаратным обеспечением. От программного обеспечения этого уровня во многом зависят эксплуатационные показатели всей вычислительной системы в целом.
Конкретные программы, отвечающие за взаимодействие с конкретными устройствами, называются драйверами устройств — они входят в состав ПО системного уровня.
Другой класс программ системного уровня отвечает за взаимодействие с пользователем. Эти программные средства называют средствами обеспечения пользовательского интерфейса. От них зависит удобство работы с компьютером и производительность труда на рабочем месте.
Совокупность программного обеспечения системного уровня образует ядро ОС компьютера.
Наличие ядра ОС – непременное условие для возможности практической работы человека с вычислительной системой.
Программное обеспечение служебного уровня этого уровня взаимодействует как с программами базового уровня, так и с программами системного уровня. Служебные программы называют также утилитами.
Основное назначение утилит состоит в автоматизации работ по проверке, наладке, настройке компьютерной системы. Некоторые служебные программы включают в состав ОС, но большинство служебных программ являются для ОС внешними и служат для расширения её функций.
ПО прикладного уровня представляет собой комплекс прикладных программ, с помощью которых решаются конкретные задачи от производственных до творческих и развлекательно – обучающих.
Видео урок: Понятие программного обеспечения
Классификация прикладных программных средств
• Текстовые редакторы – ввод и редактирование текстовых данных.
• Текстовые процессоры позволяют не только вводить и редактировать текст, но и форматировать, то есть оформлять текст.
• Графические редакторы предназначены для создания и обработки графических изображений. Различают растровые, векторные редакторы и 3D-редакторы.
• Системы управления данными. Базами данных являются огромные массивы данных, организованные в табличные структуры.
• Электронные таблицы – это комплексные средства для хранения различных типов данных и их обработки.
• Системы автоматизированного проектирования.
• CAD-системы для автоматизации проектно-конструкторских работ.
• Экспертные системы для анализа данных, содержащихся в базах данных и выдачи рекомендаций по запросу пользователей.
• Редакторы HTML (Web-редакторы) предназначены для создания и редактирования Web-документов.
• Браузеры – средства создания WWW-страниц (обозреватели, средства просмотра Web).
• Интегрированные система делопроизводства для автоматизации рабочего места руководителя.
• Бухгалтерские системы – это специализированные системы, сочетающие в себе функции текстовых и табличных редакторов, электронных таблиц и систем управления базами данных.
• Финансовые аналитические системы используются в банковских и биржевых структурах.
• Геоинформационные системы предназначены для автоматизации картографических и геодезических работ на основе информации, полученной типографическими и аэрокосмическими методами.
• Системы видеомонтажа — предназначены для цифровой обработки видеоматериала, их монтажа, создания видеоэффектов, наложения звука, титров и субтитров.
• Обучающие, развивающие, справочные, развлекательные программы.
• Коммуникационные пакеты для организации взаимодействия пользователей с удаленными абонентами или информационными ресурсами сети.
• Средства электронной почты (Pegasys Mail).
• Настольные издательские системы для автоматизации процесса верстки полиграфических изданий (PageMaker, CorelDraw, PhotoShop for Windows и т.д.), обеспечивающие информационную технологию компьютерной издательской деятельности:
— форматирование и редактирование текстов;
— автоматическую разбивку текста на страницы;
— компьютерную верстку печатной страницы;
— подготовку иллюстраций и т.п.
• Программные средства мультимедиа. Основное значение данных программных средств – создание и использование аудио- и видеоинформации для расширения информационного пространства пользователя (различные БД компьютерных
произведений искусства, библиотеки звуковых записей и т.д.).
• Системы искусственного интеллекта:
— программы оболочки для создания экспертных систем путем наполнения баз знаний и правил логического вывода;
— готовые экспертные системы для принятия решений в рамках определенных предметных областей;
— системы анализа и распознавания речи, текста и т.п.
Примеры систем искусственного интеллекта: FIDE, MYSIN, Guru и др.
• Диспетчеры Файлов (файловые менеджеры). С помощью этих программ выполняется большинство операций, связанных с обслуживанием файловой структуры.
• Средства сжатия данных (архиваторы) для создания архивов.
• Средства просмотра и воспроизведения.
• Средства диагностики программного и аппаратного обеспечения.
• Средства контроля (мониторинга) позволяют следить за процессами, происходящими в компьютерной системе.
• Средства коммуникации позволяют создавать соединения с удаленными компьютерами, обслуживать передачу сообщений электронной почты, работу с телеконференциями и т.д.
• Средства обеспечения компьютерной безопасности.
Схема иерархической модели программно-аппаратных средств ЭВМ
• Интегрированные среды разработки прикладных программ – компиляторы, интерпретаторы, генераторы отчётов.
• Исполняемые файлы прикладных программ.
• Ядро операционной системы.
• Виртуальная машина – ассемблерный уровень.
• Микропрограммная среда управления аппаратными средствами.
• Логические схемы аппаратных средств.
Классы программ
Все программы по характеру использования и категориям пользования можно разделить на два класса – утилитарные программы и программные продукты.
• Утилитарные программы («программы для себя») предназначены для удовлетворения нужд их разработчиков. Чаще всего такие программы выполняют роль отладочных приложений, являются программами решения задач, не предназначенных для широкого распространения.
• Программные продукты (изделия) предназначены для удовлетворения потребностей пользователей, широкого распространения и продажи.
Виды программных продуктов
В настоящее время существуют варианты легального распространения программных продуктов, которые появились с использованием глобальных телекоммуникаций:
• Freeware – бесплатные программы, свободно распространяемые, поддерживаются самим пользователем, который правомочен вносить в них необходимые изменения;
• Shareware – некоммерческие (условно – бесплатные) программы, которые могут использоваться, как правило бесплатно.
• Ряд производителей, использует OEM-программы (Original Equipment Manufacturer), т.е. встроенные программы, устанавливаемые на компьютеры или поставляемые вместе с компьютерами.
Программный продукт должен быть соответствующим образом подготовлен к эксплуатации (отлажен), иметь необходимую техническую документацию, предоставлять сервис и гарантию надежной работы программы, иметь товарный знак изготовителя, а также наличие кода государственной регистрации.
Специальные программы
Специальные программы предназначены для облегчения общения пользователя с командами ОС.
Операционные оболочки имеют текстовый и графический варианты интерфейса конечного пользователя. Наиболее популярны такие текстовые оболочки MS DOS, как Norton Commander, DOS Navigator, Volkov Commander и другие. Эти программы существенно упрощают задание управляющей информации для выполнения команд ОС, уменьшают сложность работы конечного пользователя.
Среди графических оболочек MS DOS можно выделить Windows 3.1, Windows 3.11 for Work Group, которые расширяют набор основных (диспетчер файлов, графический редактор, текстовый редактор и т.д.) и сервисных функций, обеспечивающих создание пользователю систем обработки информации в составе одноранговых локальных сетей.
Средства создания ИС
• Интегрированные средства разработки программ объединяют набор средств для их комплексного применения на технологических этапах создания программы.
• CASE-технология (CASE – Computer-Aided System Engineering) – программный комплекс, автоматизирующий весь технологический процесс анализа, проектирования, разработки и сопровождения сложных программных систем.
Средства CASE-технологий делятся на:
• строенные в систему реализации — все решения по проектированию и реализации привязки к выбранной СУБД;
• независимые от системы реализации — все решения по проектированию ориентированы на унификацию (определение) начальных этапов жизненного цикла программы и средств их документирования, обеспечивают большую гибкость в выборе средств реализации.
Основное достоинство- это поддержка коллективной работы над проектом за счет возможности работы в локальной сети разработчиков, экспорта (импорта) любых фрагментов проекта, организованного управления проектами.
В некоторых СASE-системах поддерживается кодогенерация программ — создание каркаса программ и создание полного продукта.
Системы программирования
Системы программирования включают:
• интегрированную среду разработки программ (не всегда);
• средства оптимизации кода программ;
• сервисные средства (утилиты) для работы с библиотеками, текстовыми и двоичными файлами;
• систему поддержки и управления продуктами программного комплекса.
Компилятор транслирует всю программу без ее выполнения.
Трансляторы (интерпретаторы) выполняют пооперационную обработку и выполнение программы.
Отладчики (debugger) – специальные программы, предназначенные для трассировки и анализа выполнения других программ. Трассировка – это обеспечение выполнения в пооператорном варианте.
Программирование
Это совокупность процессов, связанных с разработкой программ и их реализацией. К указанным процессам относят все технические операции, необходимые для создания программ, включая анализ требований, все стадии разработки, а также реализации в виде готового программного продукта.
Языки программирования
Языки программирования являются искусственными, в них синтаксис и семантика строго определены, поэтому они не допускают свободного толкования выражения, что характерно для естественного языка. Языки программирования разделяются на две основные категории:
• язык высокого уровня;
• язык низкого уровня.
К языкам высокого уровня относят Фортран, ПЛ/1, Бейсик, Паскаль, Си, Ада, Алгол, Кобол, Лисп, ЛОГО, Пролог, Си Шарп (С#), Си++, Clipper, AppIeScript, dBase, FoxPro, XML, SAML, HTML, UML, WML, VRML, SQL, DSML, HDML и др.
Определение ПО
Программное обеспечение (ПО) – это совокупность программных средств, управляющих работой ЭВМ и/или автоматизированной системы, а также документация, необходимая для эксплуатации этих средств. Различают общее и прикладное (специальное) программное обеспечение.
• Общее ПО – это совокупность управляющих и обрабатывающих программ, предназначенных для планирования и организации вычислительного процесса, автоматизации программирования и отладки программ. В общее ПО входит ОС, программы технического обслуживания и вспомогательные программы.
• Прикладное (специальное) ПО – часть ПО, состоящая из отдельных прикладных программ и пакетов прикладных программ, предназначенных для решения различных задач пользователей ЭВМ и созданных на их основе автоматизированных систем.
Пакет прикладных программ – набор (комплект) программ, связанной с ними документации (лицензионное свидетельство, паспорт, инструкции пользователя и т.п.), предназначенный для решения задач в определенной проблемной области.
Виды программного обеспечения (ПО)
• Прикладное ПО.
• Служебное ПО.
• Системное ПО.
• Базовое ПО.
Базовый уровень — это самый низкий уровень программного обеспечения. Он отвечает за взаимодействие с базовыми аппаратными средствами. Базовые программные средства непосредственно входят в состав базового оборудования и хранятся в специальных микросхемах ПЗУ (BIOS).
Системный уровень — переходный. Программы, работающие на этом уровне, обеспечивают взаимодействие прочих программ компьютерной системы с программами базового уровня и непосредственно с аппаратным обеспечением. От программного обеспечения этого уровня во многом зависят эксплуатационные показатели всей вычислительной системы в целом.
Конкретные программы, отвечающие за взаимодействие с конкретными устройствами, называются драйверами устройств — они входят в состав ПО системного уровня.
Другой класс программ системного уровня отвечает за взаимодействие с пользователем. Эти программные средства называют средствами обеспечения пользовательского интерфейса. От них зависит удобство работы с компьютером и производительность труда на рабочем месте.
Совокупность программного обеспечения системного уровня образует ядро ОС компьютера.
Наличие ядра ОС – непременное условие для возможности практической работы человека с вычислительной системой.
Программное обеспечение служебного уровня этого уровня взаимодействует как с программами базового уровня, так и с программами системного уровня. Служебные программы называют также утилитами.
Основное назначение утилит состоит в автоматизации работ по проверке, наладке, настройке компьютерной системы. Некоторые служебные программы включают в состав ОС, но большинство служебных программ являются для ОС внешними и служат для расширения её функций.
ПО прикладного уровня представляет собой комплекс прикладных программ, с помощью которых решаются конкретные задачи от производственных до творческих и развлекательно – обучающих.
Источник: lektsia.com
Программное обеспечение
В конце 60-х – начале 70-х годов прошлого века произошло событие, которое вошло в историю как первый кризис программирования. Событие состояло в том, что стоимость программного обеспечения стала приближаться к стоимости аппаратуры («железа»), а динамика роста этих стоимостей позволяла прогнозировать, что к середине 90-годов все человечество будет заниматься разработкой программ для компьютеров. Тогда и заговорили о программной инженерии (или технологии программирования, как это называлось в России) как о некоторой дисциплине, целью которой является сокращение стоимости программ.
Содержимое работы — 1 файл
Программное обеспечение это набор компьютерных программ, процедур и связанной с ними документации и данных (ISO/IEC 12207). Взгляд на ПО как только на программу, сидящую в компьютере слишком узок.
Дело в том, что продается (поставляется) не только программа, но еще и документация, в которой можно прочитать как установить программу и как ей пользоваться и данные для установки программы в различных условиях (конфигурационные файлы). Поэтому ПО иногда называют программным продуктом. Т.е. программный продукт (программное обеспечение) – это не только программы, а также вся связанная с ними документация и конфигурационные данные, необходимые для корректной работы программы. А специалисты по программному обеспечению разрабатывают программные продукты, т.е. такое ПО, которое может быть продано потребителю.
В зависимости от того, для кого разрабатываются программные продукты (конкретного заказчика или рынка, программные продукты бывают двух типов:
- коробочные продукты (generic products – общие продукты или shrink-wrapped software – упакованное ПО);
- заказные продукты (bespoke – сделанный на заказ или customized products – настроенный продукт). Важная разница между ними заключается в том, кто ставит задачу (определяет, или специфицирует требования). В первом случае это делают сами разработчики на основе анализа рынка (маркетинга) – и при этом рискуют сами. Во втором – заказчик и при этом рискует, что разработчик не сможет реально выполнить все требования в срок и при выделенном бюджете.
Что такое программная инженерия
Программная инженерия — это инженерная дисциплина, которая связана со всеми аспектами производства ПО от начальных стадий создания спецификации до поддержки системы после сдачи в эксплуатацию. В этом определении есть две ключевые фразы:
- Инженерная дисциплина
- Все аспекты производства ПО
Инженерная дисциплина. Инженеры – это те специалисты, которые выполняют практическую работу и добиваются практических результатов. Ученый может сказать: проблема неразрешима в рамках существующих теорий и это будет научный результат, достойный опубликования и защиты диссертации.
Для решения задачи инженеры применяют теории, методы и средства, пригодные для решения данной задачи, но они применяют их выборочно и всегда пытаются найти решения, даже в тех случаях, когда теорий или методов, соответствующих данной задаче, еще не существует. В этом случае инженер ищет метод или средство для решения задачи, применяет его и несет ответственность за результат – ведь метод или средство еще не проверены. Набор таких инженерных методов или способов, теоретически возможно не обоснованных, но получивших неоднократное подтверждение на практике, играет большую практическую роль. В программной инженерии они получили название лучших практик (best practices).
Инженеры работают в условиях ограниченных ресурсов: временных, финансовых и организационных (оборудование, техника, люди). Иными словами, продукт должен быть создан в установленные сроки, в рамках выделенных средств, оборудования и людей. Хотя это в первую очередь относится к созданию заказных продуктов (оговаривается в условиях контракта), но при создании коробочных продуктов эти ограничения имеют не меньшее значение, т.к. здесь они диктуются условиями рыночной конкуренции.
Все аспекты производства ПО. Программная инженерия занимается не только техническими вопросами производства ПО (специфицирование требований, проектирование, кодирование), но и управлением программными проектами, включая вопросы планирования, финансирования, управления коллективом и т.д. Кроме того, задачей программной инженерии является разработка средств, методов и теорий для поддержки процесса производства ПО.
Программные инженеры применяют систематичные и организованные подходы к работе для достижения максимальной эффективности и качества ПО. Их задача состоит в адаптации существующих методов и подходов к решению своей конкретной проблемы.
Отличия от информатики
Информатика (computer science) занимается теорией и методами вычислительных и программных систем, в то время как программная инженерия занимается практическими проблемами создания ПО. Информатика составляет теоретические основы программной инженерии и инженер по программному обеспечению должен знать информатику. Так же, как инженер по электронике должен знать физику. В идеале, программная инженерия должна быть поддержана какими-то теориями информатики, но самом деле это не всегда так. Программные инженеры зачастую используют приемы, которые применимы только в конкретных условиях и не могут быть обобщены на другие случаи, а элегантные теории информатики не всегда могут быть применены к реальным большим системам.
И наконец, информатика – это не единственный теоретический фундамент программной инженерии, т.к. круг проблем, стоящих перед программным инженером значительно шире просто написания программ. Это еще управление финансами, организация работ в коллективе, взаимодействие с заказчиком и т.д. Решение этих проблем требуют фундаментальных знаний, выходящих за рамки информатики.
Отличие от других инженерий
Отличие программной инженерии от других инженерий интересно прежде всего с точки зрения двух вопросов:
- Почему доля провальных проектов в программной инженерии так велика по сравнению с другими инженериями?
- Можно ли в программной инженерии применять опыт других инженерий?
Эти вопросы является фундаментальными для программной инженерии. По этому поводу высказывается много мнений (и часто противоположных). Остановимся на некоторых более или менее очевидных отличиях программной инженерии от других инженерий.
Прежде всего, отметим, что жизненный цикл продукта любой инженерии в упрощенном виде включает фазы: проектирование, создание образца, испытание, производство, эксплуатация.
Компьютерная программа – это (в отличие от объектов других инженерий) не материальный объект (просьба не путать с носителем программы – устройством памяти любого типа). Отсюда следуют следующие отличия. Фаза производства состоит в копировании образца на другие носители. Стоимость фазы мала. Если кодирование считать элементом проектирования (что очень близко к истине), то отсутствует также и фаза создания образца (строится компилятором и линковщиком).
Отсюда следуют следующие выводы:
- Стоимость программы – это стоимость только ее проектирования
- Стоимость проектирования коробочных продуктов «размазывается» по копиям
- Стоимость заказных продуктов (массово не копируемых) остается высокой
Второе существенное отличие состоит в том, что программа – искусственный объект. Т.е. для программы нет объективных законов, которым бы подчинялось ее поведение.
Например, у инженера – строителя есть объективные законы строительной механики: равновесия моментов и сил, устойчивости механических систем и т.д. Инженер – строитель может проверить свои архитектурные решения на соответствие этим законам и тем самым обеспечить удачу проекта. Эти законы объективны, они будут действовать всегда.
У программного инженера на первый взгляд также есть типовые, проверенные временем архитектурные решения (например, клиент-серверная архитектура). Но эти решения определяются уровнем развития вычислительной техники (и адекватным им уровнем требований). С появлением техники с принципиально новыми возможностями программному инженеру придется искать новые решения.
Прямым следствием отсутствия возможности «теоретического» контроля проекта является то, что тестирование продукта – это единственный способ убедиться в его качестве. Именно поэтому стоимость тестирования составляет существенную стоимость ПО.
Кстати, строительный инженер, как правило, лишен возможности такого «тестирования» своего продукта перед сдачей его в эксплуатацию.
Ну и наконец, программная инженерия – молодая дисциплина, опыт которой насчитывает всего несколько десятков лет. По сравнению с опытом строительной инженерии (тысячелетия) это конечно очень мало. Программную инженерию иногда сравнивают с ранней строительной, когда законы строительной механики еще не были известны и строительные инженеры действовали методом проб и ошибок, накапливая бесценный опыт. Несмотря на молодой возраст, программная инженерия также накопила определенный опыт, который позволяет (при разумном его применении) делать удачные проекты.
Этот опыт выражен в основных принципах программной инженерии, которые мы с вами сейчас рассмотрим. Подробнее о проблемах проектирования ПО можно посмотреть в неоднозначной статье Кони Бюрера «От ремесла к науке: поиск основных принципов разработки ПО».
Стоимость ПО
Структура стоимости ПО существенно зависит от типа ПО, применяемых методов его разработки и … метода оценки. Так, многие авторы отмечают высокую долю стоимости этапа сопровождения. Для некоторых типов ПО она может составлять 60 и более процентов от общей стоимости. Между тем, этап сопровождения включает выполнение двух видов работ: исправление ошибок в программе (несоответствий первоначальным требованиям) и внесение изменений в программу (добавление новых требований). При другом подходе к оценке можно считать, что этап сопровождения на стоит оценивать отдельно, т.к. исправление ошибок можно отнести к продолжению тестирования, а внесение изменений – к новому проекту.
Типовое распределение стоимости между основными этапами (без сопровождения)
выглядит следующим образом:
- 15% — спецификация – формулировка требований и условий разработки
- 25% — проектирование – разработка и верификация проекта
- 20% — разработка – кодирование и тестирование компонент
- 40% — интеграция и тестирование – объединение и сборочное тестирование продукта
Отклонения от этой схемы в зависимости от типа ПО выглядят следующим образом:
Для коробочного ПО характерна более высокая доля тестирования за счет сокращения прежде всего доли спецификации (до 5%).
Распределение стоимости заказного ПО зависит от его сложности. При сложном ПО также возрастает доля интеграции и тестирования, но за счет сокращения доли проектирования и разработки Доля спецификаций может возрастать. Сокращение доли проектирования и разработки достигается за счет применения опробованных проектных решений и повторного использования готовых компонент.
Применение опробованных решений и готовых компонент при создании коробочных продуктов позволяет повысить качество и сократить сроки разработки.
Накопленный программной инженерией опыт
Программный процесс
Одним из основных понятий программной инженерии является понятие жизненного цикла программного продукта и программного процесса.
Жизненный цикл – непрерывный процесс, начинающийся с момента принятия решения о создании ПО и заканчивающийся снятием его с эксплуатации. Жизненный цикл разбивается на отдельные процессы.
Процесс – совокупность действий и задач, имеющих целью достижение значимого результата. Основными процессами (иногда называют этапами или фазами) жизненного цикла являются:
- Разработка спецификации требований (результат – описания требований к программе, которые обязательны для выполнения – описание того, что программа должна делать)
- Разработка проекта программы (результат – описание того, как программа будет работать)
- Кодирование (результат – исходный код и файлы конфигурации)
- Тестирование программы (результат — контроль соответствия программы требованиям)
- Документирование (результат – документация к программе)
Кроме основных, существует много дополнительных и вспомогательных процессов, связанных не созданием продукта, а с организацией работ (нефункциональные процессы): создание инфраструктуры, управление конфигурацией, управление качеством, обучение, разрешение противоречий, …
Процесс должен быть установлен. Полное установление процесса предполагает:
- Описание процесса – детальное описание действий и операций процесса
- Обучение процессу – проведение занятий с персоналом по освоению процесса
- Введение метрик – установление количественных показателей хода выполнения
- Контроль выполнения – измерение метрических показателей и оценка хода выполнения
- Усовершенствование – изменение процесса при меняющихся условиях применения
Источник: www.turboreferat.ru
Введение в технологию программирования
Аннотация: В данной лекции вводится понятие программного обеспечения (ПО); приводится сводная статистика успешности IT-проектов; даётся обзор возможных причин неудач проектов разработке ПО, рассматривается эволюция развития технологии программирования
1. Немного терминологии
1.1. Программирование
На протяжении всего времени обучения на факультете мы изучаем программирование. Программирование ( Computer science ) — молодая, активно развивающаяся область.
Долгое время человечество волнует вопрос о том, к какому роду деятельности относится программирование. В 60-х — 70-х годах XX века данный вопрос активно обсуждался на научных конференциях. Существовало 2 популярных точки зрения: «программирование это искусство» и «программирование это наука». К единому мнению придти так и не удалось.
В настоящий момент мы можем добавить к этим популярным трактовкам еще одну: «программирование это бизнес». Чтобы понять, что программирование это бизнес, достаточно посмотреть, какими числами выражаются доходы современных IT-компаний. Так, например, по данным http://www.microsoft.com доход корпорации Microsoft за 2005 финансовый год составил 39,70 млрд. $. Впечатлены? Вам нравится этот бизнес? Тогда приступим к изучению курса.
1.2. IT-проекты
Будем понимать под IT-проектами проекты в области информационных технологий. Будем далее рассматривать лишь те IT-проекты, целью которых является разработка программного обеспечения.
Зададимся следующими вопросами:
- Что такое программное обеспечение (ПО)?
- Чем ПО отличается от обычной программы?
- Вчера мы с другом написали «Калькулятор». Определенно, это программа. Является ли она ПО?
1.3. Программы и программное обеспечение (программные продукты)
Программное обеспечение (Software) — набор компьютерных программ, процедур и связанной с ними документации и данных (ISO/ IEC 12207).
Таким образом, программное обеспечение — это не просто программа. Это еще и документация и руководство пользователя.
Вместо словосочетания «программное обеспечение» часто используют другое — «программный продукт». Будем далее считать, что это одно и то же. Одно из главных свойств программного продукта — продаваемость. Продаваемость — залог успеха бизнеса по разработке программного обеспечения. Если вы собираетесь что-то разработать, это должно быть востребовано на рынке.
В противном случае вы потратите деньги на разработку (зарплата сотрудников, накладные расходы, налоги, аренда помещения. ) и ничего не получите взамен. Вы можете написать замечательную программу. Реализовать там новый быстрый алгоритм. Она может великолепно работать, но если она никому не нужна, то вы (как компания) на пути банкротству.
Допустим, в таких программах, как ваша, действительно есть потребность. Допустим, вы год упорно работали, и вот, казалось бы, настал ваш звездный час: все готово, все модули написаны, отлажены, собраны вместе и, как вам кажется, работают. Один «маленький» момент портит всю картину — если у вас нет хорошего (!) руководства пользователя (инструкции), желательно, в русскоязычном и англоязычном вариантах, то вашу программу никто не купит, особенно за границей. Если у вас все есть, но нет специалистов по рекламе, то про вашу программу никто не узнает. Если .
Подытожим: программный продукт — это программа со всей сопутствующей документацией, программа, которую можно продать, либо извлечь из нею финансовую выгоду другим образом.
Вернитесь мысленно к пункту 1.2 и еще раз попробуйте ответить на поставленные вопросы. Получилось? Тогда перейдем к краткому обзору текущего состояния дел в отрасли разработки ПО в России и в мире.
2. Бизнес и IT-проекты. Рынок ПО в России и в мире. Немного статистики
Для того чтобы бизнес был успешным, необходимо (но не достаточно) выполнение многих условий:
- Продукт должен выходить на рынок
- надлежащего качества;
- вовремя;
- интересным потенциальным пользователям.
Рис. 1.1. Статистика успешности IT-проектов. По данным The Standish Group International, Extreme Chaos
К сожалению, ситуация такова, что многие проекты не удовлетворяют этим, казалось бы естественным, условиям. Рассмотрим некоторую статистику (рис. 1.1 ) 1 Источник: The Standish Group International. Данные взяты с http://www.softwaremag.com/archive/2001feb/CollaborativeMgt.html, http://www-128.ibm.com/developerworks/rational/library/feb06/marasco/ .
Приведем расшифровку степени успешности проектов:
- Проваленные: закончились неудачей — цель вообще не была достигнута.
- Испытавшие большие проблемы: закончились созданием продукта, но превысили бюджет или (и) не уложились во время или (и) имеют лишь частичную функциональность.
- Успешные: закончились созданием продукта, уложились в бюджет и время. Вся планируемая функциональность реализована.
Как видите, доля успешных проектов неуклонно возрастает, оставаясь по-прежнему сенсационно малой. И это притом, что в 2004 году на разработку программных средств ушло около 3 700 000 000$.
Рассмотрим еще один любопытный график:
Рис. 1.2. Доля успешных проектов в зависимости от их бюджета.
Данная диаграмма 2 Источник: The Standish Group International. Данные взяты с http://www.infoworld.com/infoworld/img/33FEmyth2_ch2.gif говорит о том, что с ростом размера проекта (бюджет характеризует в данном случае размер и сложность задачи) шансы на его успех катастрофически падают.
Поговорим о текущем положении отрасли в России. В конце 90-х годов, обсуждая этот вопрос, мы приводили следующие качественные характеристики:
- Хорошие программисты.
- Грамотные аналитики.
- Недостаток хороших управленцев.
- Проблемы с документированием и локализацией.
- Проблемы с рекламой и продвижением.
Источник: intuit.ru