Стендовый доклад "О термине "программное изделие"" на 2-й всесоюзной конференции по технологии программирования

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

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

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

Промышленный характер современного программирования очевиден, поскольку, во-первых, носит промышленный характер вообще освоение информационных ресурсов [1]; а во-вторых, разработка и эксплуатация программных средств требует регламентации, стандартизации, отчуждаемости продукта труда, экономического регулирования, т.е. того, что отличает промышленную деятельность от любой другой. Однако из этого ещё не следует, что аналогом программного производства является именно машиностроительное производство (существует ещё и добывающая, и обрабатывающая промышленность, в которой не изготавливаются сложные технические изделия). Более того, если даже программирование - "изготавливающая" промышленность, из этого ещё не следует, что именно программист изготавливает (как, например, ничего не изготавливает технолог станков с ЧПУ), и т.д.

Лобовое понимание "промышленности" программирования приводит к весьма непростым проблемам. Например, считая, что программист изготавливает продукцию, мы вынуждены оценивать объём этой продукции, и неизбежно приходим в тупик, поскольку и оценка толщины колод, и изощрённые методики Холстеда [2]оказываются одинаково ненадёжными [1, 3, 4, 5]. Возникают также другие методологические, правовые и чисто технические сложности. Большинство из них связано с тем, что программное изделие обнаруживает ряд свойств, необычных для промышленного изделия - фактически отсутствует фаза копирования, иначе определяется "сбой", и т.д. Всё это, вместе взятое, заставляет предположить, что наше понимание программирования, возможно, неадекватно. Прежде, чем применять термин "изделие" к программе,следует доказать, что программа обладает всеми свойствами, необходимыми для изделия; прежде, чем классифицировать методы изготовления программ, следует доказать, что именно программист их изготавливает, и т.д., т.е. корректно в философско-экономическом смысле определить, что есть инструмент, а что изделие, кто работник и где станок. Иначе может оказаться, что мы измеряем свойства инструмента, искренне считая, что это свойства самого изделия.

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

  1. Деятельность программиста не есть изготовление. Он не сборщик, а технолог. В частности, это означает, что для оценки производительности труда не нужно искать способ оценки количества продукции, выпускаемой программистом, поскольку никакая продукция не производится. Нужно установить категории сложности, как это принято у технологов [6]
  2. Продукт труда коллектива программистов - не изделие, а технологическая схема, и товарные свойства этого продукта - не товарные свойства этого изделия, а товарные свойства технологии. Это, по-видимому, снимает многие правовые проблемы, а также проблемы ценообразования.
  3. Собственно производство продукции происходит не в ВЦ разработчика, а в ВЦ пользователя. Именно туда следует переносить стандарты массового производства. В частности, при таком понимании программа описывает не весь технологический процесс, а лишь автоматизированные участки. "Ручная" документация, следовательно, не есть описание работы с изделием, а описание ручных участков технологического процесса, и должна оформляться соответствующим образом.

Однако, что же в таком случае, программное изделие? Если программа является технологией, то под ПИ следует, видимо, понимать объект, существующий в ЭВМ во время выполнения программы. Точно также, как абстрактные понятия "материализуются" у нас в мозгу в виде физических связей нейтронов, так же они "материализуются" в ЭВМ в результате выполнения программы. Вообще говоря, такое определение изделия допустимо, но оно обладает столь необычными свойствами, что оказывается ничем не лучше известного определения ПИ (так, оно существует и может использоваться только в момент изготовления и т.д.).

Однако мы и не обязаны искать именно изделие, поскольку технология - это не обязательно технология изготовления: может быть технология добычи и переработки; поэтому имеет смысл считать программу технологией переработки информации. Казалось бы, автор ломится в открытую дверь, поскольку программа всегда именно так и понималась. Но это понимание было весьма эклектическим - если это технология, то почему мы её изготавливаем? А если это изделие, то почему мы относимся к нему как к процессу? Если уж это изделие, то мы должны без всяких оговорок обращаться с ним только как с изделием, в частности, определить, из какого материала оно состоит (материал не обязательно должен быть "материальным", но по крайней мере мы должны знать его свойства: говорить, что программное изделие состоят из информации - слишком расплывчато). Если же это технология, то мы не должны приписывать ей свойств изделий.

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

СПИСОК ЛИТЕРАТУРЫ

  1. Громов Г. Р. Национальные информационные ресурсы: проблемы промышленной эксплуатации //М.Наука.1985.237с.
  2. Холстед М. Х. Начала науки о программах //М.Финансы и статистика. 1981г. 128с.
  3. Бабий А. А. О некоторых характеристиках личной производительности труда программистов. // УСИМ 1985 №6, с17-19.
  4. Бабий А. А., Быкова И. Н., Пискунова И. Ю. О СТП-оценке производительности труда программистов //Вычислительные методы и математическое моделирование. Тезисы докладов Всесоюзной школы молодых учёных и специалистов (Шушенское 8-14 сентября 1986). Красноярск 1986 с 99-100.
  5. Фокс Дж. Программное обеспечение и его разработка //М.Мир 1985 368с.
  6. Хайкин Р. М., Мамаев В. И. Нормирование труда технологов, разрабатывающих технологические процессы для станков с ЧПУ//Нормирование труда инж.-тех.раб. и служ." Материалы семинара. М.1986.

Опубликовано: на стенде конференции
(c) Алексей Бабий 1986