﻿# Урок 28\. Оценка стоимости процесса 64\-битной миграции Си/Си\+\+ приложений

Приступая к планированию переноса проекта на 64\-битную систему, необходимо уметь оценить объем работ и материальные затраты\. Рассмотрим те элементы, из которых будет складываться цена создания 64\-битного программного проекта\.

В случае затруднений с оценками стоимости перехода на 64\-битные системы, вы можете обратиться за консультацией к специалистам нашей компании ООО "Системы программной верификации"\. Наша компания также может взять на себя часть работ или полностью выполнить адаптацию ваших проектов для 64\-битных систем\.

## Приобретение 64\-битного аппаратного и программного обеспечения

Сейчас уже сложно найти у разработчика компьютер, оснащенный 32\-битным микропроцессором\. Но все\-таки следует помнить, что вы должны быть обеспечены 64\-битными компьютерами для всех необходимых задач\. Более реальной выглядит ситуация, когда на 64\-битных аппаратных системах по\-прежнему используются 32\-битные операционные системы\. Вы должны учесть расходы, связанные с приобретением и установкой 64\-битных версий операционных систем\. Учтите дополнительные расходы, связанные со сменой версии операционной системы, например переустановку различного программного обеспечения\.

## Приобретение компилятора для сборки 64\-битных приложений

Заложите в цену покупку и освоение новых компиляторов, способных создавать 64\-битный код\.

## Приобретение 64\-битных версий библиотек

Вам может потребоваться купить 64\-битные версии библиотек и иных компонентов\. Узнайте заранее, какова ценовая политика компаний, чьи компоненты используются в вашем проекте\. Иногда 32\-битные и 64\-битные версии компонентов продаются отдельно\. Если вы используете библиотеки с открытым кодом, для которых пока не существуют 64\-битных конфигураций, то будьте готовы потратить существенное время на их самостоятельную доработку\.

## Обучение персонала и приобретение дополнительных инструментов

Учтите время, необходимое для того, чтобы сотрудники познакомились со всей необходимой информацией по разработке 64\-битных систем\. Также может потребоваться приобретение дополнительных инструментальных средств, таких как, например, [PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/)\.

## Модификация кода

Как вы уже знаете из предыдущих уроков, скомпилировать 64\-битную конфигурацию \- это только начало работы\. В большинстве случаев, необходимо обнаружить и исправить большое количество дефектов, которые проявят себя в 64\-битном коде\. Это, пожалуй, самый трудоемкий, но при этом наиболее плохо поддающийся оценке элемент\. Однако можно предложить следующую методологию оценки, основанную на использовании статического анализатора PVS\-Studio\.

Итак, у вас есть несколько \(десятков, сотен\) мегабайт исходного кода, готового к миграции\. Конфигурации для сборки 64\-битного кода пока нет\. Ни одного компилирующегося в 64\-битном режиме файла, соответственно, тоже нет\.

В PVS\-Studio имеется возможность обнаружения проблем 64\-битного кода даже в 32\-битных проектах\. Именно эта возможность и позволит оценить сложность миграции ДО этапа создания 64\-битной конфигурации проекта\.

Хочется обратить внимание читателей на то, как работает проверка кода в 32\-битном режиме\. Вы должны понимать, что эта проверка, не может считаться полноценной, и исправление даже всех обнаруженных проблем не является гарантией работоспособности кода в 64\-битном режиме\. В коде любого серьезного приложения будут подобные фрагменты:

```cpp
#ifdef WIN64
...
#endif
```

Естественно, при проверке в 32\-битном режиме подобный код будет пропущен\. Вернее будет сказать так: на момент, когда 64\-битной конфигурации пока еще нет, такого кода в приложении может не быть\.

Другой важный момент \- в зависимости от конфигурации проекта типы данных естественно отличаются\. Поэтому проверка в 32\-битном и в 64\-битном режиме практически всегда будет давать разные результаты\.

Однако сильно ли будут различаться эти результаты? По результатам экспериментов, проведенных в нашей компании, мы получили следующие данные: списки диагностических сообщений от анализатора кода PVS\-Studio при проверке проектов в 32\-битном и в 64\-битном режимах совпадают на 95\-97%\. Это означает, что отличаются не более 5% диагностических сообщений\.

