Friday, September 12, 2014

VCL or FireMonkey - XE7

In a previous blog post I mentioned we are starting a rewrite of an existing application using Delphi XE7 .     One of the comments was raised if we are going to use VCL or Firemonkey.

It was decision we took quite seriously.    Using Delphi  we spent a few days developing Firemonkey sample applications and compared them to what we could do in VCL.    Firemonkey is quite nice.   It has some really nice way of presenting data.  However, ultimately we have decided on writing our application using the VCL.  

Primary reasons we to considered using VCL
  • Existing libraries that can be reused.
  • We have written 30+ Custom Controls, that we can reuse.
  • Still maintained and enhanced.
Reasons we considered Firemonkey
  • Can create some really pretty applications, animations, etc... that are more time consuming to create under VCL.
  • Gets most of the new features in the Delphi libraries.
  • Gives a potential to go cross platform   However, we have no requirements for this.
Reasons we choose the VCL over Firemonkey.
  • We have no need to go cross platform with this application
  • VCL applications look like the belong on windows, Firemonkey applications look like that are made to work on Windows.
  • Firemonkey is a fast moving target, and Delphi upgrades may be more difficult if we skip versions.   
  • VCL is still getting improvements (But since it's mature it's not as difficult to adapt)  but it's easier to upgrade between Delphi versions.
  • Existing code libraries can be reused.
  • Cost we don't have to buy or develop controls we already have.
  • Specific VCL controls - (Where we could not find a equivalent in Firemonkey)
    • TImageScrollBox in the Envision Library  (Really nice way to view images)
    • TRichViewEdit from the TRichView Library (Any RTF editor may work)
    • TTrayIcon support 
    • TWebBrowser - HTML Viewing Component for desktop, we see it there for mobile.
The good news is that XE7 supports both and I have a decision to make.    I know some have said get rid of one or the other.    I personally like having the choice, they each meet a different set of needs.   

That being said part of my hope is that some of the reasons we chose VCL or Firemonkey are removed are removed in future releases.  I also really want supported interactions that allow us to mix Firemonkey and VCL Code, such as a TFrame in VCL or Firemonkey being able to be embedded into VCL or Firemonkey form.      

Regardless of the the framework choice,  XE7 appears to be a good choice for development and has compelling reasons to use over XE6.

Thursday, September 4, 2014

Product/Component Vendors and XE7 Support

Here are the most prominent 3rd Party components(That don't ship in the Rad Studio/Delphi products) that we use.   We may or may not use these in the application we will be rewriting in Delphi XE7 as we have make lots of decisions first such as VCL or Firemonkey.

2 Days after XE7 was released and some people are are on top of there game.

The following already support XE7

Patiently waiting on Support for XE7 

I really like what TMS did for upgrading to XE6 and now they have done the same for XE7.

Wednesday, September 3, 2014

XE6 Upgrade Story, Now on to XE7...

We started the Delphi XE6 so early in the process we had to convert all the 3rd party components we used to XE6 without help from the vendors.  Our plan was to upgrade Delphi XE6, and move to ContinuaCI.  We also rewrote our FinalBuilder scripts from scratch, keeping in mind we would be upgrading more often.    This project was scheduled to go from April and release at the end of September.    We actually finished development in mid June and released after regression testing on Aug 7th.    The release went really well we had ONE new bug reported in Production    We also had less than 15 reported bugs during the development cycle.    Comparing it to our last major upgrade from Delphi 2007 to XE we were over schedule,  we lost count on the number development bugs, and we had many more problems in production.  
Testing our application suite takes apx 1.5 months to complete.    Due to the time it takes to completely retest the application we tend to have to isolate areas and focus on them for release.    This allows us to have faster testing time as we don't have to as thoroughly test all areas.   A luxury we don't get when upgrading Delphi as all area of the code need to be retested.

Because testing time is such a major part of development, we have been slowly but surely increasing the number of of unit tests.    We also have some research going on in GUI Automation Tools, but we are not pleased with our current options here.     We are also researching adding GUI testing to DUnitX.  Each has benefits and drawbacks that are obvious and others that we will only find out by trying.

That being said our team will not be able to upgrade our whole product suite to XE7 as 3 months of QA time a year to do Delphi Upgrades is too costly.     So we will have to wait for XE8  and maybe even XE9 for our whole product suite to be upgraded.  

That being said XE7 still appears to is a very compelling upgrade.

Our very first Delphi application that was developed here (long before I arrived) is showing it's age, it was originally developed in Delphi 3.    It came complete with every bad programming practice I have ever seen. Global variables, events containing all the business logic, the worst being it's desire to use hidden TEdit as variables.  Granted it was the first Delphi application written by that team, and they were learning the language on this project.... But it's just not worth trying to fix.  Not to mention that the business has evolved and wants something different that what it did.

The last version of Delphi that will touch this application is XE6.  

Today we are starting a project that will rewrite this application, were we will be using XE7.