Portabilität Seminar aus Softwareentwicklung: Programmierstil Christine Schiestl WS 02 / 03
Portabilität Schnittstellen Probleme bezüglich Programmiersprache Zielsysteme Vorteile / Kosten von Portabilität Metriken Grad der Portabilität A software unit is portable (exhibits portability) across a class of environments to the degree that the effort required to transport and adapt it to a new environment in the class is less than the effort of redevelopment. Definition und Übersicht
Anerkannte, vollständige, eindeutige Standards für Schnittstellen erleichtern Portabilität Schnittstellen Application Programm Support Procedures CPU and Memory Operating System I/O Devices UsersTerminals Remote Systems
Programmiersprache Nicht vom Standard abweichen Mit dem Strom schwimmen Alte Sprachkonstrukte vermeiden Standard Bibliotheken verwenden *x[] = {abx} java.util.Date int getDay() Deprecated. As of JDK version 1.1, replaced by Calendar.get(Calendar.DAY_OF_WEEK) 1 / 3
Programmiersprache Auf Problemstellen achten (vom Standard nicht spezifiziert) Größe von Datentypen Reihenfolge der Auswertung int main(void){ printf(%d %d %d %d, sizeof(char), sizeof(short), sizeof(int), sizeof(long)); return 0; } n = (getchar() << 8) | getchar(); ptr[count] = name[++count]; printf(%c %c\n, getchar(), getchar()); 2 / 3
Programmiersprache char mit / ohne Vorzeichen Speicher Int i; Char s[MAX]; for (i=0; i<MAX-1; i++) { //if ((s[i]=getchar()) == EOF) break; if ((c=getchar()) == EOF) break; s[i] = c; } s[i] = \0; Struct X{ char c; int i; }; sizeof(Struct X) sizeof(char)+sizeof(int) 3 / 3
Zielsysteme Schnittmenge der Eigenschaften statt Vereinigung Bedingte Kompilierung vermeiden Einfache Programmierung #ifdef MAC... #elif DOS... #endif 1 / 2 Schnittmenge Vereinigung
Zielsysteme Systemabhängigkeiten Getrennt verwalten Mittels Interfaces verstecken Byte Ordnung Fixe Byte Ordnung einführen Auf #ifdef verzichten unsigned short x; putchar(x >> 8); putchar(x & 0xFF); unsigned short x; x = getchar << 8; x |= getchar() & 0xFF; 2 / 2 int open(const char *Pfad,int OModus[unsigned SModus]) int read(int Fd, void *Puffer, unsigned n) int close(int Fd) UNIX.cWIN.c...
User Sprache Fehlermeldungen Platz Datum Kulturelle Unterschiede Interpretation graphischer oder akustischer Elemente und Symbole User Experience Systemkapazitäten Zeichensatz ASCII / Unicode … Internationalisierung / Lokalisierung Februar ? 2. Jänner? $ / / … garçon E7 6F 6E
Vorteile / Nachteile Vorteile Kosten für spätere Entwicklungen Verschiedene Zielsysteme In Neuentwicklung und nicht Redevelopment investieren Software ist strukturierter, durchdachter, besser getestet Kosten Größerer Aufwand bei der Entwicklung Möglicherweise Qualitätseinbußen bei der Software (Ressourcenverbrauch, Performance, Eigenschaften der jeweiligen Systeme)
Metriken Grad der Portabilität Kosten Eigene Metriken für Einbußen in Qualität wie Ressourcen Verbrauch … DP(su) = 1 – (Cport(su,e2) / Crdev(req,e2)) für SW-Entwicklung: Cdev(req,e1) = Cdes(req) + Ccod(req,e1) + Ctd(req,e1) + Cdoc(req,e1) Cdevp(req,e1) = Cdev(req,e1) + Cpa(req) für Neuentwicklung: Crdev(req,e2) <= Cdev(req,e1) für Portierung: Cport(su,e2) = Cmod(su,e2) + Cptd(req,e2) + Cpdoc(req,e2) ohne P: 0.95 mit P:
Ausblick Portabilität ist nicht immer der beste Weg Keine allgemeine Komplettlösung Java, SW Patterns, universelle Systeme / Plattformen … Verschiedene Aspekte Portieren über Länder, Systeme usw. hinweg Kaum Methoden, Referenzen, Metriken etc. vorhanden Empfehlungen Meist ad hoc – Lösungen
Literatur Williams, David: C++ portability guide, Version 0.8, Blair, Liz: Build to Spec!, Reprinted from Java Developers Journal, ml ml Mooney, James D.: Developing Portable Software, Tutorial, Mooney, James D.: Bringing Portability to the Software Process, Technikal Report, Brian W. Kernighan, Rob Pike: The Practice of Programming, Addison Wesley, 1999 Schildt, Herbert: C ent-packt, mitp-Verlag, 2001