Одна из вещей, о которой я много думал, - это то, как мы можем использовать какие-либо метрики для измерения изменений, будем ли мы идти назад или не? Это в контексте большой устаревшей базы кода, которую мы улучшаем. Большая часть кода написана на C ++ с наследием C. Некоторые новые функции и графический интерфейс написаны на C #.
Для начала мы могли бы по крайней мере проверить, меняется ли со временем простой уровень сложности кода. Сложность состоит в том, чтобы иметь представление - мы можем сделать трехмерную поверхность, где двумерная карта представляет код, и у нас есть тепловая карта цвета, представляющая сложность, с трехмерной поверхностью, выпячивающейся и выпирающей, чтобы показать изменения.
Как только вы может генерировать некоторые матрицы чисел, существует масса математических систем, чтобы позаботиться о подобных вещах.
Со временем я хотел бы иметь там более сложные числа, но те же методы визуализации, которые используются для представления изменений.
12164] Мне нравится идея в Crap4j сосредоточиться на соотношении между сложностью и количеством модульных тестов, охватывающих этот код.
Я также хотел бы включить метрики SOLID дяди Боба и некоторые из показателей ОО Чидамбера и Кемерера. Сложнее всего найти инструменты для их создания для C ++. Единственный вариант, кажется, Krakatau Essential Metrics (у меня нет возражений против оплаты инструментов). Мое желание использовать метрики CK частично связано с книгами Object-Oriented Metrics: Measures of Complex Хендерсона-Селлерса и более ранней Object-Oriented Software Metrics .
Если мы начнем использовать несколько этих показателей, мы можем получить около десяти чисел, которые меняются во времени. Я не очень разбираюсь в статистике, но мне кажется, что было бы интересно отследить множество таких показателей, а затем обратить внимание на то, какие из них имеют тенденцию меняться.
Обратите внимание, что связанный вопрос касается измерения качества кода в большая кодовая база . Меня больше интересует измерение изменения . inode-> data = (данные структуры) DATA_INIT; где: struct CachedPath {Ино ино; }; typedef int8_t Depth; данные структуры {Размер смещения; Blkno ...
В GCC я могу сделать это:
(CachedPath){ino}
inode->data = (struct Data)DATA_INIT;
где:
struct CachedPath
{
Ino ino;
};
typedef int8_t Depth;
struct Data
{
Offset size;
Blkno root;
Depth depth;
};
#define DATA_INIT {0, -1, 0}
MSVC выдает следующую ошибку для такого типа приведений:
error C2143: syntax error : missing ';' before '{'
Как это сделать в MSVC? Также обратите внимание, что код был преобразован из C99, где я использовал для этого назначенные инициализаторы, а затем аналогичным образом преобразовал его. Приветствуется любая ясность в отношении того, как эти различные функции соотносятся между реализациями C ++ C99 и MSVC / GCC.