I recently found out that my office did a code review for a tool that may be maintained by my organization. Now, the tool has an odd choice of technology implementations, so I'm not sure who decided on everything. But, essentially, there's a .NET web application that uses Flash for some reporting UI components which talk to Java web services. And, the .NET app also talks directly to the same database that the Java web services talk to for additional admin functionality. (I hope I explained that clearly)
Anyway, I am the only person in my office that is pro-.NET; everyone else supports/backs J2EE. But, this project came to my office (without me knowing, which ticked me off) and a code review was performed. The person who did it is familiar with .NET, but I'm not sure to what extent. Anyway, the report was fine. There were a few vague areas that I had questions about, but overall, it was sound and I'd agree. The problem came when I saw the source code findings. They used a set of quality attributes that are defined in the ISO 9126 Software Quality Model. I haven't seen the code, yet, so I can't say whether or not the ratings (1-5, 1 being poor) are accurate. But, there was one in particular that was an attention-getter: portability.
The review defines portability as:
The ability of the source code to be used on various user environments and development environments. Observations generated on portability indicate risks that the software product can't be used on specific user platforms or that the source code can't be used “as-is” in specific development environments.
Now, maybe I'm just trying to argue the 5-to-1 Java vs. .NET rating, or maybe I'm just trying to give more credit to .NET, but when doing a code review, I don't think portability should be considering moving the code to unsupported environments. Basically, I think this should be relative. For instance, if I have a Perl application, how well can I move my code to one or another Perl server? Obviously, I've already chosen Perl, which means that I've accepted the risk of limiting myself to a Perl server. Now, is my code portable between Perl servers? That's the true question.
In this situation, the Java code got a 5, but I don't know if that means it is completely transferable between any and all other Java app servers, or this means that Java can theoretically run on any platform. One has to question that. They didn't do a full review of all the code, so I doubt they know whether it is completely Java-portable or not.
Anyway, I'm trying to figure out how best to approach this. It'd be interesting to hear other peoples' opinions on how the portability metric should be applied to code reviews. Perhaps the best answer is to have two sub-categories of portability: one to determine how easily the code can be moved to another OS (considering all OSs), and another to determine how easily code can be moved to another implementation of the technology platform.