SlideShare una empresa de Scribd logo
1 de 4
Descargar para leer sin conexión
How to estimate the process of 64-bit
migration of C/C++ applications?
Author: Evgeniy Ryzhkov

Date: 21.09.2009


Abstract
The article is devoted to the issue of estimating complexity and cost of migration of applications to 64-
bit platforms. Such aspects as availability of various components of an application, libraries and
development tools are considered. An example of using PVS-Studio program tool for estimating
migration is given. Although the mentioned PVS-Studio product is oriented on C and C++ applications in
Windows system, Unix-developers (and developers working in other systems) will find the article useful
too.


Introduction
With the phrase "near at hand is the day when all the developers will have to release 64-bit versions of
their applications" I begin many articles since 2006, although now, when I am writing this article, 2009 is
coming to end. Life has shown that I was wrong. That day is not so close. So many companies have not
yet released 64-bit versions of their products. Partly it is due to the policy of Microsoft company that
makes money equally well at selling 32-bit versions of Windows and 64-bit ones. And partly it is because
far not all applications actually need the 64-bit versions.

But thanks to my experience of communicating with people responsible for decisions of developing
applications' 64-bit versions, I understood that the main constraint is very simple. Many people simply
do not know how to estimate time and value of the process of migrating an application to a 64-bit
architecture. So, this ignorance makes them postpone the process of porting code as far as possible.

In this article I am going to tell you about one of the methods to estimate this process before migration.
For it is possible to exactly tell how much time migration of a particular application takes only when this
migration is over.

The article is based on the experience of OOO "Program Verification Systems" company's workers, both
in porting various applications to 64-bit systems and using PVS-Studio code analyzer.


"Houston, Houston. Can we take off?"
This article is devoted to estimate of the migration process, but not the migration process itself. That's
why I would refer those who want to examine the issue in detail to the article "Seven steps of migrating
a program to a 64-bit system" [2]. Nevertheless, I will use some theses from that article here. Before we
estimate the peculiarities of migration, we must have clear answers to the following questions:

    1. Do we need to perform the very migration of code to 64-bit systems or is it enough just to make
       sure that a 32-bit application works on a 64-bit system?
    2. Does the development tool used in the project support generation of 64-bit code?
3. Are there 64-bit versions of all the components and libraries used in the project?

If you answer "yes" to all these questions you face the main question put in the title of the article.


"Well, how to estimate the process of 64-bit migration?"
So, you have some (or some tens of) MBs of source code ready for migration. There is no configuration
for building 64-bit code, and consequently no module compiled in 64-bit mode. But after reading the
article "20 issues of porting C++ code on the 64-bit platform" [4] you understand that the process of
searching all the hidden errors in the code will be difficult.

To understand how difficult the search of all the errors will be you can use static code analysis. There
are various code analyzers (comparison of code analyzers, [3]) that you may use when searching
problems in 64-bit code, but in this article I will stick to PVS-Studio code analyzer for it is this tool our
company develops.

So, in PVS-Studio 3.30, you have a new ability of detecting problems relating to 64-bit code even in 32-
bit projects. It is this ability that allows you to estimate complexity of migration BEFORE the step of
creating the 64-bit configuration of the project. Earlier, PVS-Studio analyzer allowed testing projects
only in the 64-bit configuration.

I would like to pay your attention to the mechanism of code testing in 32-bit mode. First of all, you
should understand that of course this testing cannot be considered full, and correction of even all the
detected problems cannot guarantee code's operability in 64-bit mode. For in the code of any serious
application there will be fragments like this:

#ifdef WIN64

...

#endif

Of course, when testing the code in 32-bit mode, a fragment like this will be skipped. Or, more exactly:
at the moment when there is no 64-bit configuration, there can be no fragment similar to this in the
code. And when it does appear, the analyzer will "forget" to test it.

Another important point is that depending on the project's configuration data types are naturally
different. That's why testing in 32-bit and 64-bit modes will nearly always give different results.

