Продуктивность программирования (также называемая продуктивностью программного обеспечения или продуктивностью разработки ) описывает степень способности отдельных программистов или групп разработчиков создавать и развивать программные системы. Под производительностью традиционно понимается соотношение между количеством произведенного программного обеспечения и затраченными на него затратами. Здесь хитрость заключается в том, чтобы найти разумный способ определения количества программного обеспечения.
Терминология
Производительность - важная тема, исследуемая в таких различных дисциплинах, как производство, организационная психология, промышленная инженерия, стратегическое управление, финансы, бухгалтерский учет, маркетинг и экономика. Уровни анализа включают индивидуальный, групповой, дивизиональный, организационный и национальный уровни [5]. Из-за такого разнообразия нет четкого определения продуктивности и факторов, влияющих на нее, хотя исследования проводились уже более века. Как и в разработке программного обеспечения, отсутствие единого мнения о том, что на самом деле составляет производительность, воспринимается как серьезное препятствие для обоснованного обсуждения производительности. [1] Следующие определения описывают наилучший консенсус по терминологии. [2]
Продуктивность
Хотя общепринятого определения производительности не существует, похоже, есть согласие, что производительность описывает соотношение между выпуском и затратами:
Производительность = Выход / Вход
Однако в разных дисциплинах можно найти разные понятия и, в частности, разные единицы измерения для ввода и вывода. В обрабатывающей промышленности обычно используется прямая зависимость между количеством произведенных единиц и количеством потребленных единиц. [3] Непроизводственные отрасли обычно используют человеко-часы или аналогичные единицы для сравнения результатов и затрат.
Одно из основных соглашений заключается в том, что значение производительности и способы ее измерения различаются в зависимости от того, какой контекст оценивается. Возможные ситуации в производственной компании: [2]
- отдельная машина или производственная система;
- производственная функция, например сборка;
- процесс производства одного продукта или группы связанных продуктов;
- фабрика; а также
- вся заводская система компании
Пока классические производственные процессы считаются прямой метрикой производительности, проста: сколько единиц продукта заданного качества произведено по каким затратам. Для интеллектуальной работы продуктивность намного сложнее. Как мы измеряем продуктивность авторов, ученых или инженеров? Из-за растущей важности интеллектуального труда (в отличие от ручного труда) [4] многие исследователи пытались разработать средства измерения производительности, которые можно было бы применять в непроизводственном контексте. Принято считать, что природа интеллектуального труда в корне отличается от ручного труда, и, следовательно, необходимо принимать во внимание факторы, помимо простого соотношения результатов и затрат, например, качество, своевременность, автономность, успех проекта, удовлетворенность клиентов и инновации. Однако исследовательские сообщества ни в одной из дисциплин пока не смогли разработать широко применимые и общепринятые методы измерения производительности. [5] То же самое относится и к более конкретной области продуктивности программирования.
Рентабельность
Прибыльность и производительность тесно связаны и, по сути, часто путают. Однако, поскольку рентабельность обычно определяется как соотношение между выручкой и стоимостью
Прибыльность = Доход / Стоимость
Он имеет более широкий охват, чем производительность, т.е. количество факторов, влияющих на прибыльность, больше, чем количество факторов, влияющих на производительность. В частности, рентабельность может измениться без каких-либо изменений в производительности, например, из-за внешних условий, таких как рост издержек или цен. Кроме того, взаимозависимость между производительностью и прибыльностью обычно откладывается, т. Е. Повышение производительности редко отражается в немедленном приросте прибыльности, скорее всего, в долгосрочной перспективе.
Представление
Термин «производительность» даже шире, чем «производительность» и «рентабельность», и охватывает множество факторов, влияющих на успех компании. Следовательно, хорошо известные инструменты контроля производительности, такие как сбалансированная система показателей, действительно включают производительность как фактор, который является центральным, но не уникальным. Другими важными факторами являются, например, восприятие компании клиентами или заинтересованными сторонами.
Эффективность и действенность
Эффективность и результативность - это термины, которые создают дополнительную путаницу, поскольку сами по себе часто путают, и, кроме того, эффективность часто путают с производительностью. Разница между эффективностью и результативностью обычно объясняется неформально, так как эффективность означает правильное выполнение действий, а эффективность - выполнение правильных действий . Хотя существует множество других определений [2], существует определенное согласие с тем, что эффективность относится к использованию ресурсов и в основном влияет на требуемый вклад коэффициента производительности. С другой стороны, эффективность в основном влияет на результат коэффициента производительности, поскольку обычно имеет прямые последствия для клиента. Эффективность можно определить как «способность достичь желаемого результата».
Обычно предполагается, что эффективность может быть определена количественно, например, с помощью коэффициентов использования, значительно легче, чем эффективность.
Качество
Танген заявляет: «Повышение качества, кроме того факта, что безупречная продукция увеличивает уровень выпуска, не должно включаться в концепцию производительности». [2] Однако в большей части классической литературы по непрограммным дисциплинам, особенно в области производства, явно не обсуждается роль качества продукции в коэффициенте производительности. [6] В более поздних работах, относящихся к непроизводственным дисциплинам, больше внимания уделяется знаниям, офисной или служебной работе и, следовательно, все чаще обсуждается роль качества по отношению к качеству. [4] [5] [7] [8] [9]
Друкер подчеркивает важность качества для оценки производительности работников умственного труда: «Производительность умственной работы, следовательно, должна быть направлена в первую очередь на достижение качества - и не минимального качества, а оптимального, если не максимального качества. Только тогда можно спросить:« Каков объем , количество работы? "" [4]
Саари подчеркивает важность качества своей расширенной формулой производительности: [8]
Общая производительность = (Качество и количество выпускаемой продукции) / (Качество и количество на входе)
Однако похоже, что эти усилия по включению качества в определение производительности еще не привели к практической концепции. В настоящее время остается неясным, как количественно определить расплывчатые термины «качество и количество продукции», а также «качество и количество исходных материалов», не говоря уже о том, чтобы рассчитать соотношение.
Современные достижения в области программирования
В разработке программного обеспечения дела обстоят сложнее, чем в производстве товаров. Разработка программного обеспечения - это инженерный процесс.
КОКОМО II
Бем был одним из первых исследователей, которые систематически подходили к области продуктивности программного обеспечения. Его модель оценки затрат COCOMO - теперь COCOMO II [10] - это стандартные знания в области разработки программного обеспечения. В этой модели он определяет набор факторов, влияющих на производительность, таких как требуемая надежность или возможности аналитиков. Эти факторы широко использовались в других аналогичных подходах к повышению производительности. Остальная часть модели основана на функциональных точках и, наконец, исходных строках кода (LOC). Ограничения LOC как показателя производительности хорошо известны.
Производительность программного обеспечения Джонса
Джонс - автор серии книг по продуктивности программного обеспечения. Помимо ряда теоретических соображений, его главный вклад - это систематическое предоставление и интеграция большого количества данных, необходимых для анализа производительности. По крайней мере, в двух своих книгах [11] [12] он приводит ряд факторов производительности, но также указывает, что для каждого проекта влияет различный набор факторов. Эти факторы могут лечь в основу оценок производительности и сравнения со средними отраслевыми показателями.
Это один из таких списков:
Вот 20 факторов, количественное влияние которых на программные проекты было определено на основе исторических данных:
- Используемый язык программирования
- Размер программы
- Опыт программистов и дизайнерского персонала
- Новизна требований
- Сложность программы и ее данных
- Использование методов структурного программирования
- Класс программы или метод распространения
- Тип программы области приложения
- Инструменты и условия окружающей среды
- Улучшение существующих программ или систем
- Обслуживание существующих программ или систем
- Повторное использование существующих модулей и стандартных конструкций
- Генераторы программ
- Языки четвертого поколения
- Географическое разделение локаций застройки
- Возможности дефекта и методы устранения
- (Существующая) документация
- Создание прототипа до начала основной разработки
- Проектные команды и организационные структуры
- Моральный дух и оплата труда сотрудников [12]
Функциональные точки
Функциональные точки были предложены в 1977 году Альбрехтом как лучшая мера размера для программного обеспечения, чем LOC. В этом смысле он основан на спецификации программного обеспечения и, таким образом, направлен на измерение размера его функциональности, а не самого кода. Причина в том, что размер кода зависит не только от размера функциональности, но и от возможностей программиста: лучшие программисты будут производить меньше кода для тех же функций. Функциональные точки претерпели несколько изменений за прошедшие годы, в основном под влиянием Международной группы пользователей функциональных точек (IFPUG). Это большая группа, в которую входят более 1200 компаний, что свидетельствует о довольно сильном принятии этой меры. Однако во многих областях ему все еще не хватает практического применения, потому что часто считается, что он применим только к бизнес-информационным системам.
Разработка программного обеспечения на основе ценности
Несколько исследователей предложили экономически ориентированную или ценностную разработку программного обеспечения в качестве важной парадигмы в будущих исследованиях программной инженерии. Бем и Хуанг отмечают, что важно отслеживать не только затраты на программный проект, но и реальную освоенную стоимость, то есть ценность для клиента. [13] Они объясняют, что важно создать бизнес-обоснование программного обеспечения и поддерживать его в актуальном состоянии. По сути, разработка программного обеспечения на основе ценности фокусируется на ценности для потребителя, в основном измеряемой в денежных единицах.
Peopleware
Знаменитая книга Де Марко и Листера [14] Peopleware: Productive Projects and Teams [14] привлекла внимание широкой аудитории к важности факторов, связанных с людьми. Во многих проектах по разработке программного обеспечения они накопили опыт как хорошей, так и плохой практики управления, которая влияет на продуктивность команды. Они и другие показали, что это решающие проблемы в разработке программного обеспечения, но смогли описать их только анекдотично.
Факторы, влияющие на продуктивность программирования
Вероятно, существует большое количество факторов, влияющих на продуктивность программирования отдельных лиц и команд. Например, используемый процесс разработки программного обеспечения, вероятно, влияет на эффективность и результативность команды.
В личности программных программистов влияют на используемые стили кодирования , которые, в свою очередь, влияют на производительность программистов. [15]
Рекомендации
- ^ Нил, А., Хескет, Б., Андерсон, Н., Онес, Д.С., Синангил, HK, Висвесваран, К. (ред.) Справочник по продуктивности производственной, трудовой и организационной психологии в организациях. Sage Publications Ltd, 2002, стр. 8-24.
- ^ a b c d Tangen, S. Демистифицируя производительность и производительность, Международный журнал производительности и производительности, 2005, 54, 34-36
- ^ Chew, BW Серьезное руководство по измерению производительности. Harvard Business Review, 1988, 66, 110-115
- ^ a b c Друкер, П.Ф. Производительность интеллектуальных работников: самая большая проблема. California Management Review, 1999 г., стр. 41, 79-94
- ^ a b Рамирес, Ю. В., Нембхард, Д. А. Измерение производительности работников умственного труда: таксономия. Журнал интеллектуального капитала, 2004, 5, 602-628
- ↑ Thomas, BE & Baron, JP Evaluating Knowledge Worker Productivity: Обзор литературы, Строительная исследовательская лаборатория (USACERL), 1994
- ^ Аль-Дарраб, И. А. Взаимосвязь между производительностью, эффективностью, использованием и качеством. Рабочий кабинет, 2000, 49, 97-104
- ^ а б Саари, С. Производительность: теория и измерение. В Business Proc. Европейской конференции по производительности (EPC), 2006 г.
- ^ Рэй, П., Саху, С. Измерение и оценка производительности белых воротничков. Международный журнал операций и управления производством, 1989, 9, 28-47
- ^ Boehm et al. Оценка стоимости программного обеспечения с COCOMO II, 2000
- ^ Джонс, Каспер (2000). Оценка программного обеспечения, контрольные показатели и передовой опыт . Бостон, Массачусетс: Аддисон-Уэсли.
- ^ а б Джонс, Каспер (1986). Производительность программирования . Нью-Йорк: Книжная компания Макгроу-Хилл. п. 85 –86. ISBN 9780070328112. OCLC 611260287 . Проверено 14 апреля 2020 года .
- ^ Барри Бём, Ли Го Хуан. Разработка программного обеспечения на основе ценности: пример из практики. Программное обеспечение IEEE, 2003 г.
- ^ Том ДеМарко, Тимоти Листер. Peopleware: продуктивные проекты и команды, 1987 г.
- ^ Карими, Захра; Бараани-Дастджерди, Ахмад; Гасем-Агаи, Насер; Вагнер, Стефан (2016). «Связи между личностями, стилями и исполнением в компьютерном программировании» . Журнал систем и программного обеспечения . 111 : 228–241. arXiv : 1611.10169 . DOI : 10.1016 / j.jss.2015.09.011 . S2CID 400518 .
дальнейшее чтение
- Оценка стоимости программного обеспечения с помощью Cocomo II , Барри Бём и др., Prentice Hall, 2000. ISBN 978-0-13-026692-7 .
- Разработка продуктов в два раза быстрее: новые правила, новые инструменты , Престон Г. Смит и Дональд Г. Райнертсен, Wiley, 1997. ISBN 978-0-471-29252-4 .
- Производительность программирования , Capers Jones , Mcgraw-Hill, 1986. ISBN 978-0-07-032811-2 .
- Оценка стоимости программного обеспечения , Capers Jones , McGraw-Hill, 2007. ISBN 978-0-07-148300-1 .