Эти результаты были получены следующим образом\. Мы взяли код реальных проектов, проверили его в 32\-битном режиме, сохранили список диагностических сообщений\. Затем проверили код этих же проектов в 64\-битном режиме и вновь сохранили список диагностических сообщений\. После чего сравнили полученные списки и определили, сколько процентов диагностических сообщений совпало\. Поскольку вся процедура делалась в автоматизированном режиме, то количество проанализированных проектов было достаточным \(больше 20 проектов с объемом кода в несколько мегабайт каждый\)\. Можно сделать вывод, что цифры \(5% различий\) внушают доверие\.

Конечно же, спешить исправлять выявленные потенциальные ошибки в 32\-битной конфигурации проекта не стоит \- лучше подождать, пока станет доступна 64\-битная конфигурация\. А вот оценить, сколько потребуется времени для разбора сообщений от анализатора кода, вполне возможно\.

Для получения оценки времени рекомендуем поступить следующим образом:

1. Выполнить анализ 32\-битной конфигурации проекта с помощью PVS\-Studio\.
1. В течение одного дня программист, понимающий проблемы 64\-битного кода, просматривает сообщения анализатора кода и принимает решение о том, актуальна ли данная ошибка для данного проекта или нет\. Если актуальна, то он исправляет ее\.
1. Общее количество сообщений от анализатора кода делится на количество проанализированных и обработанных программистом сообщений за день\.
1. Полученное число \- это количество человеко\-дней, необходимое для миграции кода приложения на 64\-битную платформу\.

Найденные ошибки человек должен обязательно исправлять\. Недостаточно просто обнаружить ошибку и представить, что она исправлена\. Обнаружить и исправить \- это разные по времени действия\. Исправление некоторых ошибок может потребовать модификации кода программы во многих файлах проекта\. Чтобы оценка времени не оказалась заниженной, необходимо обязательно внести в код все необходимые правки\.

Разумеется, в данном алгоритме оценки процесса миграции есть слабое место \- профессионализм разработчика, который будет в течение одного дня разбирать сообщения от анализатора и модифицировать код\. Поэтому мы рекомендуем очень серьезно подойти к назначению программиста, ответственного за оценку\.

Вот несколько рекомендаций по выбору такого программиста:

1. Он должен быть опытным программистом со стажем работы не менее трех лет и желательно со знанием конкретного проекта, который будет переноситься\.
1. Он должен быть знаком с проблемами 64\-битного кода\. Например, с этими уроками или статьей "[20 ловушек переноса Си\+\+ \- кода на 64\-битную платформу](https://pvs-studio.ru/ru/blog/posts/cpp/a0004/)"\.
1. Желательно, чтобы он понимал принципы работы со статическими анализаторами кода\. Это необязательное требование, но понимание технологии статического анализа кода делает оценку процесса миграции более адекватной\.
1. Человек должен уметь удерживать себя в обыкновенном рабочем режиме в течение испытательного дня\. Он не должен стараться поставить рекорд производительности, чтобы произвести впечатление на коллег\. Все дни в таком режиме проработать не удастся, и сроки будут оценены не верно\.

Соблюдение этих рекомендаций позволит получить адекватную оценку стоимости и времени процесса 64\-битной миграции приложений\.

## Адаптация системы тестирования

Учтите стоимость адаптации вашей системы тестирования для полноценной проверки 64\-битных модулей\. Если ваши программы обрабатывают большие объемы данных, то должны появиться тесты, в которых используются объемы данных более 4 гигабайт\. В свою очередь интеграция тяжелых тестов может повлечь за собой задачу распараллеливания тестов\. В этом случае, возможно, вам придется приобрести дополнительные инструментальные средства\.

## Защита программных модулей

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

## Адаптация дистрибутива

Вам потребуется создать новый дистрибутив, что было подробно рассмотрено в предыдущем уроке\.

_Авторы курса: Андрей Карпов \([karpov@viva64\.com](mailto:karpov@viva64.com)\), Евгений Рыжков \([evg@viva64\.com](mailto:evg@viva64.com)\)\._

_Правообладателем курса "Уроки разработки 64\-битных приложений на языке Си/Си\+\+" является ООО "Системы программной верификации"\. Компания занимается разработкой программного обеспечения в области анализа исходного кода программ\. [Сайт компании](https://pvs-studio.ru/ru/pvs-studio/)\._