But how much will these results differ? Proceeding from the results of the experiments undertaken by
our company, we give you the following data. The lists of diagnostic warnings generated by PVS-Studio
code analyzer coincide 95-97% when testing projects both in 32-bit and 64-bit modes! This means that
not more than 5% of diagnostic warnings differ. These results have been received in this way: we took
the codes of real projects, tested them in 32-bit mode and saved the list of the problems detected. Then
we tested the codes of the same projects in 64-bit mode and saved the list of the problems detected.
After that we compared the two lists and estimated how many per cents of diagnostic warnings had
coincided. For the whole procedure was performed in automated mode, the number of the projects
tested was rather large (more than 20 projects, each several MBs in size). So, you can trust these results.
Of course you should not hurry to correct the detected potential errors in the 32-bit configuration - you
should wait for the 64-bit configuration. But you can estimate how much time it will take to look
through the code analyzer's warnings.

To get a time estimate I recommend that you do the following:

     1. Perform analysis of the 32-bit configuration of the project with the help of PVS-Studio.
     2. Ask a programmer who understands issues of 64-bit code to look through the warnings of the
        code analyzer for one day and decide whether this or that error is relevant to the project.
     3. The general number of the code analyzer's warnings is divided into the number of the warnings
        examined by the programmer during one day.
     4. The number you get is the number of man-hours necessary to migrate the code of the
        application to a 64-bit platform.

Of course there is a weak point in this algorithm of estimating the migration process - the programmer
who will look through the warnings during a day. That's why I recommend that you take it seriously
when choosing a person responsible for the estimate.

Here you are some recommendations on choosing such a programmer:

     1. He must be a programmer with experience of not less than three years and, if possible, be
        familiar with the particular project to be tested.
     2. He must be familiar with the issues of 64-bit code. The article "20 issues of porting C++ code on
        the 64-bit platform" [4] mentioned above is a good source of information on this topic.
     3. It is desirable that he understand the principles of operating static code analyzers. This is not an
        obligatory requirement but understanding of the code static analysis technology makes
        estimate of the migration process more adequate.

Following these recommendations will allow you to get an adequate estimate of value and time of 64-
bit migration of applications.


Conclusion
To better understand this article you should consider some points:

     1. No tool (including PVS-Studio) can give any final estimate. It is always a person who gives an
        estimate. Sometimes using tools, sometimes without them.
     2. PVS-Studio code analyzer is not intended for estimating the process of 64-bit migration; it does
        not give an estimate in hours (days, months). This is a tool detecting potential errors in 64-bit
        code. But proceeding from this information (when testing a 32-bit project) one can estimate
        man-hours needed for the project's port.
     3. The quality of estimate depends on a person.

I wish you successful estimate of 64-bit migration of code and hope that PVS-Studio tool will help you in
it.


References
1.       Code analyzer PVS-Studio. http://www.viva64.com/pvs-studio/ .
2.   Andrey Karpov. Seven Steps of Migrating a Program to a 64-bit System.
     http://www.viva64.com/art-1-2-850243650.html
3.   Andrey Karpov. Comparison of analyzers' diagnostic possibilities at checking 64-bit code.
     http://www.viva64.com/art-1-2-914146540.html
4.   Andrey Karpov, Evgeniy Ryzhkov. 20 issues of porting C++ code on the 64-bit platform.
     http://www.viva64.com/art-1-2-599168895.html

Más contenido relacionado

Más de Andrey Karpov

Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...Andrey Karpov
 
Best Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesBest Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesAndrey Karpov
 
Does static analysis need machine learning?
Does static analysis need machine learning?Does static analysis need machine learning?
Does static analysis need machine learning?Andrey Karpov
 
Typical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and JavaTypical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and JavaAndrey Karpov
 
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)Andrey Karpov
 
Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?Andrey Karpov
 
C++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerC++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerAndrey Karpov
 
The Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source SoftwareThe Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source SoftwareAndrey Karpov
 
