Функциональное качество программного обеспечения отражает, насколько хорошо оно соответствует заданному проекту, основанному на функциональных требованиях или спецификациях. [1] Этот атрибут также можно охарактеризовать как соответствие части программного обеспечения назначению или его сравнение с конкурентами на рынке как стоящий продукт . [2] Это степень, в которой было создано правильное программное обеспечение.
Структурное качество программного обеспечения означает, насколько оно соответствует нефункциональным требованиям , которые поддерживают выполнение функциональных требований, таких как надежность или ремонтопригодность. Это во многом зависит от того, насколько программное обеспечение работает должным образом .
Многие аспекты структурного качества можно оценить только статически посредством анализа внутренней структуры программного обеспечения, его исходного кода (см. Метрики программного обеспечения ), [3] на уровне единицы и на уровне системы (иногда называемом сквозным). завершение тестирования [4] ), что, по сути, означает, что его архитектура соответствует здравым принципам архитектуры программного обеспечения , изложенным в статье по этой теме Object Management Group (OMG). [5]
Однако некоторые структурные качества, такие как удобство использования , можно оценить только динамически (пользователи или другие лица, действующие от их имени, взаимодействуют с программным обеспечением или, по крайней мере, с каким-то прототипом или частичной реализацией; даже взаимодействие с макетом, выполненным в картоне, представляет собой динамическое тестовый, поскольку такую версию можно считать прототипом). Другие аспекты, такие как надежность, могут касаться не только программного обеспечения, но и базового оборудования, поэтому их можно оценивать как статически, так и динамически ( стресс-тест ). [ нужна цитата ]
Исторически структура, классификация и терминология атрибутов и показателей, применимых к управлению качеством программного обеспечения, были получены или извлечены из ISO 9126 и последующего стандарта ISO/IEC 25000. [6] На основе этих моделей (см. «Модели») Консорциум по качеству ИТ-программного обеспечения (CISQ) определил пять основных желательных структурных характеристик, необходимых для того, чтобы часть программного обеспечения обеспечивала ценность для бизнеса : [7] Надежность, эффективность, безопасность, ремонтопригодность и надежность. (адекватный) Размер. [8] [9] [10]
Измерение качества программного обеспечения дает количественную оценку того, в какой степени программное обеспечение или система оценивается по каждому из этих пяти измерений. Совокупный показатель качества программного обеспечения может быть рассчитан с помощью качественной или количественной схемы оценки или их сочетания, а затем с помощью системы взвешивания, отражающей приоритеты. Этот взгляд на качество программного обеспечения, позиционируемый как линейный континуум, дополняется анализом «критических ошибок программирования», которые при определенных обстоятельствах могут привести к катастрофическим сбоям в работе или снижению производительности, что делает данную систему непригодной для использования независимо от рейтинга, основанного на агрегированных измерениях. Такие ошибки программирования, обнаруженные на системном уровне, составляют до 90 процентов производственных проблем, в то время как на уровне единицы, даже если их гораздо больше, ошибки программирования составляют менее 10 процентов производственных проблем (см. также Правило девяноста-девяноста ). Как следствие, качество кода без контекста всей системы, как его описал У. Эдвардс Деминг , имеет ограниченную ценность. [ нужна цитата ]
Для просмотра, исследования, анализа и передачи результатов измерений качества программного обеспечения концепции и методы визуализации информации предоставляют визуальные интерактивные средства, полезные, в частности, если несколько показателей качества программного обеспечения должны быть связаны друг с другом или с компонентами программного обеспечения или системы. Например, карты программного обеспечения представляют собой специализированный подход, который «может выражать и объединять информацию о разработке программного обеспечения, качестве программного обеспечения и динамике системы». [11]
Качество программного обеспечения также играет роль на этапе выпуска программного проекта. В частности, качество и организация процессов выпуска (также процессов исправления ), [12] [13] управления конфигурацией [14] являются важными частями общего процесса разработки программного обеспечения. [15] [16] [17]
Мотивация
Качество программного обеспечения мотивируется как минимум двумя основными точками зрения:
Управление рисками : сбой программного обеспечения вызвал не только неудобства. Ошибки программного обеспечения могут привести к человеческим жертвам (см., например: Список ошибок программного обеспечения ). Причины варьировались от плохо спроектированных пользовательских интерфейсов до прямых ошибок программирования , [18] [19] [20] см., например, случай с Boeing 737 или случаи непреднамеренного ускорения [21] [22] или случаи Therac-25 . [23] Это привело к появлению требований к разработке некоторых типов программного обеспечения, в частности, исторически сложившегося программного обеспечения, встроенного в медицинские и другие устройства, которые регулируют критически важные инфраструктуры: «[Инженеры, которые пишут встроенное программное обеспечение], видят, что Java-программы останавливаются на одну треть секунды. выполнить сбор мусора и обновить пользовательский интерфейс, и они представляют себе самолеты, падающие с неба». [24] В Соединенных Штатах в рамках Федерального авиационного управления (FAA) Служба сертификации самолетов FAA предоставляет программы программного обеспечения, политику, рекомендации и обучение, уделяя особое внимание программному обеспечению и сложному электронному оборудованию, которое оказывает влияние на бортовую продукцию (« продукт» — самолет, двигатель или пропеллер). [25] Стандарты сертификации, такие как DO-178C , ISO 26262 , IEC 62304 и т. д., служат руководством.
Управление затратами . Как и в любых других областях разработки, программный продукт или услуга, основанные на хорошем качестве программного обеспечения, требуют меньше затрат на обслуживание, их легче понять, и они могут быть более рентабельно изменены в ответ на насущные потребности бизнеса. [26] Отраслевые данные показывают, что низкое качество структуры приложений в основных бизнес-приложениях (таких как планирование ресурсов предприятия (ERP), управление взаимоотношениями с клиентами (CRM) или большие системы обработки транзакций в финансовых услугах) приводит к затратам, перерасходу графика и создает потери в форма переработки (см. Муда (яп. термин) ). [27] [28] [29] Более того, низкое качество структуры тесно коррелирует с серьезными сбоями в работе бизнеса из-за повреждения данных, сбоев в работе приложений, нарушений безопасности и проблем с производительностью. [30]
Отчеты CISQ о стоимости низкого качества оценивают влияние:
2,08 триллиона долларов в 2020 году [31] [32]
2,84 триллиона долларов в 2018 году
По оценкам IBM в отчете «Стоимость утечки данных за 2020 год», средние глобальные затраты на утечку данных: [33] [34]
3,86 миллиона долларов
Определения
ИСО
Качество программного обеспечения — это «способность программного продукта соответствовать требованиям». [35] [36], в то время как для других это может быть синонимом создания клиентов или ценности [37] [38] или даже уровня дефектов. [39] Измерения качества программного обеспечения можно разделить на три части: качество процесса, качество продукта, которое включает внутренние и внешние свойства, и, наконец, качество использования, которое является результатом программного обеспечения. [40]
ASQ
ASQ использует следующее определение: Качество программного обеспечения описывает желательные атрибуты программных продуктов. Существует два основных подхода: управление дефектами и атрибуты качества. [41]
НИСТ
Software Assurance (SA) охватывает как имущество, так и процесс его достижения: [42]
[Оправданная] уверенность в том, что программное обеспечение не содержит уязвимостей, намеренно заложенных в программное обеспечение или случайно добавленных в любой момент его жизненного цикла, и что программное обеспечение функционирует должным образом.
Запланированный и систематический набор действий, которые гарантируют, что процессы и продукты жизненного цикла программного обеспечения соответствуют требованиям, стандартам и процедурам.
PMI
Руководство PMBOK «Расширение программного обеспечения» Института управления проектами определяет не само «качество программного обеспечения» , а обеспечение качества программного обеспечения (SQA) как «непрерывный процесс, который проверяет другие процессы программного обеспечения, чтобы гарантировать, что эти процессы выполняются (включает, например, план управления качеством программного обеспечения).» тогда как контроль качества программного обеспечения (SCQ) означает «заботу о применении методов, инструментов и приемов для обеспечения соответствия рабочих продуктов требованиям к качеству программного обеспечения, находящегося в стадии разработки или модификации». [43]
Другие общие и исторические
Первое определение качества, которое помнит история, было дано Шухартом в начале 20 века: «Есть два общих аспекта качества: один из них связан с рассмотрением качества вещи как объективной реальности, независимой от существования Человек. Другой имеет дело с тем, что мы думаем, чувствуем или ощущаем как результат объективной реальности. Другими словами, существует субъективная сторона качества». [44]
Китченхем и Пфлигер, далее сообщая об учении Дэвида Гарвина, выделяют пять различных точек зрения на качество: [45] [46]
Трансцендентальная перспектива имеет дело с метафизическим аспектом качества. С этой точки зрения качество — это «нечто, к чему мы стремимся как к идеалу, но никогда не сможем реализовать его полностью». [47] Ей трудно дать определение, но это похоже на то, что федеральный судья однажды сказал о непристойности: «Я узнаю это, когда увижу это». [48]
Перспектива пользователя связана с соответствием продукта данному контексту использования. В то время как трансцендентальный взгляд является эфирным, взгляд пользователя более конкретен, основан на характеристиках продукта, которые отвечают потребностям пользователя. [47]
С точки зрения производства качество представляет собой соответствие требованиям. Этот аспект качества подчеркивается такими стандартами, как ISO 9001, который определяет качество как «степень, в которой набор присущих характеристик соответствует требованиям» (ISO/IEC 9001 [49] ).
Перспектива продукта подразумевает, что качество можно оценить путем измерения присущих продукту характеристик.
Окончательный взгляд на качество основан на ценности. [37] Эта точка зрения признает, что разные точки зрения на качество могут иметь разную важность или ценность для разных заинтересованных сторон.
Проблема, присущая попыткам определить качество продукта, практически любого продукта, была сформулирована мастером Уолтером А. Шухартом. Трудность определения качества заключается в том, чтобы преобразовать будущие потребности пользователя в измеримые характеристики, чтобы можно было спроектировать и создать продукт, приносящий удовлетворение по цене, которую заплатит пользователь. Это непросто, и как только человек почувствует себя вполне успешным в своем начинании, он обнаружит, что потребности потребителя изменились, появились конкуренты и т. д. [50]
Качество — это определение потребителя, а не решение инженера, не решение маркетинга и не определение общего руководства. Он основан на реальном опыте клиента с продуктом или услугой, сопоставляемом с его или ее требованиями – заявленными или невысказанными, сознательными или просто ощущаемыми, технически действующими или полностью субъективными – и всегда представляет собой движущуюся цель на конкурентном рынке. [51]
Слово качество имеет несколько значений. Два из этих значений доминируют в использовании этого слова: 1. Качество состоит из тех свойств продукта, которые удовлетворяют потребности клиентов и тем самым обеспечивают удовлетворение продукта. 2. Качество состоит из отсутствия недостатков. Тем не менее, в таком справочнике удобно использовать краткое определение слова «качество» как «пригодность к использованию». [52]
Том ДеМарко предположил, что «качество продукта зависит от того, насколько он меняет мир к лучшему». [ нужна цитата ] Это можно интерпретировать как означающее, что функциональное качество и удовлетворенность пользователей более важны, чем структурное качество при определении качества программного обеспечения.
Другое определение, предложенное Джеральдом Вайнбергом в книге «Управление качеством программного обеспечения: системное мышление», звучит так: «Качество — это ценность для какого-то человека». [53] [54] В этом определении подчеркивается, что качество по своей сути субъективно: разные люди по-разному воспринимают качество одного и того же программного обеспечения. Одной из сильных сторон этого определения являются вопросы, которые оно предлагает рассмотреть командам разработчиков программного обеспечения, например: «Какие люди мы хотим ценить наше программное обеспечение?» и «Что для них будет ценным?».
Другие значения и противоречия
Одна из проблем определения качества заключается в том, что «каждый чувствует, что понимает это» [55], а другие определения качества программного обеспечения могут быть основаны на расширении различных описаний концепции качества, используемой в бизнесе.
Качество программного обеспечения также часто путают с обеспечением качества , управлением разрешением проблем [56] , контролем качества [57] или DevOps . Он пересекается с ранее упомянутыми областями (см. также определения PMI), но отличается тем, что фокусируется не только на тестировании, но также на процессах, управлении, улучшениях, оценках и т. д. [57]
Измерение
Хотя концепции, представленные в этом разделе, применимы как к структурному, так и к функциональному качеству программного обеспечения, измерение последнего по существу осуществляется посредством тестирования программного обеспечения . [58] Однако тестирования недостаточно: согласно одному исследованию, «отдельные программисты менее чем на 50% эффективны при поиске ошибок в своем собственном программном обеспечении. А большинство форм тестирования эффективны только на 35%. Это затрудняет определение качество [программного обеспечения]». [59]
Введение
Связь между желаемыми характеристиками программного обеспечения (справа) и измеримыми атрибутами (слева)
Измерение качества программного обеспечения заключается в количественном определении того, в какой степени система или программное обеспечение обладает желаемыми характеристиками. Это может быть выполнено с помощью качественных или количественных средств или их сочетания. В обоих случаях для каждой желаемой характеристики существует набор измеримых атрибутов, существование которых в программном обеспечении или системе имеет тенденцию коррелировать и ассоциироваться с этой характеристикой. Например, атрибутом, связанным с переносимостью, является количество операторов, зависящих от цели, в программе. Точнее, при использовании подхода развертывания функции качества эти измеримые атрибуты представляют собой «как», которые необходимо реализовать, чтобы реализовать «что» в приведенном выше определении качества программного обеспечения.
Структура, классификация и терминология атрибутов и показателей, применимых к управлению качеством программного обеспечения, были получены или извлечены из ISO 9126-3 и последующей модели качества ISO/IEC 25000:2005. Основное внимание уделяется внутреннему структурному качеству. Подкатегории были созданы для обработки конкретных областей, таких как архитектура бизнес-приложений и технические характеристики, такие как доступ к данным и манипулирование ими, или понятие транзакций.
Дерево зависимости между характеристиками качества программного обеспечения и их измеримыми атрибутами представлено на диаграмме справа, где каждая из 5 характеристик, имеющих значение для пользователя (справа) или владельца бизнес-системы, зависит от измеримых атрибутов (слева):
Практика архитектуры приложений
Практика кодирования
Сложность приложения
Документация
Портативность
Технический и функциональный объем
Корреляция между ошибками программирования и производственными дефектами показывает, что базовые ошибки кода составляют 92 процента от общего числа ошибок в исходном коде. Эти многочисленные проблемы на уровне кода в конечном итоге составляют лишь 10 процентов дефектов в производстве. Плохие методы разработки программного обеспечения на уровне архитектуры составляют лишь 8 процентов от общего числа дефектов, но отнимают более половины усилий, затрачиваемых на устранение проблем, и приводят к 90 процентам серьезных проблем с надежностью, безопасностью и эффективностью в производстве. [60] [61]
Анализ на основе кода
Многие из существующих программных мер подсчитывают структурные элементы приложения, возникающие в результате анализа исходного кода для таких отдельных инструкций [62], токенов [63] , управляющих структур ( Сложность ) и объектов. [64]
Измерение качества программного обеспечения заключается в количественном определении того, насколько система или программное обеспечение оценивается по этим параметрам. Анализ может проводиться с использованием качественного или количественного подхода или их сочетания для получения совокупного представления [с использованием, например, средневзвешенных значений, которые отражают относительную важность измеряемых факторов].
Этот взгляд на качество программного обеспечения как на линейный континуум должен быть дополнен выявлением дискретных критических ошибок программирования. Эти уязвимости не могут не пройти проверку, но они являются результатом неправильной практики, которая при определенных обстоятельствах может привести к катастрофическим сбоям в работе, снижению производительности, нарушениям безопасности, повреждению данных и множеству других проблем [65] , которые де-факто делают данную систему уязвимой. непригоден для использования независимо от его рейтинга, основанного на совокупных измерениях. Хорошо известным примером уязвимости является Common Weakness Enumeration , [66] хранилище уязвимостей в исходном коде, которые делают приложения уязвимыми для нарушений безопасности.
Измерение критических характеристик приложения включает в себя измерение структурных атрибутов архитектуры приложения, кодирования и встроенной документации, как показано на рисунке выше. Таким образом, на каждую характеристику влияют атрибуты на многих уровнях абстракции приложения, и все они должны быть включены в расчет меры характеристики, если она должна быть ценным предиктором качественных результатов, влияющих на бизнес. Многоуровневый подход к расчету характеристических показателей, показанный на рисунке выше, был впервые предложен Бёмом и его коллегами из TRW (Boehm, 1978) [67] и является подходом, использованным в стандартах серии ISO 9126 и 25000. Эти атрибуты можно измерить на основе результатов статического анализа исходного кода приложения. Даже динамические характеристики приложений, такие как надежность и эффективность производительности, имеют свои причинные корни в статической структуре приложения.
Структурный анализ и измерение качества выполняются посредством анализа исходного кода , архитектуры , программной среды , схемы базы данных по отношению к принципам и стандартам, которые вместе определяют концептуальную и логическую архитектуру системы. Это отличается от базового, локального анализа кода на уровне компонентов, обычно выполняемого инструментами разработки , который в основном касается вопросов реализации и имеет решающее значение во время отладки и тестирования .
Надежность
Коренные причины низкой надежности кроются в сочетании несоответствия передовым практикам архитектуры и кодирования. Это несоответствие можно обнаружить путем измерения статических атрибутов качества приложения. Оценка статических атрибутов, лежащих в основе надежности приложения, позволяет оценить уровень бизнес-риска и вероятность потенциальных сбоев и дефектов приложения, с которыми оно столкнется при вводе в эксплуатацию.
Оценка надежности требует проверки как минимум следующих передовых методов разработки программного обеспечения и технических характеристик:
Практика архитектуры приложений
Практика кодирования
Сложность алгоритмов
Сложность практики программирования
Соответствие лучшим практикам объектно-ориентированного и структурированного программирования (если применимо)
Коэффициент повторного использования компонентов или шаблонов
Грязное программирование
Обработка ошибок и исключений (для всех уровней — графический интерфейс, логика и данные)
Соответствие многослойного дизайна
Управление границами ресурсов
Программное обеспечение избегает шаблонов, которые могут привести к неожиданному поведению.
Программное обеспечение управляет целостностью и согласованностью данных
Уровень сложности транзакции
В зависимости от архитектуры приложения и используемых сторонних компонентов (таких как внешние библиотеки или платформы), следует определять специальные проверки в соответствии с приведенным выше списком лучших практик, чтобы обеспечить лучшую оценку надежности поставляемого программного обеспечения.
Эффективность
Как и в случае с надежностью, причины неэффективности производительности часто кроются в нарушениях надлежащей практики архитектуры и кодирования, которые можно обнаружить путем измерения статических атрибутов качества приложения. Эти статические атрибуты предсказывают потенциальные узкие места операционной производительности и будущие проблемы с масштабируемостью, особенно для приложений, требующих высокой скорости выполнения для обработки сложных алгоритмов или огромных объемов данных.
Оценка эффективности производительности требует проверки как минимум следующих передовых методов разработки программного обеспечения и технических характеристик:
Практика архитектуры приложений
Соответствующее взаимодействие с дорогостоящими и/или удаленными ресурсами.
Производительность доступа к данным и управление данными
Управление памятью, сетью и дисковым пространством
Качество программного обеспечения включает в себя безопасность программного обеспечения . [69] Многие уязвимости безопасности возникают из-за плохого кодирования и архитектурных практик, таких как внедрение SQL или межсайтовое выполнение сценариев. [70] [71] Они хорошо документированы в списках, поддерживаемых CWE, [72] и SEI/Центром компьютерных аварийных ситуаций (CERT) в Университете Карнеги-Меллона. [68]
Оценка безопасности требует как минимум проверки следующих передовых методов разработки программного обеспечения и технических характеристик:
Внедрение, управление процессом разработки, обеспечивающим безопасность и усиление защиты, например, жизненный цикл разработки безопасности (Microsoft) или Secure Engineering Framework от IBM. [73]
Практика создания безопасной архитектуры приложений [74] [75]
Соответствие многослойного дизайна
Лучшие практики обеспечения безопасности (проверка ввода, внедрение SQL, межсайтовое выполнение сценариев, контроль доступа и т. д.) [76] [77]
Безопасные и хорошие практики программирования [68]
Обработка ошибок и исключений
Ремонтопригодность
Сопровождаемость включает в себя концепции модульности, понятности, изменяемости, тестируемости, возможности повторного использования и передачи от одной группы разработчиков к другой. Они не принимают форму критических проблем на уровне кода. Скорее, плохая ремонтопригодность обычно является результатом тысяч мелких нарушений лучших практик в документации, стратегии предотвращения сложности и базовых практик программирования, которые определяют разницу между чистым и легким для чтения кодом по сравнению с неорганизованным и трудным для чтения кодом. . [78]
Оценка ремонтопригодности требует проверки следующих передовых методов разработки программного обеспечения и технических характеристик:
Практика архитектуры приложений
Документация по архитектуре, программам и коду, встроенная в исходный код
Ремонтопригодность тесно связана с концепцией технического долга Уорда Каннингема , которая является выражением затрат, возникающих в результате отсутствия ремонтопригодности. Причины низкой ремонтопригодности можно классифицировать как безрассудные и расчетливые и преднамеренные и непреднамеренные [79] [80] и часто возникают в неспособности разработчиков, нехватке времени и целей, их невнимательности и несоответствии стоимости создания. документации и, в частности, поддерживаемого исходного кода . [81]
Размер
Для измерения размера программного обеспечения необходимо правильно собрать весь исходный код, включая сценарии структуры базы данных, исходный код для манипуляций с данными, заголовки компонентов, файлы конфигурации и т. д. По сути, существует два типа размеров программного обеспечения, которые необходимо измерить: технический размер (размер) и размер программного обеспечения. функциональный размер:
Существует несколько широко описанных методов технической оценки программного обеспечения . Наиболее распространенный метод технического определения размера — это количество строк кода (#LOC) на каждую технологию, количество файлов, функций, классов, таблиц и т. д., на основе которых можно вычислить функциональные точки;
Наиболее распространенным методом измерения функционального размера является анализ функциональных точек . Анализ функциональных точек измеряет размер программного обеспечения с точки зрения пользователя. Определение размера функциональных точек производится на основе требований пользователя и обеспечивает точное представление как размера для разработчика/оценщика, так и ценности (функциональности, которую необходимо предоставить), а также отражает бизнес-функциональность, предоставляемую заказчику. Метод включает в себя идентификацию и взвешивание распознаваемых пользователем входов, выходов и хранилищ данных. Затем значение размера доступно для использования в сочетании с многочисленными показателями для количественной оценки и оценки поставки и производительности программного обеспечения (стоимость разработки на единицу функции; доставленные дефекты на единицу функции; количество функций на единицу персонала в месяц).
Стандарт определения размеров анализа функциональных точек поддерживается Международной группой пользователей функциональных точек ( IFPUG ). Его можно применять на ранних этапах жизненного цикла разработки программного обеспечения, и он не зависит от строк кода, как, например, несколько неточный метод Backfireing. Этот метод не зависит от технологии и может использоваться для сравнительного анализа между организациями и отраслями.
С момента появления анализа функциональных точек появилось несколько его вариаций, а семейство методов функционального определения расширилось и теперь включает в себя такие меры определения размера, как COSMIC, NESMA, точки вариантов использования, FP Lite, ранние и быстрые FP и, совсем недавно, Story Points. Тем не менее, функциональные баллы имеют давнюю историю статистической точности и использовались в качестве общей единицы измерения работы в многочисленных проектах по управлению разработкой приложений (ADM) или аутсорсингу, выступая в качестве «валюты», в которой предоставляются услуги и измеряется производительность.
Одним из распространенных ограничений методологии Function Point является то, что это ручной процесс, и поэтому он может быть трудоемким и дорогостоящим в крупномасштабных инициативах, таких как разработка приложений или аутсорсинг. Этот негативный аспект применения методологии, возможно, побудил ИТ-лидеров отрасли сформировать Консорциум по качеству ИТ-программного обеспечения, ориентированный на внедрение стандарта вычислимых показателей для автоматизации измерения размера программного обеспечения, в то время как IFPUG продолжает продвигать ручной подход, поскольку большая часть его деятельности опирается на о сертификации счетчиков ФП.
CISQ определяет определение размера как оценку размера программного обеспечения для поддержки оценки затрат, отслеживания прогресса или других связанных действий по управлению программным проектом. Используются два стандарта: автоматические функциональные точки для измерения функционального размера программного обеспечения и автоматические точки расширения для измерения размера как функционального, так и нефункционального кода в одной мере. [82]
Выявление критических ошибок программирования
Критические ошибки программирования — это конкретные неверные методы архитектуры и/или кодирования, которые приводят к максимальному, немедленному или долгосрочному риску нарушения бизнеса. [83]
Зачастую они связаны с технологиями и во многом зависят от контекста, бизнес-целей и рисков. Некоторые могут считать соблюдение соглашений об именах, в то время как другие – например, те, кто готовит почву для передачи знаний – сочтут это абсолютно важным.
Критические ошибки программирования также можно классифицировать по характеристикам CISQ. Базовый пример ниже:
Надежность
Избегайте шаблонов программного обеспечения, которые приводят к неожиданному поведению ( неинициализированные переменные , нулевые указатели и т. д.).
Методы, процедуры и функции, выполняющие вставку, обновление, удаление, создание таблицы или выбор, должны включать управление ошибками.
Многопоточные функции должны быть поточно-безопасными, например, сервлеты или классы действий Struts не должны иметь экземплярные/нефинальные статические поля.
Эффективность
Обеспечьте централизацию клиентских запросов (входящих и данных) для снижения сетевого трафика.
Избегайте запросов SQL, которые не используют индекс для больших таблиц в цикле.
Безопасность
Избегайте полей в классах сервлетов, которые не являются окончательными статическими.
Избегайте доступа к данным без включения управления ошибками
Проверьте коды возврата управления и внедрите механизмы обработки ошибок.
Обеспечьте проверку входных данных, чтобы избежать ошибок межсайтового скриптинга или ошибок SQL-инъекций.
Ремонтопригодность
Следует избегать глубоких деревьев наследования и вложенности, чтобы улучшить понятность.
Модули должны быть слабо связаны (разветвления, посредники), чтобы избежать распространения модификаций.
Обеспечьте соблюдение единых соглашений об именах
Реализованные модели качества
Новые предложения моделей качества, такие как Squale и Quamoco [84], пропагандируют прямую интеграцию определения атрибутов качества и измерения. Разбивая атрибуты качества или даже определяя дополнительные уровни, сложные абстрактные атрибуты качества (такие как надежность или ремонтопригодность) становятся более управляемыми и измеримыми. Эти модели качества применялись в промышленном контексте, но не получили широкого распространения.
Ассоциация морских менеджеров в области информационных технологий и коммуникаций (AMMITEC). Руководство по качеству морского программного обеспечения. Сентябрь 2017 г.
Кэперс Джонс и Оливье Бонсиньур, «Экономика качества программного обеспечения», Addison-Wesley Professional, 1-е издание, 31 декабря 2011 г., ISBN 978-0-13-258220-9
CAT Lab — Лаборатория инструментов анализа кода CNES (на GitHub)
Гириш Сурьянараяна, Процесс разработки программного обеспечения и качество проектирования: перетягивание каната? [85]
Хо-Вон Юнг, Сын-Гвеон Ким и Чанг-Син Чунг. Измерение качества программного продукта: обзор ISO/IEC 9126. IEEE Software , 21(5):10–13, сентябрь/октябрь 2004 г.
Международная Организация Стандартизации. Разработка программного обеспечения. Качество продукта. Часть 1. Модель качества . ISO, Женева, Швейцария, 2001. ISO/IEC 9126-1:2001(E).
Измерение качества программного обеспечения: серия ISO 25000 и CMMI (сайт SEI)
MSQF — система качества программного обеспечения, основанная на измерениях. Библиотека Корнельского университета.
Омар Альшатри, Хельге Янике, «Оптимизация обеспечения качества программного обеспечения», compsacw, стр. 87–92, 2010 г., семинары 34-й ежегодной конференции IEEE по компьютерному программному обеспечению и приложениям, 2010 г.
Роберт Л. Гласс. Программное обеспечение для обеспечения качества сборки . Прентис-Холл, Аппер-Сэддл-Ривер, Нью-Джерси, 1992 год.
Роланд Петраш, «Определение качества программного обеспечения: практический подход», ISSRE, 1999 г.
Журнал качества программного обеспечения [87] Springer Nature
Спинеллис, Диомидис (4 апреля 2006 г.). Качество кода: взгляд на открытый исходный код. Река Аппер-Сэддл, Нью-Джерси, США: Addison-Wesley Professional. ISBN 978-0-321-16607-4.
Стивен Х. Кан. Метрики и модели в разработке качества программного обеспечения . Аддисон-Уэсли, Бостон, Массачусетс, второе издание, 2002 г.
Стефан Вагнер. Контроль качества программной продукции. Спрингер, 2013.
Рекомендации
Примечания
^ «Изучение истории: случай разработки требований к программному обеспечению - журнал разработки требований» . Уроки истории: пример разработки требований к программному обеспечению — журнал «Разработка требований» . Проверено 25 февраля 2021 г.
^ Прессман, Роджер С. (2005). Программная инженерия: подход практикующего специалиста (Шестое международное изд.). Макгроу-Хилл Образование. п. 388. ИСБН0071267824.
^ «О спецификации автоматизированных показателей качества исходного кода версии 1.0» . www.omg.org . Проверено 25 февраля 2021 г.
^ «Как провести сквозное тестирование» . smartbear.com . Проверено 25 февраля 2021 г.
^ «Как предоставить отказоустойчивые, безопасные, эффективные и легко изменяемые ИТ-системы в соответствии с рекомендациями CISQ» (PDF) . Архивировано (PDF) из оригинала 28 декабря 2013 г. Проверено 18 октября 2013 г.
^ «ISO/IEC 25010:2011». ИСО . Проверено 23 февраля 2021 г.
^ Армор, Филипп Г. (1 июня 2012 г.). «Мера контроля». Коммуникации АКМ . 55 (6): 26–28. дои : 10.1145/2184319.2184329. ISSN 0001-0782. S2CID 6059054.
^ Воас, Дж. (ноябрь 2011 г.). «Секрет программного обеспечения: «-ilities» [качество программного обеспечения]». Программное обеспечение IEEE . 21 (6): 14–15. дои : 10.1109/MS.2004.54. ISSN 1937-4194.
^ «Стандарты качества кода | CISQ - Консорциум по качеству информации и программного обеспечения» . www.it-cisq.org . Проверено 25 февраля 2021 г.
^ «Стандарты определения размера программного обеспечения | CISQ - Консорциум по качеству информации и программного обеспечения» . www.it-cisq.org . Проверено 25 февраля 2021 г.
^ Дж. Бонет, Дж. Дёлльнер. Архивировано 27 апреля 2014 г. на Wayback Machine , «Мониторинг качества кода и активности разработки с помощью карт программного обеспечения». Материалы семинара IEEE ACM ICSE по управлению техническим долгом, стр. 9–16, 2011 г.
^ «IIA - Руководство по глобальному технологическому аудиту: Управление изменениями в ИТ: решающее значение для успеха организации» . na.theiia.org . Проверено 26 февраля 2021 г.
^ Бурсье, Жером (11 января 2018 г.). «Последствия Meltdown и Spectre: проблемы с исправлениями сохраняются». Лаборатория Малваребайтс . Проверено 26 февраля 2021 г.
^ «Рекомендации по обновлению программного обеспечения — Configuration Manager» . docs.microsoft.com . Проверено 26 февраля 2021 г.
^ Райт, Хайрам К. (25 августа 2009 г.). «Релиз процессов, моделей и показателей разработки релизов». Материалы докторского симпозиума ESEC/FSE на Докторантурном симпозиуме . Докторский симпозиум ESEC/FSE '09. Амстердам, Нидерланды: Ассоциация вычислительной техники. стр. 27–28. дои : 10.1145/1595782.1595793. ISBN978-1-60558-731-8. S2CID 10483918.
^ ван дер Хук, Андре; Холл, Ричард С.; Хаймбигнер, Деннис; Вольф, Александр Л. (ноябрь 1997 г.). «Управление выпуском программного обеспечения». Заметки по разработке программного обеспечения ACM SIGSOFT . 22 (6): 159–175. дои : 10.1145/267896.267909 . ISSN 0163-5948.
^ Саттон, Майк; Мур, Тим (30 июля 2008 г.). «7 способов улучшить управление выпусками программного обеспечения». ИТ-директор . Проверено 26 февраля 2021 г.
^ Кларк, Митчелл (24 февраля 2021 г.). «iRobot говорит, что пройдет несколько недель, прежде чем он сможет устранить проблему с последним обновлением программного обеспечения Roomba». Грань . Проверено 25 февраля 2021 г.
^ «25 главных ошибок программного обеспечения» . www.sans.org . Проверено 25 февраля 2021 г.
^ «Выключайте и снова включайте его каждые 149 часов» — тревожное средство от ошибки в программном обеспечении самолета Airbus стоимостью 300 миллионов долларов» . Гизмодо . 30 июля 2019 года . Проверено 25 февраля 2021 г.
^ «MISRA C, Toyota и смерть Task X» . Проверено 25 февраля 2021 г.
^ «Обновленная информация о Toyota и непреднамеренном ускорении «Код Барра» . www.embeddedgurus.com . Проверено 25 февраля 2021 г.
^ Медицинские устройства: Therac-25 *. Архивировано 16 февраля 2008 г. в Wayback Machine , Нэнси Левесон, Вашингтонский университет.
^ Встроенное программное обеспечение. Архивировано 5 июля 2010 г. в Wayback Machine , Эдвард А. Ли, появится в журнале «Достижения в области компьютеров» ( Марвин Виктор Зелковиц , редактор), Vol. 56, Academic Press, Лондон, 2002 г., в редакции меморандума UCB ERL M01/26 Калифорнийский университет, Беркли, Калифорния 94720, США, 1 ноября 2001 г.
^ «Программное обеспечение для сертификации самолетов и бортовое электронное оборудование» . Архивировано из оригинала 4 октября 2014 года . Проверено 28 сентября 2014 г.
^ «Цена плохого качества программного обеспечения в США: отчет за 2020 год | CISQ - Консорциум по качеству информации и программного обеспечения» . www.it-cisq.org . Проверено 25 февраля 2021 г.
^ «Что такое отходы? | Agile Alliance» . Гибкий Альянс | . 20 апреля 2016 г. Проверено 25 февраля 2021 г.
Рианна Мэттесон, Скотт (26 января 2018 г.). «Отчет: сбой программного обеспечения привел к финансовым потерям в размере 1,7 триллиона долларов в 2017 году». Техреспублика . Проверено 25 февраля 2021 г.
^ Кохейн, Райан (16 ноября 2017 г.). «Финансовые затраты на ошибки программного обеспечения». Середина . Проверено 25 февраля 2021 г.
^ Элофф, Ян; Белла, Мадлен Бихина (2018), «Сбои программного обеспечения: обзор», Исследование сбоев программного обеспечения , Cham: Springer International Publishing, стр. 7–24, doi : 10.1007/978-3-319-61334-5_2, ISBN978-3-319-61333-8, получено 25 февраля 2021 г.
^ «Низкое качество программного обеспечения обошлось предприятиям в 2 триллиона долларов в прошлом году и поставило под угрозу безопасность» . Погружение ИТ-директора . Проверено 26 февраля 2021 г.
^ «Исследование CISQ, спонсируемое Synopsys, оценивает стоимость низкого качества программного обеспечения в 2,08 триллиона долларов США в 2020 году» . финансы.yahoo.com . Проверено 26 февраля 2021 г.
^ «Сколько будет стоить утечка данных в 2020 году?» Цифровой страж . 06.08.2020 . Проверено 8 марта 2021 г.
^ «Стоимость отчета об утечке данных 2020 | IBM» . www.ibm.com . 2020 . Проверено 8 марта 2021 г.
^ «ISO - семейство ISO 9000. Менеджмент качества» . ИСО . Проверено 24 февраля 2021 г.
^ «ISO/IEC/IEEE 24765:2017». ИСО . Проверено 24 февраля 2021 г.
^ ab «Освоение автомобильного программного обеспечения». www.mckinsey.com . Проверено 25 февраля 2021 г.
^ «ISO/IEC 25010:2011». ИСО . Проверено 24 февраля 2021 г.
^ Уоллес, ДР (2002). «Практическое моделирование надежности программного обеспечения». Материалы 26-го ежегодного семинара НАСА по разработке программного обеспечения имени Годдарда . Гринбелт, Мэриленд, США: IEEE Comput. Соц. стр. 147–155. дои :10.1109/SEW.2001.992668. ISBN978-0-7695-1456-7. S2CID 57382117.
^ «ISO/IEC 25023:2016». ИСО . Проверено 6 ноября 2023 г.
^ «Что такое качество программного обеспечения? | ASQ» . asq.org . Проверено 24 февраля 2021 г.
^ «SAMATE - Главная страница проекта показателей Software Assurance и оценки инструментов» . НИСТ . 3 февраля 2021 г. Проверено 26 февраля 2021 г.
^ Программное расширение для руководства PMBOK. Институт управления проектами (5-е изд.). Ньютаун-сквер, Пенсильвания. 2013. ISBN978-1-62825-041-1. ОКЛК 959513383.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка ) CS1 maint: другие ( ссылка )
^ Шуарт, Уолтер А. (2015). Экономический контроль качества выпускаемой продукции. [Место публикации не указано]: Martino Fine Books. ISBN978-1-61427-811-5. ОСЛК 1108913766.
^ Китченхэм, Б .; Пфлегер, С.Л. (январь 1996 г.). «Качество программного обеспечения: неуловимая цель [раздел специальных вопросов]». Программное обеспечение IEEE . 13 (1): 12–21. дои : 10.1109/52.476281. ISSN 1937-4194.
^ Гарвин, Дэвид А. (1988). Управление качеством: стратегическое и конкурентное преимущество. Нью-Йорк: Свободная пресса. ISBN0-02-911380-6. ОСЛК 16005388.
^ аб Б. Китченхем и С. Пфлигер, «Качество программного обеспечения: неуловимая цель», IEEE Software, vol. 13, нет. 1, стр. 12–21, 1996.
^ Кан, Стивен Х. (2003). Метрики и модели в разработке качества программного обеспечения (2-е изд.). Бостон: Аддисон-Уэсли. ISBN0-201-72915-6. ОСЛК 50149641.
^ Международная организация по стандартизации, «ISO/IEC 9001: Системы менеджмента качества. Требования», 1999.
^ У. Э. Деминг, «Выход из кризиса: качество, производительность и конкурентоспособность». Издательство Кембриджского университета, 1988.
^ А. В. Фейгенбаум, «Тотальный контроль качества», McGraw-Hill, 1983.
^ Дж. М. Джуран, «Справочник по контролю качества Джурана», McGraw-Hill, 1988.
^ Вайнберг, Джеральд М. (1991). Управление качеством программного обеспечения: Том 1, Системное мышление. Нью-Йорк, штат Нью-Йорк: Дорсет Хаус. ISBN0-932633-22-6. ОСЛК 23870230.
^ Вайнберг, Джеральд М. (1993). Управление качеством программного обеспечения: Том 2, Измерение первого порядка. Нью-Йорк, штат Нью-Йорк: Дорсет Хаус. ISBN0-932633-22-6. ОСЛК 23870230.
^ Кросби, П., Качество бесплатно , McGraw-Hill, 1979.
^ «SUP.9 - Управление решением проблем - Kugler Maag Cie» . www.kuglermaag.com . Проверено 25 февраля 2021 г.
^ Аб Хоипт (29 ноября 2019 г.). «Организации часто используют термины «гарантия качества» (QA) и «контроль качества» (QC)…». Середина . Проверено 25 февраля 2021 г.
^ Уоллес, Д.; Уотсон, АХ; Маккейб, Ти Джей (1 августа 1996 г.). «Структурированное тестирование: методология тестирования с использованием метрики цикломатической сложности». НИСТ .
^ Беллерс, Ричард. «Что такое качество кода? И как улучшить качество кода». Программное обеспечение Perforce . Проверено 28 февраля 2021 г.
^ «Информационный документ OMG | CISQ - Консорциум по качеству информации и программного обеспечения» . www.it-cisq.org . Проверено 26 февраля 2021 г.
^ «Как предоставить отказоустойчивые, безопасные, эффективные и гибкие ИТ-системы в соответствии с рекомендациями CISQ - Технический документ | Группа управления объектами» (PDF) . Архивировано (PDF) из оригинала 28 декабря 2013 г. Проверено 18 октября 2013 г.
^ «Измерение размера программного обеспечения: основа подсчета исходных заявлений» . resources.sei.cmu.edu . 31 августа 1992 года . Проверено 24 февраля 2021 г.
^ Холстед, Морис Х. (1977). Элементы программного обеспечения (серия «Операционные и программные системы»). США: ISBN Elsevier Science Inc.978-0-444-00205-1.
^ Чидамбер, СР; Кемерер, CF (июнь 1994 г.). «Набор метрик для объектно-ориентированного проектирования». Транзакции IEEE по разработке программного обеспечения . 20 (6): 476–493. дои : 10.1109/32.295895. hdl : 1721.1/48424 . ISSN 1939-3520. S2CID 9493847.
^ Найгард, Майкл (2007). Выпустите это!. Сафари компании O'Reilly Media (1-е изд.). ISBN978-0978739218. ОКЛК 1102387436.
^ «CWE - Перечень общих слабостей» . cwe.mitre.org . Архивировано из оригинала 10 мая 2016 г. Проверено 20 мая 2016 г.
^ Бем, Б., Браун, младший, Каспар, Х., Липоу, М., МакЛауд, Г.Дж., и Мерритт, М.Дж. (1978). Характеристики качества программного обеспечения. Северная Голландия.
^ abc «Стандарты кодирования SEI CERT — Безопасное кодирование CERT — Confluence» . wiki.sei.cmu.edu . Проверено 24 февраля 2021 г.
^ «Качество кода и безопасность кода: как они связаны? | Synopsys». Блог о целостности программного обеспечения . 24 мая 2019 г. Проверено 9 марта 2021 г.
^ «Стоимость отчета об утечке данных 2020 | IBM» . www.ibm.com . 2020 . Проверено 9 марта 2021 г.
^ «Основные выводы из отчета о стоимости утечки данных в 2020 году» . Голубой плавник . 27 августа 2020 г. Проверено 9 марта 2021 г.
^ «CWE - Перечень общих слабостей» . Cwe.mitre.org. Архивировано из оригинала 14 октября 2013 г. Проверено 18 октября 2013 г.
^ Безопасность в разработке: IBM Secure Engineering Framework | Красные книги IBM. 30 сентября 2016 г.
^ Архитектура безопасности предприятия с использованием решений безопасности IBM Tivoli | Красные книги IBM. 30 сентября 2016 г.
^ «Определения проектирования безопасной архитектуры | CISA» . us-cert.cisa.gov . Проверено 9 марта 2021 г.
^ «Фонд OWASP | Фонд открытого исходного кода для безопасности приложений» . owasp.org . Проверено 24 февраля 2021 г.
^ "Топ-25 CWE" . Санс.орг . Проверено 18 октября 2013 г.
^ IfSQ Level-2 Стандарт базового уровня для исходного кода компьютерных программ. Архивировано 27 октября 2011 г. в Wayback Machine , второе издание, август 2008 г., Грэм Болтон, Стюарт Джонстон, IfSQ, Институт качества программного обеспечения.
↑ Фаулер, Мартин (14 октября 2009 г.). «Технический долговой квадрант». Архивировано из оригинала 2 февраля 2013 года . Проверено 4 февраля 2013 г.
^ «Качество кода: забота о бизнесе, прибыли и чутких программистах» . Переполнение стека . 18 октября 2021 г. Проверено 5 декабря 2023 г.
^ Прауз, Кристиан; Дурдик, Зоя (3 июня 2012 г.). «Архитектурное проектирование и документация: потери в гибкой разработке?». Международная конференция по программному обеспечению и системным процессам (ICSSP), 2012 г. Компьютерное общество IEEE. стр. 130–134. doi : 10.1109/ICSSP.2012.6225956. ISBN978-1-4673-2352-9. S2CID 15216552.
^ «Стандарты определения размера программного обеспечения | CISQ - Консорциум по качеству информации и программного обеспечения» . www.it-cisq.org . Проверено 28 января 2021 г.
^ «Почему программное обеспечение терпит неудачу» . IEEE Spectrum: Новости технологий, техники и науки . 2 сентября 2005 г. Проверено 20 марта 2021 г.
^ Вагнер, Стефан; Геб, Андреас; Хайнеманн, Ларс; Клас, Майкл; Лампасона, Констанца; Лохманн, Клаус; Майр, Алоис; Плёш, Райнхольд; Зайдль, Андреас (2015). «Реализованные модели и оценка качества продукции: подход Quamoco» (PDF) . Информационные и программные технологии . 62 : 101–123. arXiv : 1611.09230 . doi :10.1016/j.infsof.2015.02.009. S2CID 10992384.
^ Сурьянараяна, Гириш (2015). «Программный процесс против качества дизайна: перетягивание каната?». Программное обеспечение IEEE . 32 (4): 7–11. дои : 10.1109/MS.2015.87 . S2CID 9226051.
^ «Профессионал по качеству программного обеспечения | ASQ» . asq.org . Проверено 28 января 2021 г.
^ "Журнал качества программного обеспечения" . Спрингер . Проверено 28 января 2021 г.
Библиография
Альбрехт, AJ (1979), Измерение производительности разработки приложений. В материалах совместного симпозиума по разработке приложений SHARE/GUIDE IBM. , IBM
Бен-Менахем, М.; Марлисс, Г.С. (1997), Качество программного обеспечения, создание практичного и согласованного программного обеспечения , Thomson Computer Press
Бём, Б.; Браун, младший; Каспар, Х.; Липов, М.; Маклауд, Дж.Дж.; Мерритт, MJ (1978), Характеристики качества программного обеспечения , Северная Голландия.
Чидамбер, С.; Кемерер, К. (1994), Набор метрик для объектно-ориентированного проектирования. Транзакции IEEE по разработке программного обеспечения, 20 (6) , стр. 476–493.
Эберт, Кристоф; Думке, Райнер, Измерение программного обеспечения: создание – извлечение – оценка – выполнение , Kindle Edition, стр. 91
Гармус, Д.; Херрон, Д. (2001), Анализ функциональных точек , Аддисон Уэсли
Холстед, Мэн (1977), Элементы науки о программном обеспечении , Elsevier, Северная Голландия.
Хэмилл, М.; Госева-Попстоянова, К. (2009), Распространенные ошибки в данных о сбоях и отказах программного обеспечения. IEEE Transactions of Software Engineering, 35 (4) , стр. 484–496.
Джексон, DJ (2009), Прямой путь к надежному программному обеспечению. Сообщения АКМ, 52 (4).
Мартин, Р. (2001), Управление уязвимостями в сетевых системах , IEEE Computer.
Маккейб, Т. (декабрь 1976 г.), Мера сложности. Транзакции IEEE по разработке программного обеспечения
МакКоннелл, Стив (1993), Code Complete (первое издание), Microsoft Press
Найгард, Монтана (2007), Выпустите это! Разработка и внедрение готового программного обеспечения , Программисты-прагматики.
Парк, Р.Э. (1992), Измерение размера программного обеспечения: основа для подсчета исходных заявлений. (CMU/SEI-92-TR-020). , Институт программной инженерии, Университет Карнеги-Меллона
Прессман, Роджер С. (2005). Программная инженерия: подход практикующего специалиста (Шестое международное изд.). Макгроу-Хилл Образование. ISBN 0071267824.
Спинеллис, Д. (2006), Качество кода , Эддисон Уэсли
Внешние ссылки
На Wikimedia Commons есть средства массовой информации, связанные с качеством программного обеспечения .
Когда код правит: совершенствуем программное обеспечение для автомобилей (McKinsey, 2021 г.)
Качество программного обеспечения для встраиваемых систем: почему оно так часто бывает ужасным? Что мы можем с этим поделать? (Филип Купман)
Стандарты качества кода от CISQ ™
Блог CISQ: https://blog.it-cisq.org
Руководство по обеспечению качества программного обеспечения (ESA)
Руководство по применению стандартов разработки программного обеспечения ESA к небольшим программным проектам (ESA)
Обзор услуг ESA по обеспечению качества программного обеспечения (NASA/ESA)
Наш подход к качеству в Volkswagen Software Dev Center в Лиссабоне
Руководства по стилю Google
Обеспечение качества продукции в Google (2011 г.)
Программное обеспечение НАСА
Группа качества программного обеспечения NIST
Автоматизированные функциональные точки OMG/CISQ (ISO/IEC 19515)
Автоматизированный стандарт технического долга OMG
Автоматизированное обеспечение качества (статья Гарри Снида в IREB )
Структурированное тестирование: методология тестирования с использованием метрики цикломатической сложности (1996)
Анализ качества приложения с помощью инструментов анализа кода (Microsoft, документация, Visual Studio, 2016)