Worldolio Development Metrics
Worldolio is more than a very useful management tool it is also an experiment in software development. When attempting to select an architecture for a piece of software there are a number of factors that have to be considered.
- How quickly can the software be built?
- What experience or skill is required to build the software?
- How fast will the software run?
- What is the target environment required to use the software?
- How easy is it to test the software?
- How easy is it to make changes?
- How complex is the code?
We intend to record and measure the different approaches taken to gain a better understanding of the strengths and weaknesses of each approach. This document details and records the metrics we have gathered.
Progress
We need to bear in mind that sometimes we are not comparing like with like. Each of the architectures may be at different stages of development. Therefore we need a definition for each level (v1, v2 etc)
Worldolio v1
- Add and remove cities to a group from a database of 500 cities
- Nominate a city in the group as home
- Display a grid of information for the group of cities where information can be resized, reordered and hidden
- Display a map showing the day night shadow and the cities in the group
- Enable the user to select a date and time and have the grid updated for that date and time
- Display detailed information about a selected city
- Allow display units to be configured (miles, km, 24 hour, am/pm etc)
Each version of the application may be at different stages of development, for example a version may be
- Complete: It has implemented all the features
- Partial: It is useable and function however it is not complete
- Prototype: Basically a proof of concept
The metrics are for these versions of Worldolio
Version |
|
Technology |
|
Status |
Worldolio Web |
|
HTML, ASP.NET, C# |
|
v1 Complete |
Worldolio MobileWeb |
|
WML, ASP.NET Mobile Controls, C# |
|
v1 Partial |
Worldolio.NET for Windows |
|
.NET, C# |
|
v1 Complete |
Worldolio for PocketPC |
|
WIN32 API, Embedded C++ |
|
v1 Complete |
Worldolio.NET for PocketPC |
|
.NET Compact Framework, C# |
|
v1 Complete |
Worldolio.NET for Smartphone |
|
.NET Compact Framework, C# |
|
Prototype |
Effort
The time in man hours devoted to each part of the work.
Component |
Man Hours |
Worldolio Web |
90 |
Worldolio MobileWeb |
26 |
Worldolio.NET for Windows |
52 |
Worldolio for PocketPC |
159 |
Worldolio.NET for PocketPC |
166 |
Worldolio.NET for Smartphone |
9 |
Base .NET Data Engine |
152 |
Hosting Web Site |
49 |
Observations
- The Hosting Web Site are the pages on this site that are not part of the Worldolio Web application. For example the FAQs, Download pages and this page.
- Technically Worldolio Web isn't complete as the columns on the grid cannot be customised
- Some of the time used to do initial development work to build the database of cities into the engine was not captured
- We were experience in .NET, C++ and HTML however we had to learn .NET Compact Framework and mobile web site design.
Surprises
- It would appear that we do not write .NET code faster than C++ code. This may be because we are both experienced C++ WIN32 API developers and had not used the Compact Framework before.
Code
Metrics of the source code. Source code metrics have been gathered using SourceMonitor.
Version |
Number of Lines |
Worldolio Web |
12,289 |
Worldolio.NET for Windows |
4,403 |
Worldolio for PocketPC |
5,246 |
Worldolio.NET for PocketPC |
4,485 |
The Kiviat graphs give an overall feel for the project.
The complexity graphs show the number of file that have a given maximum complexity. So for example there is one file in each project that has a complexity rating of 12 or 13.
Observations
- Worldolio.NET for PocketPC does include 488 lines of code in the DateTimePicker (it is not in the Compact Framework) whereas the C++ version can use the native control.
- The file that has a complexity rating of 17 file in Worldolio.NET for PocketPC is the DateTimePicker control.
- The web site is used to host the downloads as well as provide the Worldolio app which has inflated its code size and complexity. The metrics do not take into account client side script.
Surprises
- Wow, we really expected the C++ code to be a lot bigger and a lot more complex than the C# code
- Code complexity is related to the task being performed rather than the language being used.
- The web site is the largest and most complex project even allowing for it hosting the downloads.
Product
Metrics for each installable version.
Version |
Size of deployment |
Deployment type |
Memory footprint |
Worldolio.NET for Windows |
500 KB |
msi |
10 MB |
Worldolio for PocketPC |
400 KB |
cab |
500 KB |
Worldolio.NET for PocketPC |
1.1 MB |
msi |
4.25 MB |
Worldolio.NET for Smartphone |
150 KB |
cab |
n/a |
Observations
- The .NET deployment sizes do not include the .NET Framework (20MB+ for the PC, 10MB+ for PocketPC)
- The PocketPC msi contains the 4 processor specific cabs. In reality only one cab is actually required. The cabs are each about 450KB.
Surprises
- The memory footprint for .NET applications is colossal.
Performance
You may prefer to download and run these to get a feel for how fast they perform. All times in milliseconds (1,000 milliseconds = 1 second).
Version |
Device |
Launch the app. |
Display change cities dialog |
Show nearby cities by clicking on the map |
Worldolio for PocketPC v1.3.2 |
Dell Axim X5 @ 400MHz PPC 2003 v4.20.1081 |
1,095 |
102 |
219 |
|
Worldolio for PocketPC v1.0 |
Casio E125 MIPS @ 150MHz PPC 2000 v3.0.9348 |
1,641 |
370 |
641 |
|
Worldolio.NET for PocketPC v1.4 |
Dell Axim X5 @ 400MHz PPC 2003 v4.20.1081 .NET v1.0.3316 (SP2) |
3,248 |
296 |
297 |
|
Worldolio.NET for PocketPC v1.4 |
Toshiba E400 PPC 2003 v4.20.1081 .NET v1.0.3316 (SP2) |
4,459 |
361 |
263 |
|
Worldolio.NET for PocketPC v1.4 |
HP Jornada 565 @ 200MHz PPC 2002 v3.0.11171 .NET v1.0.3316 (SP2) |
6,531 |
484 |
308 |
|
Worldolio.NET for PocketPC v1.4 |
Casio E125 MIPS @ 150MHz PPC 2000 v3.0.9348 .NET v1.0.3316 (SP2) |
10,709 |
686 |
1,084 |
|
Worldolio.NET for PocketPC v1.3 |
Dell Axim X5 @ 400MHz PPC 2003 v4.20.1081 .NET v1.0.3316 (SP2) |
4,634 |
1,574 |
1,717 |
|
Worldolio.NET for Smartphone v0.9.0.2 |
RedE SC1100 Smartphone 2003 v4.20.0 .NET v1.0.3111 (SP1) |
17,434 |
1,771 |
n/a |
Observations
- The C++ application was built with eVC v3
- The C++ is sharp and snappy and despite a lot of work the .NET one still feels a bit sluggish.
- The neaby cities dialog for the C++ version is more complex than the .NET version as it presents list of neaby cities ordered by distance.
- These times do not include any time to spin up the .NET framework, in other words its not a completely cold start
- The effort required to go from Worldolio.NET for PocketPC 1.3 to 1.4 was 30 hours
Surprises
- The .NET performance is pretty good. It has taken a lot of effort to optimise the code, and virtually no effort in C++.
|