OberonCore
https://forum.oberoncore.ru/

Метрики кода для оценки ПО
https://forum.oberoncore.ru/viewtopic.php?f=86&t=3714
Страница 1 из 2

Автор:  Роман М. [ Суббота, 10 Декабрь, 2011 20:52 ]
Заголовок сообщения:  Метрики кода для оценки ПО

Википедия писал(а):
Как сказал Том ДеМарко, «вы не можете контролировать то, что не можете измерить».


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

Существуют различные метрики для оценки кода ПО. Некоторые их них это:
  1. Цикломатическая сложность [2]
  2. Сплоченность (cohesion)
  3. Связность (coupling)
  4. Глубина наследования (Depth of Inheritance)
  5. Число строк кода (Lines of Code)
Наиболее интересной метрикой для меня оказалась "цикломатическая сложность". Она позволит определить качество кода как лабораторной работы студента, так и промышленного ПО.
Насчёт числа строк кода есть некоторые сомнения. Уж слишком неоднозначный результат даёт.

Учитываете ли вы эти метрики при разработке ПО?

Источники:
[1] Метрики кода
[2] ссылка в Википедии на статью "Цикломатическая сложность"

Автор:  Валерий Лаптев [ Суббота, 10 Декабрь, 2011 21:36 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

В книжке "Идеальная разработка ПО" есть глава 8, которая называется так: Кроме количества строк нужны ли дополнительные метрики сложности? Авторы делают вывод, что не очень-то они и нужны, поскольку метрика строк довольно хорошо коррелирует с остальными метриками.

Автор:  Александр Шостак [ Суббота, 10 Декабрь, 2011 22:14 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

Тоже не соглашусь. Очень зависит от стиля. Если ASSERT-ы проверяют каждый параметр - сложность возросла на 25%. С чего бы? Если принудительно зануляются переменные - тоже растёт. И т.д. А иной короткий код вообще не понять, ибо оптимизация в ущерб читаемости и поддержке. Сложное выражение можно разбить на части, а можно в строку записать.

Есть в электронном виде в сети "Идеальный код"?

Автор:  Валерий Лаптев [ Воскресенье, 11 Декабрь, 2011 09:08 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

Еще нужно сказать, что метрик разработано - вагон и маленькая тележка. А самое важное - интерпретация полученных значений. И тут, окромя экспертных оценок, реально ничего нет. Мой аспирант занимался этой проблемой, поскольку был одновременно начальником отдела АСУ и перед ним в полный рост стояла задача оценки качества кода и как следствие квалификация работы программиста.
Квалификацию можно оценить, если уметь оценивать качество ПО. Тогда оценка качества двух версий покажет характер текущих изменений: в лучшую или в худшую сторону.
А качество он придумал оцифровать с помощью нечетких нейронных сетей Ванга-Менделя.
Но метод - как результат Хачияна о задаче линейного программирования. Теоретически все зашибись, а практически - фиг знает, как это будет работать. Потому как для обучения нейронной сети тоже требуется оценка эксперта.

Автор:  Info21 [ Воскресенье, 11 Декабрь, 2011 10:12 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

Интересно оценивать evolvability.
Тут всё начинается с читабельности/понимабельности.
Насколько быстро читатель может понять, что там происходит -- и что-то исправить.
Берем десять программеров, и засекаем десять секундомеров. Типа :)

Автор:  Валерий Лаптев [ Воскресенье, 11 Декабрь, 2011 13:55 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

Info21 писал(а):
Интересно оценивать evolvability.
Тут всё начинается с читабельности/понимабельности.
Насколько быстро читатель может понять, что там происходит -- и что-то исправить.
Берем десять программеров, и засекаем десять секундомеров. Типа :)

Ну, о субъективности подобного подхода писал еще Вейнберг. И Шнейдерман - тоже.
"rgthbvtyns были примерно такие. Берут несколько примерно равных по квалификации программеров и задают задачу написать программу. Но подцели - разные. Одни должны писать максимально быструю, другие - минимальную по объему. Третьим - максимально читабельную, четвертым - какую-нибудь... :)
Результаты отличались офигительно!

Автор:  Евгений Темиргалеев [ Воскресенье, 11 Декабрь, 2011 15:42 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

Валерий Лаптев писал(а):
Info21 писал(а):
Интересно оценивать evolvability.
Тут всё начинается с читабельности/понимабельности.
Насколько быстро читатель может понять, что там происходит -- и что-то исправить.
Берем десять программеров, и засекаем десять секундомеров. Типа :)

Ну, о субъективности подобного подхода писал еще Вейнберг. И Шнейдерман - тоже.
"rgthbvtyns были примерно такие. Берут несколько примерно равных по квалификации программеров и задают задачу написать программу.
По-моему, Вы перепутали "чтение" с "написанием".

Автор:  Евгений Темиргалеев [ Воскресенье, 11 Декабрь, 2011 15:47 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

Валерий Лаптев писал(а):
Мой аспирант занимался этой проблемой, поскольку был одновременно начальником отдела АСУ и перед ним в полный рост стояла задача оценки качества кода и как следствие квалификация работы программиста.
...А качество он придумал оцифровать с помощью нечетких нейронных сетей Ванга-Менделя.
Метрика менделя-шменделя для оценки качества... Хренота эта всё.

Программист должен помимо кода выдавать его "чертёж" --- собственноручно написанную документацию с предусловиями/постусловиями и набор отработанных им тестов на каждую процедуру. Вот тогда и будет качество.

Автор:  Иван Кузьмицкий [ Воскресенье, 11 Декабрь, 2011 15:50 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

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

Автор:  Валерий Лаптев [ Воскресенье, 11 Декабрь, 2011 16:42 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

Иван Кузьмицкий писал(а):
Евгений Темиргалеев писал(а):
Программист должен помимо кода выдавать его "чертёж" --- собственноручно написанную документацию с предусловиями/постусловиями и набор отработанных им тестов на каждую процедуру. Вот тогда и будет качество.
Разрешите подписаться. Только когда "чертёж" есть, можно начинать о чём-то говорить.

Фокус заключается в том, что наша работа позволяет оценивать уже проект, на стадии проектирования. А потом при кодировании - уточнять. Естественно, подход не является "серебряной пулей", а нацелен был исключительно на работу нашего отдела АСУ. То есть разработка ОО-систем в Студии на шарпе.
И метриками обкладывали уже с начала проектирования. Естественно, сначала строилась модель, на которой считались метрики. Эта модель проходит "красной нитью" через всю методу.
Так что не все так однозначно неприемлемо.

Автор:  Евгений Темиргалеев [ Воскресенье, 11 Декабрь, 2011 19:24 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

Валерий Лаптев писал(а):
И метриками обкладывали уже с начала проектирования. Естественно, сначала строилась модель, на которой считались метрики. Эта модель проходит "красной нитью" через всю методу.
Так что не все так однозначно неприемлемо.
Не спорю, что это дело может быть работоспособно и приемлемо. Мне не нравится сама постановка задачи.

Если я Вас правильно понял, у вас разработан "шаманский" метод (позволю это слово, т.к. речь шла об экспертных оценках данных), обслуживающий результаты обычного процесса производства кода программистом.

По-моему, нужно разрабатывать методы и требования, нацеленные на сам процесс производства и выдаваемые результаты. Чтобы процесс стал систематическим, а результаты формально контролируемыми по нормативам. Без необходимости привлекать особо тренированных экспертов.

Автор:  igor [ Воскресенье, 11 Декабрь, 2011 19:32 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

Роман М. писал(а):
Существуют различные метрики для оценки кода ПО. Некоторые их них это:
  1. Цикломатическая сложность [2]
  2. Сплоченность (cohesion)
  3. Связность (coupling)
  4. Глубина наследования (Depth of Inheritance)
  5. Число строк кода (Lines of Code)

Учитываете ли вы эти метрики при разработке ПО?
Нет. И не планирую.
Чем-то мне это напоминает внедрение СМК на предприятии.
(СМК - система менеджмента качества)

Автор:  Евгений Темиргалеев [ Воскресенье, 11 Декабрь, 2011 19:36 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

igor писал(а):
Чем-то мне это напоминает внедрение СМК на предприятии.
Метрики кода <-> система менеджмента качества... Интересная аналогия: оценка качества производства в отрыве (не зависимо) от самого процесса производства?

Автор:  igor [ Воскресенье, 11 Декабрь, 2011 19:47 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

Евгений Темиргалеев писал(а):
Метрики кода <-> система менеджмента качества... Интересная аналогия: оценка качества производства в отрыве (не зависимо) от самого процесса производства?
Типа того. И в том, и в другом случае полезность под большим вопросом (по крайней мере, для меня).

Автор:  Info21 [ Воскресенье, 11 Декабрь, 2011 21:27 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

igor писал(а):
Евгений Темиргалеев писал(а):
Метрики кода <-> система менеджмента качества... Интересная аналогия: оценка качества производства в отрыве (не зависимо) от самого процесса производства?
Типа того. И в том, и в другом случае полезность под большим вопросом (по крайней мере, для меня).
В зиллионный раз повторю:

вот поэтому и вожусь с Информатикой-21 :)

Автор:  Валерий Лаптев [ Воскресенье, 11 Декабрь, 2011 23:09 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

Евгений Темиргалеев писал(а):
Валерий Лаптев писал(а):
И метриками обкладывали уже с начала проектирования. Естественно, сначала строилась модель, на которой считались метрики. Эта модель проходит "красной нитью" через всю методу.
Так что не все так однозначно неприемлемо.
Не спорю, что это дело может быть работоспособно и приемлемо. Мне не нравится сама постановка задачи.

Если я Вас правильно понял, у вас разработан "шаманский" метод (позволю это слово, т.к. речь шла об экспертных оценках данных), обслуживающий результаты обычного процесса производства кода программистом.

По-моему, нужно разрабатывать методы и требования, нацеленные на сам процесс производства и выдаваемые результаты. Чтобы процесс стал систематическим, а результаты формально контролируемыми по нормативам. Без необходимости привлекать особо тренированных экспертов.

Я согласен с вашей точкой зрения.
Но здесь есть предмет для научной работы: почему один текст (проект) СЧИТАЕТСЯ (кем?) более качественным (с самых разннообразных точек зрения), чем другой? Как это можно оцифровать?

Автор:  alexus [ Понедельник, 12 Декабрь, 2011 05:55 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

Возможно проблемы с формулировкой качества программного обеспечения (ПО) связаны с тем, что не определён предмет. Что понимается под качеством ПО?.. Что такое ПО?.. Казалось бы всё просто - вот программа, и надо сделать заключение о её качестве... Но программа - это результат труда многих и многих людей (включая тех, кто об этой программе даже не слышал!).
Можно попробовать выстроить аналогии с промышленным производством. Например, есть двигатель... что можно сказать о его качестве?.. Первое. Двигатель считается качественным, если его реальные характеристики соответствуют тем, что заявлены (ТТХ - тактико-технические характеристики). Если говорить о ПО, то ПО считается качественным, если функционально соответствует ТЗ (техническому заданию). Однако, ТТХ и ТЗ не "берутся с потолка" - это результат анализа и моделирования определённой предметной области.
Второе. Двигатель считается качественным, если соблюдена технология его изготовления. В общем случае, отмечают четыре категории: 1. качественное сырьё и комплектующие; 2. качественная (квалифицированная) рабочая сила; 3. качественное (настроенное) оборудование и инструмент; 4. формальные технологические регламенты (указания/предписания) на каждую операцию и процесс в целом. Во всех четырёх случаях речь идёт об определении качества, как соответствие некоторым формальным входным параметрам/показателям. Помимо этого должен быть/возможен контроль качества в процессе выполнения каждой операции и/или выходной контроль качества продукции/полуфабриката. Как это коррелирует с разработкой ПО?.. Какие комплектующие используются при создании программ/систем?.. Какими показателями определяется качество элементов ПО?.. Очевидно, что при построении ПО используются сторонние или собственные компоненты, модули, библиотеки, классы и т.п. Требования к ним, как правило, формулируются на основе заявленных интерфейсов, а также общих требований к любому ПО - производительность, размер памяти, требуемой для работы, сторонние ОС и библиотеки, отсутствие ошибок и пр. В качестве инструментов при разработке используются языковые среды, СУБД, средства проектирования... на компьютере, который, наряду с ОС и сторонним ПО, образует инструментальную среду. Наконец, требования к рабочей (интеллектуальной) силе, мало чем отличается (по сути) от требований к рабочей (физической) силе... всё те же умения и навыки, знания и опыт.
Третье. Качество (промышленной) продукции должно включать (и часто уже включает!) и "послепродажное" обслуживание, под которым понимается организация необходимого сервиса, включая отзыв и замену неисправной продукции. Здесь аналогии с ПО прозрачны и не требуют комментариев.
Почему же качество ПО вызывает столько дискуссий?.. Ответ, по моему мнению, состоит в том, что при разработке ПО нет устойчивого представления ни о продукте/результате, ни (тем более!) о стадиях и процессах его получения. Всё основано на каких-то общих идеях, соображениях... которые дорабатываются/формализуются в процессе... Но как не бывает качества "вообще чего-то там", так не бывает и качественного "вообще что-то такое".
И если пройти по этапам создания ПО (как и того же двигателя), то вполне просто можно сформулировать понятие качества для каждого этапа и... следовательно, продукта (ПО) в целом. Но... нудно это... не творческое это дело... создавать стандарты и следовать им... Не в этом ли проблема?.. И как следствие при разработке ПО, все процессы перемешаны, свалены в кучу... Разработчик, создавая простую форму визуализации информации... размышляет над алгоритмами... мучается вопросами совершенствования языка... или написанием супер-библиотеки/компонентов... или вопросами оценки качества своей работы... :)

Автор:  Валерий Лаптев [ Понедельник, 12 Декабрь, 2011 08:28 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

1. Надо различать внешнее и внутренне качество. Внешнее качество - это как раз те свойства, которые легко наблюдаются и в некоторых случаях легко измеряются. А вот внутреннее качество - именно качество самой проги, тут много вопросов.
Вот абзац из одного моего текста:
Цитата:
Показатели качества программного продукта можно разделить на две категории: внутренние и внешние . Внешние факторы качества (корректность, надежность, эффективность, удобство использования) могут быть определены, исходя из поведения программного продукта, и являются видимыми пользователю. В отличие от них внутренние показатели качества (переносимость, понятность, модифицируемость, сопровождаемость) для пользователя не видны и не важны. Однако эти показатели чрезвычайно важны для разработчиков, поскольку в конечном итоге именно они определяют экономические затраты на разработку требуемого программного продукта. Внутренние показатели более важны для проекта, чем внешние, поскольку внешние характеристики практически всегда от них зависят.

2. А вот о показателях качества - из того же текста:
Цитата:
Среди специалистов отсутствует единое мнение о номенклатуре показателей качества (несмотря на то, что существуют и международные, и российские стандарты ). Роберт Гласс рассматривает качество ПО как совокупность семи свойств: надежности, переносимости, эффективности, удобства эксплуатации, понятности, тестируемости и модифицируемости. Карло Гецци с соавторами различают качество продукта и процесса. К качествам продукта они относят следующие: корректность, надежность и устойчивость, производительность, удобство, повторная применимость, верифицируемость, сопровождаемость, понятность, переносимость. Иан Грэхем , основываясь на исследованиях других авторов, приводит более обширный список критериев качества: корректность, устойчивость и надежность, возможность сопровождения и расширения, способность к взаимодействию, эффективность, возможность повторного использования и универсальность, переносимость, ясность, возможность верификации, безопасность, целостность, дружественность, возможности описания. Кроме того, он тоже разделяет качество продукта и качество процесса.
В стандартах устанавливается более короткий перечень показателей. ГОСТ 28195-89 содержит следующий список комплексных показателей качества программного продукта: надежность, корректность, удобство применения, сопровождаемость, эффективность и универсальность. В международном стандарте ISO 9126 прописаны следующие показатели: эффективность, надежность, сопровождаемость, функциональность, практичность и мобильность. Комплексные показатели называют также факторами качества или характеристиками качества.
Каждому из комплексных показателей соответствует определенный набор критериев качества. В свою очередь, каждый из критериев определяется своими метриками, которые составляются из оценочных элементов, определяющих заданное в метрике свойство. На разных этапах ЖЦ для разных классов программных продуктов применяются разные критерии качества.

Ссылки на литературу в данном кусочке:
Крылов Е.В. Техника разработки программ: в 2 кн. Кн. 2. Технология, надежность и качество программного обеспечения: Учебник / Е.В. Крылов, В.А. Острейковский, Н.Г. Типикин. – М.: Высшая школа, 2008. – 469 c.
Гецци К., Джазайери М., Мандриоли Д. Основы инженерии программного обеспечения. 2-е изд.: Пер. с англ. — СПб.: БХВ-Петербург, 2005. – 832 с.
Грэхем И. Объектно-ориентированные методы. Принципы и практика. 3-е издание.: Пер.с англ. — М.: Издательский дом «Вильямс», 2004. – 880 с.
ГОСТ 28195-89. Оценка качества программных средств. Общие положения. — М.: Издательство стандартов, 1989.
Мейер Б. Объектно-ориентированное конструирование программных систем / Пер. с англ. – М.: Издательско-торговый дом «Русская редакция», 2005. – 1232 с.

Автор:  Владислав Жаринов [ Понедельник, 12 Декабрь, 2011 09:00 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

В опчем, alexus где-то о том же, что и здесь - есть "железячное" качество ("какой значительный шаг в освоении производства продуктов мы сделали своим новым продуктом!" :wink:)... и есть "человеческое" ("какой значительный шаг в достижении моих целей позволяет сделать этот новый продукт"). См. на этой странице.

Автор:  alexus [ Понедельник, 12 Декабрь, 2011 09:06 ]
Заголовок сообщения:  Re: Метрики кода для оценки ПО

Валерий Лаптев писал(а):
1. Надо различать внешнее и внутренне качество. Внешнее качество - это как раз те свойства, которые легко наблюдаются и в некоторых случаях легко измеряются. А вот внутреннее качество - именно качество самой проги, тут много вопросов.
Хорошо, давайте пройдём по шагам...
Есть пять стадий жизненного "цикла" (независимо от того, о чём идёт речь... ПО или двигатель... или табуретка).
1. Анализ и моделирование;
2. Проектирование;
3. Планирование;
4. Реализация;
5. Эксплуатация.
Каждая стадия и жизненный цикл, в целом, характеризуются:
I. Входами;
II. Выходами;
III. Процессами;
То, что Вы называете "внешним качеством" - это вход стадии анализа и моделирования, то, что можно оценить, сравнив с эталоном или другим аналогичным изделием/ПО, на стадии (опытной) эксплуатации (выход).
То, что Вы называете "внутренним качеством" - это соотнесение выходов ко входам на остальных стадиях.
Принципиальная разница в наших подходах состоит в том, что я не сваливаю все "качества" в одну кучу, а распределяю их по стадиям, что позволяет формализовать показатели и методику их измерения/оценки, за счёт выполнения проекции показателей на процессы данной стадии ("не с потолка" же берутся эти показатели...).

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/