Производительность программирования
Производительность программирования (также называемая производительностью программного обеспечения или производительностью разработки ) описывает степень способности отдельных программистов или групп разработчиков создавать и развивать программные системы. Производительность традиционно определяется соотношением количества произведенного программного обеспечения и затрат, затраченных на него. Здесь деликатность заключается в поиске разумного способа определения количества программного обеспечения.
Терминология
[ редактировать ]Производительность — важная тема, изучаемая в таких различных дисциплинах, как производство, организационная психология, промышленное проектирование, стратегический менеджмент, финансы, бухгалтерский учет, маркетинг и экономика. Уровни анализа включают индивидуальный, групповой, дивизиональный, организационный и национальный уровни. [1] Из-за такого разнообразия не существует четкого определения производительности и факторов, влияющих на нее, хотя исследования проводятся уже более века. Как и в разработке программного обеспечения, отсутствие единого мнения о том, что на самом деле представляет собой производительность, воспринимается как серьезное препятствие для обоснованного обсуждения производительности. [2] Следующие определения описывают наилучший консенсус в отношении терминологии. [3]
Производительность
[ редактировать ]Хотя не существует общепринятого определения производительности, похоже, существует согласие в том, что производительность описывает соотношение между выпуском и затратами:
Производительность = Выход/Вход
Однако в различных дисциплинах можно встретить разные понятия и, в частности, разные единицы измерения входных и выходных данных. В обрабатывающей промышленности обычно используется прямая зависимость между количеством произведенных единиц и количеством потребляемых единиц. [4] В непроизводственных отраслях обычно используются человеко-часы или аналогичные единицы, чтобы обеспечить сравнение результатов и ресурсов.
Одно из основных соглашений заключается в том, что значение производительности и средства ее измерения различаются в зависимости от того, какой контекст оценивается. В производственной компании возможные контексты: [3]
- отдельная машина или производственная система;
- производственная функция, например сборка;
- процесс производства одного продукта или группы связанных продуктов;
- фабрика; и
- вся заводская система компании
Пока рассматриваются классические производственные процессы, прямой показатель производительности прост: сколько единиц продукта заданного качества производится с какими затратами. Что касается интеллектуальной работы, то с продуктивностью дело обстоит гораздо сложнее. Как мы измеряем продуктивность авторов, ученых или инженеров? В связи с растущей важностью умственного труда (в отличие от ручного труда), [5] Многие исследователи пытались разработать средства измерения производительности, которые можно было бы применять в непроизводственном контексте. Принято считать, что характер работы, связанной с знаниями, фундаментально отличается от ручного труда, и, следовательно, необходимо учитывать факторы, помимо простого соотношения результатов и затрат, например, качество, своевременность, автономность, успех проекта, удовлетворенность клиентов и инновации. Однако исследовательские сообщества ни в одной из дисциплин пока не смогли разработать широко применимые и признанные средства измерения производительности. [1] То же самое справедливо и для более конкретной области продуктивности программирования.
Рентабельность
[ редактировать ]Рентабельность и производительность тесно связаны между собой, и их фактически часто путают. Однако, поскольку рентабельность обычно определяется как соотношение выручки и себестоимости
Рентабельность = Выручка/Затраты
Он имеет более широкий охват, чем производительность, т.е. количество факторов, влияющих на прибыльность, больше, чем количество факторов, влияющих на производительность. В частности, рентабельность может меняться без каких-либо изменений производительности, например, из-за внешних условий, таких как инфляция издержек или цен. Кроме того, взаимозависимость между производительностью и прибыльностью обычно проявляется с задержкой, т.е. рост производительности редко отражается на немедленном росте прибыльности, который, скорее всего, реализуется в долгосрочной перспективе.
Производительность
[ редактировать ]Термин «производительность» даже шире, чем производительность и прибыльность, и охватывает множество факторов, влияющих на успех компании. Следовательно, хорошо известные инструменты контроля производительности, такие как сбалансированная система показателей, действительно включают производительность в качестве центрального, но не уникального фактора. Другими важными факторами являются, например, восприятие компании клиентами или заинтересованными сторонами.
Эффективность и результативность
[ редактировать ]Эффективность и результативность — это термины, которые приводят к еще большей путанице, поскольку их сами часто путают, и, кроме того, эффективность часто путают с производительностью. Разницу между эффективностью и результативностью обычно объясняют неформально: эффективность – это правильные действия , а результативность – правильные действия . Хотя существует множество других определений, [3] Существует определенное согласие, что эффективность относится к использованию ресурсов и главным образом влияет на требуемый коэффициент производительности. С другой стороны, эффективность в основном влияет на коэффициент производительности, поскольку обычно имеет прямые последствия для клиента. Эффективность можно определить как «способность достичь желаемого результата».
Обычно предполагается, что эффективность можно определить количественно, например, по коэффициентам использования, что значительно легче, чем эффективность.
Качество
[ редактировать ]Танген утверждает: «Улучшение качества, за исключением того факта, что бездефектная продукция увеличивает объем выпуска, не должно включаться в концепцию производительности». [3] Однако в большей части классической литературы по дисциплинам, не связанным с программным обеспечением, особенно в сфере производства, роль качества продукции в коэффициенте производительности явно не обсуждается. [6] В более поздних работах из непроизводственных дисциплин больше внимания уделяется знаниям, офисной работе или работе «белых воротничков» и, следовательно, все чаще обсуждается роль качества по отношению к качеству. [5] [1] [7] [8] [9]
Друкер подчеркивает важность качества для оценки производительности работников умственного труда: «Поэтому производительность умственной работы должна быть направлена в первую очередь на достижение качества – и не минимального качества, а оптимального, если не максимального качества. Только тогда можно задаться вопросом: «Каков объем , количество работы?"" [5]
Саари отражает важность качества в своей расширенной формуле производительности: [8]
Общая производительность = (качество и количество вывода)/(качество и количество ввода)
Однако, похоже, что эти усилия по включению качества в определение производительности еще не привели к практической реализации концепции. В настоящее время остается неясным, как количественно оценить расплывчатые понятия «качество и количество выпускаемой продукции», а также «качество и количество вводимых ресурсов», не говоря уже о расчете соотношения.
Уровень развития
[ редактировать ]В разработке программного обеспечения дела обстоят сложнее, чем в производстве товаров. Разработка программного обеспечения — это инженерный процесс.
КОКОМО II
[ редактировать ]Бём был одним из первых исследователей, которые систематически подошли к проблеме производительности программного обеспечения. Его модель оценки затрат COCOMO - теперь COCOMO II. [10] - это стандартные знания в области разработки программного обеспечения. В этой модели он определяет набор факторов, влияющих на производительность, таких как требуемая надежность или возможности аналитиков. Эти факторы широко использовались в других аналогичных подходах к повышению производительности. Остальная часть модели основана на функциональных точках и, наконец, строках исходного кода (LOC). Ограничения LOC как показателя производительности хорошо известны.
Производительность программного обеспечения Джонса
[ редактировать ]Джонс — автор серии книг по продуктивности программного обеспечения. Помимо нескольких теоретических соображений, его основным вкладом является систематическое предоставление и интеграция большого количества данных, необходимых для анализа производительности. По крайней мере, в двух его книгах [11] [12] он приводит ряд факторов производительности, но также отмечает, что для каждого проекта влияет свой набор факторов. Эти факторы могут служить основой для оценки производительности и сравнения со средними показателями по отрасли.
Вот один из таких списков:
Вот 20 факторов, количественное влияние которых на программные проекты было определено на основе исторических данных:
- Используемый язык программирования
- Размер программы
- Опыт программистов и дизайнерского персонала
- Новизна требований
- Сложность программы и ее данных
- Использование методов структурного программирования
- Класс программы или метод распространения
- Тип программы области применения
- Инструменты и условия окружающей среды
- Улучшение существующих программ или систем
- Поддержание существующих программ или систем
- Повторное использование существующих модулей и стандартных проектов
- Генераторы программ
- Языки четвертого поколения
- Географическое разделение мест разработки
- Возможные дефекты и методы устранения
- Существующая документация
- Прототипирование до начала основной разработки
- Проектные команды и организационные структуры
- Моральный дух и оплата труда персонала [12]
Функциональные точки
[ редактировать ]Функциональные точки были предложены Альбрехтом в 1977 году как лучшая мера размера программного обеспечения, чем LOC. В том смысле, что он основан на спецификации программного обеспечения и, таким образом, направлен на измерение размера его функциональности, а не самого кода. Причина в том, что размер кода зависит не только от размера функциональности, но и от способностей программиста: лучшие программисты будут создавать меньше кода для той же функциональности. За прошедшие годы функциональные точки претерпели несколько изменений, в основном по инициативе Международной группы пользователей функциональных точек (IFPUG). Эта группа большая, в нее входят более 1200 компаний, что свидетельствует о довольно активном принятии этой меры. Однако во многих областях ему все еще не хватает практического применения, поскольку часто считается, что он применим только к информационным системам бизнеса.
Разработка программного обеспечения, основанная на ценности
[ редактировать ]Некоторые исследователи предложили разработку программного обеспечения, ориентированную на экономику или ценность, в качестве важной парадигмы в будущих исследованиях в области разработки программного обеспечения. Бём и Хуанг отмечают, что важно отслеживать не только затраты на программный проект, но и реальную заработанную стоимость, то есть ценность для клиента. [13] Они объясняют, что важно создать экономическое обоснование программного обеспечения и поддерживать его в актуальном состоянии. По сути, разработка программного обеспечения, основанная на стоимости, фокусируется на потребительской ценности, измеряемой главным образом в денежных единицах.
Программное обеспечение для людей
[ редактировать ]Знаменитая книга «Людское обеспечение: продуктивные проекты и команды». Де Марко и Листера [14] привлек внимание более широкой аудитории к важности факторов, связанных с людьми. Во многих проектах по разработке программного обеспечения они собрали опыт хороших и плохих управленческих практик, влияющих на продуктивность команды. Они и другие показали, что это решающие проблемы в разработке программного обеспечения, но смогли описать их лишь эпизодически.
Факторы, влияющие на продуктивность программирования
[ редактировать ]Вероятно, существует большое количество факторов, влияющих на продуктивность программирования отдельных лиц и команд. Например, используемый процесс разработки программного обеспечения , вероятно, влияет на эффективность и результативность команды.
Личности программистов влияют на используемые стили кодирования , которые, в свою очередь, влияют на производительность программистов. [15]
В популярной культуре
[ редактировать ]В 2007 году комикс xkcd популяризировал концепцию пика Баллмера — что программист, приняв достаточное количество опьянения , достигает высокого уровня производительности. Пик Балмера назван в честь бывшего генерального директора Microsoft Стива Балмера . [16] и, вероятно, представляет собой игру на бальмеровской серии спектральных линий водорода, названной в честь Иоганна Бальмера . [17]
Ссылки
[ редактировать ]- ↑ Перейти обратно: Перейти обратно: а б с Рамирес, Ю.В., Нембхард, Д.А. Измерение производительности работников умственного труда: таксономия. Журнал интеллектуального капитала, 2004, 5, 602-628.
- ^ Нил, А., Хескет, Б., Андерсон, Н., Онс, Д.С., Синангил, Х.К., Висвесваран, К. (ред.) Справочник по промышленной, трудовой и организационной психологии, продуктивности в организациях. Sage Publications Ltd, 2002, 8–24.
- ↑ Перейти обратно: Перейти обратно: а б с д Танген, С. Демистификация производительности и производительности, Международный журнал производительности и производительности, 2005, 54, 34-36.
- ^ Чу, BW Серьезное руководство по измерению производительности. Гарвардский бизнес-обзор, 1988, 66, 110–115.
- ↑ Перейти обратно: Перейти обратно: а б с Друкер, П.Ф. Производительность работников умственного труда: самая большая проблема. Обзор менеджмента Калифорнии, 1999, 41, 79–94.
- ^ Томас, Б.Е. и Барон, Дж.П. Оценка производительности работников умственного труда: обзор литературы Исследовательская лаборатория строительной инженерии (USACERL), 1994 г.
- ^ Аль-Дарраб, И.А. Взаимосвязь между производительностью, эффективностью, использованием и качеством. Исследование работы, 2000, 49, 97-104.
- ↑ Перейти обратно: Перейти обратно: а б Саари, С. Производительность: теория и измерение. В Бизнес-учебнике. Европейской конференции по производительности (EPC), 2006 г.
- ^ Рэй, П., Саху, С. Измерение и оценка производительности белых воротничков. Международный журнал операций и управления производством, 1989, 9, 28-47.
- ^ Бём и др. Оценка стоимости программного обеспечения с помощью COCOMO II, 2000 г.
- ^ Джонс, Каспер (2000). Оценки программного обеспечения, тесты и лучшие практики . Бостон, Массачусетс: Аддисон-Уэсли.
- ↑ Перейти обратно: Перейти обратно: а б Джонс, Каспер (1986). Программирование производительности . Нью-Йорк: Книжная компания McGraw-Hill. п. 85 –86. ISBN 9780070328112 . OCLC 611260287 . Проверено 14 апреля 2020 г.
- ^ Барри Бём, Ли Го Хуан. Разработка программного обеспечения, основанная на ценности: практический пример. Программное обеспечение IEEE, 2003 г.
- ^ Том ДеМарко, Тимоти Листер. Peopleware: продуктивные проекты и команды, 1987 г.
- ^ Карими, Захра; Бараани-Дастьерди, Ахмад; Гасем-Агаи, Насер; Вагнер, Стефан (2016). «Связь между личностями, стилями и производительностью в программировании» . Журнал систем и программного обеспечения . 111 : 228–241. arXiv : 1611.10169 . дои : 10.1016/j.jss.2015.09.011 . S2CID 400518 .
- ^ «Пик Баллмера» . xkcd . Проверено 7 октября 2023 г.
- ^ «323: Пик Балмера — объясните xkcd» . www.explainxkcd.com . Проверено 7 октября 2023 г.
Дальнейшее чтение
[ редактировать ]- Оценка стоимости программного обеспечения с помощью Cocomo II , Барри В. Бём и др., Прентис Холл, 2000. ISBN 978-0-13-026692-7 .
- Разработка продуктов в два раза быстрее: новые правила, новые инструменты , Престон Г. Смит и Дональд Г. Райнертсен, Wiley, 1997. ISBN 978-0-471-29252-4 .
- Программирование производительности , Кэйперс Джонс , Макгроу-Хилл, 1986. ISBN 978-0-07-032811-2 .
- Оценка затрат на программное обеспечение , Кэйперс Джонс , МакГроу-Хилл, 2007. ISBN 978-0-07-148300-1 .