Static Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal EngineStatic Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal EngineAndrey Karpov
 
Safety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded SystemsSafety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded SystemsAndrey Karpov
 
The Great and Mighty C++
The Great and Mighty C++The Great and Mighty C++
The Great and Mighty C++Andrey Karpov
 
Static code analysis: what? how? why?
Static code analysis: what? how? why?Static code analysis: what? how? why?
Static code analysis: what? how? why?Andrey Karpov
 
Zero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for youZero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for youAndrey Karpov
 
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOps
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOpsPVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOps
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOpsAndrey Karpov
 
PVS-Studio Static Analyzer as a Tool for Protection against Zero-Day Vulnerab...
PVS-Studio Static Analyzer as a Tool for Protection against Zero-Day Vulnerab...PVS-Studio Static Analyzer as a Tool for Protection against Zero-Day Vulnerab...
PVS-Studio Static Analyzer as a Tool for Protection against Zero-Day Vulnerab...Andrey Karpov
 
Analysis of commits and pull requests in Travis CI, Buddy and AppVeyor using ...
Analysis of commits and pull requests in Travis CI, Buddy and AppVeyor using ...Analysis of commits and pull requests in Travis CI, Buddy and AppVeyor using ...
Analysis of commits and pull requests in Travis CI, Buddy and AppVeyor using ...Andrey Karpov
 
PVS-Studio in the Clouds: CircleCI
PVS-Studio in the Clouds: CircleCIPVS-Studio in the Clouds: CircleCI
PVS-Studio in the Clouds: CircleCIAndrey Karpov
 
PVS-Studio in the Clouds: Azure DevOps
PVS-Studio in the Clouds: Azure DevOpsPVS-Studio in the Clouds: Azure DevOps
PVS-Studio in the Clouds: Azure DevOpsAndrey Karpov
 
Errors that static code analysis does not find because it is not used
Errors that static code analysis does not find because it is not usedErrors that static code analysis does not find because it is not used
Errors that static code analysis does not find because it is not usedAndrey Karpov
 
Machine Learning in Static Analysis of Program Source Code
Machine Learning in Static Analysis of Program Source CodeMachine Learning in Static Analysis of Program Source Code
Machine Learning in Static Analysis of Program Source CodeAndrey Karpov
 

Más de Andrey Karpov (20)

Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
 
Best Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesBest Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' Mistakes
 
Does static analysis need machine learning?
Does static analysis need machine learning?Does static analysis need machine learning?
Does static analysis need machine learning?
 
Typical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and JavaTypical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and Java
 
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
 
Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?
 
C++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerC++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical Reviewer
 
The Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source SoftwareThe Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source Software
 
Static Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal EngineStatic Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal Engine
 
Safety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded SystemsSafety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
 
The Great and Mighty C++
The Great and Mighty C++The Great and Mighty C++
The Great and Mighty C++
 
Static code analysis: what? how? why?
Static code analysis: what? how? why?Static code analysis: what? how? why?
Static code analysis: what? how? why?
 
Zero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for youZero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for you
 
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOps
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOpsPVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOps
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOps
 
PVS-Studio Static Analyzer as a Tool for Protection against Zero-Day Vulnerab...
PVS-Studio Static Analyzer as a Tool for Protection against Zero-Day Vulnerab...PVS-Studio Static Analyzer as a Tool for Protection against Zero-Day Vulnerab...
PVS-Studio Static Analyzer as a Tool for Protection against Zero-Day Vulnerab...
 
Analysis of commits and pull requests in Travis CI, Buddy and AppVeyor using ...
Analysis of commits and pull requests in Travis CI, Buddy and AppVeyor using ...Analysis of commits and pull requests in Travis CI, Buddy and AppVeyor using ...
Analysis of commits and pull requests in Travis CI, Buddy and AppVeyor using ...
 
PVS-Studio in the Clouds: CircleCI
PVS-Studio in the Clouds: CircleCIPVS-Studio in the Clouds: CircleCI
PVS-Studio in the Clouds: CircleCI
 
PVS-Studio in the Clouds: Azure DevOps
PVS-Studio in the Clouds: Azure DevOpsPVS-Studio in the Clouds: Azure DevOps
PVS-Studio in the Clouds: Azure DevOps
 
Errors that static code analysis does not find because it is not used
Errors that static code analysis does not find because it is not usedErrors that static code analysis does not find because it is not used
Errors that static code analysis does not find because it is not used
 
Machine Learning in Static Analysis of Program Source Code
Machine Learning in Static Analysis of Program Source CodeMachine Learning in Static Analysis of Program Source Code
Machine Learning in Static Analysis of Program Source Code
 

Último

Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 

Último (20)

Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 

How to estimate the process of 64-bit migration of C/C++ applications?

  • 1. How to estimate the process of 64-bit migration of C/C++ applications? Author: Evgeniy Ryzhkov Date: 21.09.2009 Abstract The article is devoted to the issue of estimating complexity and cost of migration of applications to 64- bit platforms. Such aspects as availability of various components of an application, libraries and development tools are considered. An example of using PVS-Studio program tool for estimating migration is given. Although the mentioned PVS-Studio product is oriented on C and C++ applications in Windows system, Unix-developers (and developers working in other systems) will find the article useful too. Introduction With the phrase "near at hand is the day when all the developers will have to release 64-bit versions of their applications" I begin many articles since 2006, although now, when I am writing this article, 2009 is coming to end. Life has shown that I was wrong. That day is not so close. So many companies have not yet released 64-bit versions of their products. Partly it is due to the policy of Microsoft company that makes money equally well at selling 32-bit versions of Windows and 64-bit ones. And partly it is because far not all applications actually need the 64-bit versions. But thanks to my experience of communicating with people responsible for decisions of developing applications' 64-bit versions, I understood that the main constraint is very simple. Many people simply do not know how to estimate time and value of the process of migrating an application to a 64-bit architecture. So, this ignorance makes them postpone the process of porting code as far as possible. In this article I am going to tell you about one of the methods to estimate this process before migration. For it is possible to exactly tell how much time migration of a particular application takes only when this migration is over. The article is based on the experience of OOO "Program Verification Systems" company's workers, both in porting various applications to 64-bit systems and using PVS-Studio code analyzer. "Houston, Houston. Can we take off?" This article is devoted to estimate of the migration process, but not the migration process itself. That's why I would refer those who want to examine the issue in detail to the article "Seven steps of migrating a program to a 64-bit system" [2]. Nevertheless, I will use some theses from that article here. Before we estimate the peculiarities of migration, we must have clear answers to the following questions: 1. Do we need to perform the very migration of code to 64-bit systems or is it enough just to make sure that a 32-bit application works on a 64-bit system? 2. Does the development tool used in the project support generation of 64-bit code?
  • 2. 3. Are there 64-bit versions of all the components and libraries used in the project? If you answer "yes" to all these questions you face the main question put in the title of the article. "Well, how to estimate the process of 64-bit migration?" So, you have some (or some tens of) MBs of source code ready for migration. There is no configuration for building 64-bit code, and consequently no module compiled in 64-bit mode. But after reading the article "20 issues of porting C++ code on the 64-bit platform" [4] you understand that the process of searching all the hidden errors in the code will be difficult. To understand how difficult the search of all the errors will be you can use static code analysis. There are various code analyzers (comparison of code analyzers, [3]) that you may use when searching problems in 64-bit code, but in this article I will stick to PVS-Studio code analyzer for it is this tool our company develops. So, in PVS-Studio 3.30, you have a new ability of detecting problems relating to 64-bit code even in 32- bit projects. It is this ability that allows you to estimate complexity of migration BEFORE the step of creating the 64-bit configuration of the project. Earlier, PVS-Studio analyzer allowed testing projects only in the 64-bit configuration. I would like to pay your attention to the mechanism of code testing in 32-bit mode. First of all, you should understand that of course this testing cannot be considered full, and correction of even all the detected problems cannot guarantee code's operability in 64-bit mode. For in the code of any serious application there will be fragments like this: #ifdef WIN64 ... #endif Of course, when testing the code in 32-bit mode, a fragment like this will be skipped. Or, more exactly: at the moment when there is no 64-bit configuration, there can be no fragment similar to this in the code. And when it does appear, the analyzer will "forget" to test it. Another important point is that depending on the project's configuration data types are naturally different. That's why testing in 32-bit and 64-bit modes will nearly always give different results. But how much will these results differ? Proceeding from the results of the experiments undertaken by our company, we give you the following data. The lists of diagnostic warnings generated by PVS-Studio code analyzer coincide 95-97% when testing projects both in 32-bit and 64-bit modes! This means that not more than 5% of diagnostic warnings differ. These results have been received in this way: we took the codes of real projects, tested them in 32-bit mode and saved the list of the problems detected. Then we tested the codes of the same projects in 64-bit mode and saved the list of the problems detected. After that we compared the two lists and estimated how many per cents of diagnostic warnings had coincided. For the whole procedure was performed in automated mode, the number of the projects tested was rather large (more than 20 projects, each several MBs in size). So, you can trust these results.
  • 3. Of course you should not hurry to correct the detected potential errors in the 32-bit configuration - you should wait for the 64-bit configuration. But you can estimate how much time it will take to look through the code analyzer's warnings. To get a time estimate I recommend that you do the following: 1. Perform analysis of the 32-bit configuration of the project with the help of PVS-Studio. 2. Ask a programmer who understands issues of 64-bit code to look through the warnings of the code analyzer for one day and decide whether this or that error is relevant to the project. 3. The general number of the code analyzer's warnings is divided into the number of the warnings examined by the programmer during one day. 4. The number you get is the number of man-hours necessary to migrate the code of the application to a 64-bit platform. Of course there is a weak point in this algorithm of estimating the migration process - the programmer who will look through the warnings during a day. That's why I recommend that you take it seriously when choosing a person responsible for the estimate. Here you are some recommendations on choosing such a programmer: 1. He must be a programmer with experience of not less than three years and, if possible, be familiar with the particular project to be tested. 2. He must be familiar with the issues of 64-bit code. The article "20 issues of porting C++ code on the 64-bit platform" [4] mentioned above is a good source of information on this topic. 3. It is desirable that he understand the principles of operating static code analyzers. This is not an obligatory requirement but understanding of the code static analysis technology makes estimate of the migration process more adequate. Following these recommendations will allow you to get an adequate estimate of value and time of 64- bit migration of applications. Conclusion To better understand this article you should consider some points: 1. No tool (including PVS-Studio) can give any final estimate. It is always a person who gives an estimate. Sometimes using tools, sometimes without them. 2. PVS-Studio code analyzer is not intended for estimating the process of 64-bit migration; it does not give an estimate in hours (days, months). This is a tool detecting potential errors in 64-bit code. But proceeding from this information (when testing a 32-bit project) one can estimate man-hours needed for the project's port. 3. The quality of estimate depends on a person. I wish you successful estimate of 64-bit migration of code and hope that PVS-Studio tool will help you in it. References 1. Code analyzer PVS-Studio. http://www.viva64.com/pvs-studio/ .
  • 4. 2. Andrey Karpov. Seven Steps of Migrating a Program to a 64-bit System. http://www.viva64.com/art-1-2-850243650.html 3. Andrey Karpov. Comparison of analyzers' diagnostic possibilities at checking 64-bit code. http://www.viva64.com/art-1-2-914146540.html 4. Andrey Karpov, Evgeniy Ryzhkov. 20 issues of porting C++ code on the 64-bit platform. http://www.viva64.com/art-1-2-599168895.html