Praktikum: Spezifikation - Technische Informatik / Eingebettete

Werbung
1
Seminar zum Programmierprojekt (TI) Sommersemester 2007
(Lehrstuhl für Technische Informatik)
Ausgabe: 15. Mai 2007
Aufgabe B4: Anleitung
Einführung in die Entwicklungsumgebung und Abnahmekriterien des Mobiltelefons.
Allgemeines
In dieser Aufgabe wird mit Kapitel 8 das Schreiben des Pflichtenhefts abgeschlossen. Des
Weiteren lernen wir die integrierte Entwicklungsumgebung Eclipse kennen. Eclipse wurde
von der Fa. IBM entwickelt und als Open Source zur Verfügung gestellt. Wir beginnen mit
der Einführung in die Java Programmierung im Mobiltelefon für mobile Kommunikation mittels Bluetooth.
Eclipse
Eclipse ist ein Open-Source-Framework zur Entwicklung von Rich-Client-Applikationen
(RCP). Die bekannteste Anwendung ist die Nutzung als Entwicklungsumgebung (IDE - Integrated Development Environment) für die Programmiersprache Java. Eclipse ist nicht auf
Java festgelegt und wird aufgrund seiner offenen plugin-basierten Struktur mittlerweile für
sehr unterschiedliche Entwicklungsaufgaben eingesetzt.
Eclipse basiert auf Java-Technologie, seit Version 3.0 konkret auf einem OSGi-Framework
(Open Services Gateway Initiative) namens Equinox, das auch Grundlage des IBM Workplace Clients ist, einer Weiterentwicklung von Lotus Notes. Eclipse ist der Nachfolger von IBM
"Visual Age" für Java 4.0. Der Quellcode für Eclipse, der einen Wert von angeblich 40 Millionen US-Dollar haben soll, wurde am 7. November 2001 von IBM freigegeben. Etwa die
Hälfte der derzeitig am Eclipse-Basisframework arbeitenden Entwickler werden weiterhin
von IBM bezahlt. Am 2. Februar 2004 beschloss das von IBM geführte Eclipse-Konsortium
die Gründung der rechtlich eigenständigen Eclipse Foundation, die seitdem für die Entwicklung von Eclipse verantwortlich ist.
2
Bis einschließlich zur Version 2.1 war Eclipse als erweiterbare IDE konzipiert. Seit Version
3.0 ist Eclipse selbst nur der Kern, der die einzelnen Plugins lädt, die dann die eigentliche
Funktionalität zur Verfügung stellen. Diese Funktionalität nennt sich Rich Client Platform
(kurz RCP) und basiert auf dem OSGi-Standard. Sowohl Eclipse als auch die Plugins sind
vollständig in Java implementiert. Als GUI-Framework zur Erstellung der grafischen Oberfläche wurde SWT (Standard Widget Toolkit) verwendet. Zur Darstellung der GUIKomponenten basiert SWT ähnlich wie AWT (Abstract Window Toolkit) auf den nativen
GUI-Komponenten des jeweiligen Betriebssystems. Eclipse ist daher nicht plattformunabhängig, wird aber für 11 verschiedene Systeme und Architekturen bereitgestellt. Die Plugins
lassen sich durch den Download direkt in Eclipse von einem Update-Server oder durch einfaches Entpacken installieren.
Für die Eclipse-IDE wurden schon zahlreiche Plugins geschrieben, teils Proprietär, teils frei
verwendbar. Primär wird Eclipse als Java-IDE verwendet, es existieren aber etliche Plugins
für andere Sprachen oder zur Entwicklung von OSGi-Bundles. Dazu zählt vor allem das
CDT-Projekt (Eclipse C/C++ Development Tooling), das C und C++ unterstützt, jedoch nur
den GNU-C-Compiler abdeckt. Darüber hinaus gibt es auch Plugins für Perl, PHP, Ruby,
Python usw. Diese können auf bequeme Art und Weise über ein Menu in Eclipse eingebunden werden.
Java Wireless Toolkit
Bei der Programmierung von Anwendungsprogrammen für mobile Endgeräte eignet sich die
Verwendung des Java Wireless Toolkit.
Abbildung 1: Hauptmenü des Java Wireless Toolkit
Erstellen Sie mit „New Project“ ein neues Projekt, geben Sie dazu den Namen ihres Programs
und die MIDlet-Klasse an. Es wird daraufhin ein neues Verzeichnis unter C:\WTK25\apps\
erstellt. Darin finden Sie die Verzeichnisse src\ und bin\, in welchen Sie die Quelldateien ablegen (src\), bzw. die erstellten .jar Files finden (bin\). Starten Sie nun Eclipse und geben Sie
als Workspace-Verzeichnis C:\WTK25\apps\ an. Dann können Sie bei der Erstellung eines
neuen Projekts den Namen ihres WTK-Projekts angeben und Eclipse übernimmt die dort vorhandene Verzeichnisstruktur. Erstellen Sie im Unterordner src\ ihre Quelldateien und speichern Sie ihre Arbeit. Kompilieren Sie ihr Projekt mittels Build im Wireless Toolkit.
3
Das Java Wireless Toolkit enthält einen Emulator zum Testen Ihrer Programme ohne ein
Mobiltelefon. Klicken Sie dazu nach dem Kompilieren auf Run. Es öffnet sich ein neues
Fenster mit einem Handy, welches Sie per Maus bedienen können.
Abbildung 2: Der Emulator des Java Wireless Toolkit
Um Ihr Programm auf das Handy zu laden, gehen Sie auf
Project -> Package -> Create Package
Sie finden dann im Unterverzeichnis \bin ein .jar File, welches Sie z.B. per Bluetooth auf das
Handy laden können.
Für eine erste Einführung in die MIDlet-Programmierung sollten Sie sich Kapitel 2 der "Java
Wireless Toolkit Dokumentation" ansehen. Gehen Sie dazu auf
START -> All Programs -> Sun Java Wireless Toolkit 2.5 Beta -> Documentation.
Anhand des dort beschriebenen Beispiels werden wir hier die Grundlagen der MIDlet Programmierung erarbeiten, welche Sie zur Lösung dieser Aufgabe benötigen. Anschließend sollen Sie sich mit der Bluetooth-Funktionalität und den zugehörigen Bibliotheken vertraut machen und diese mittels eines MIDlets auf dem Mobiltelefon realisieren. Ihre Applikation soll
in der Lage sein per Bluetooth mit der Host und den BTNodes zu kommunizieren und die
dort angebotenen Dienste abzufragen und zu nutzen.
MIDlet Programmierung
Anwendungen für das Mobile Information Device Profile (MIDP) heißen MIDlets. Ein oder
mehrere MIDlets bilden eine MIDlet-Suite. Eine MIDlet-Suite ist die kleinste installierbare
Einheit. Wir gehen hier davon aus, dass Sie das MIDlet "TinyMIDlet" aus der Documentation implementiert und im Emulator getestet haben. Wie Sie im Source-Code von Tiny-MIDlet
sehen, erweitert die Klasse TinyMIDlet die Klasse "MIDlet". Jedes entwickelte MIDlet muss
die Basisklasse "MIDlet" erweitern. Wird das MIDlet gestartet, so wird die von Ihnen zu
4
implementierende Funktion startApp() aufgerufen. In dieser Funktion legen Sie fest, was angezeigt werden soll, wenn das MIDlet gestartet wird. Der Befehl
display.setCurrent(mainForm);
bringt dabei die vorher definierte Form "mainForm" zur Anzeige. Der Inahlt dieser Startseite
kann alternativ auch bereits im Konstruktor Ihrer Klasse festgelegt werden. Den Befehl zur
Anzeige müssen Sie jedoch in der Funktion startApp() absetzen. Der Befehl
Command exitCommand = new Command("Exit", Command.EXIT, 0);
fügt der Startseite den Befehl "Exit" hinzu. Als Argumente besitzt der Konstruktor Command
1. den Namen des Befehls,
2. den Commando-Typ und
3. die Priorität.
Hierbei gilt, je kleiner die Zahl im Feld Priorität, desto höher die Priorität. Des Weiteren, bedeutet eine höhere Priorität (kleinere Zahl), dass dieser Befehl für den Nutzer schneller zugänglich ist, in einem Menü also mit weniger "Klicks" zu erreichen ist. Es empfiehlt sich bei
sehr wichtigen oder vorrangigen Befehlen, wie "EXIT" oder "Cancel" eine höhere Priorität
zu wählen, um deren Ausführung zu garantieren.
Wählt der Benutzer einen Befehl aus, so wird im MIDlet die Funktion
public void commandAction(Command c, Displayable s)
aufgerufen. Diese Funktion stammt aus dem Interface CommandListener welches von unserer Klasse implementiert wird. Um ein Interface zu implementieren, muss jede im Interface
enthaltene Funktion in der implementierenden Klasse definiert werden. Oben genannte Funktion bekommt als Parameter c den abgesetzten "Command" mit dessen Hilfe das Verhalten
des MIDlets auf Benutzerinteraktionen gesteuert wird. Der Parameter Displayable s beinhaltet die aktuell angezeigte Seite. Aus ihr lässt sich unter anderem herauslesen, welcher MenüEintrag bei Absetzen des Commands c markiert war. Da das MIDlet das Interface implementiert, muss hier festgelegt werden, wie sich die Applikation bei verschiedenen Benutzerangaben verhalten soll.
Einige Funktionen, welche Sie im Laufe der nächsten Aufgaben benutzen werden, erfordern,
dass sie in einem neuen Thread ausgeführt werden. Es empfiehlt sich, die Verwendung einer
weiteren Klasse die für die Ausführung der Bluetooth-Funktionaltät zuständig ist und problemlos in mehreren Instanzen (Threads) gestartet werden kann. Sehen Sie sich hierzu das
Beispiel BluetoothDemo aus dem Wireless Toolkit an.
5
Bluetooth Programmierung
Anhand des Beispiels BluetoothDemo werden Sie nun die Grundlagen der BluetoothVerwendung in Java kennenlernen. Im Source-Folder der BluetoothDemo finden Sie fünf
Dateien.
•
DemoMIDlet
•
GUIImageCient
•
GUIImageServer
•
BTImageClient
•
GUIImageClient
Die Klasse DemoMIDlet ist das MIDlet der Anwendung, GUIImageCient und GUIImageServer sind client- und serverseitig jeweils zur Verarbeitung und Anzeige der in BTImageClient
bzw. BTImageServer per Bluetooth empfangen Daten zuständig. BTImageClient wird von
GUIImageClient aufgerufen und dient der Suche nach Bluetooth-Geräten in der Umgebung
(Inquiry), der Suche nach Bildern, welche ein gefundenes Gerät bereitstellt und den BilderDownload. BTImageServer stellt nicht sichtbar für den Nutzer die Bluetooth-Funktionaltät
bereit, antwortet auf Anfragen eines Clients und sendet das ausgewählte Bild per Bluetooth
an einen Client.
Die Klasse BTImageClient implementiert Runnable und DiscoveryListener.
Durch die Implentierung von Runnable wird bei Starten eines Threads die Funktion run()
ausgeführt.
Durch den DiscoveryListener können Bluetooth-Anfragen wie searchDevices oder searchServices gestartet und die dadurch entstehenden Daten verarbeitet werden. Auf der Seite Java
Reference/API finden Sie die API zur Bluetooth-Programmierung in Java.
Zur Suche nach Bluetooth-Geräten in der Umgebung wird ein DiscoveryAgent benutzt. Dieser erlaubt das Suchen nach Geräten und nach Services. Zum Suchen nach Geräten wird die
Methode startInquiry benutzt. Sie erwartet folgende Argumente:
1. int accessCode bestimmt den Typ der Inquiry. Wir verwenden: DiscoveryAgent.GIAC.
2. DiscoveryListener listener bestimmt den Listener Thread welcher die gefundenen Geräte empfängt und verarbeitet
Das Interface DiscoveryListener bietet eine Möglichkeit, die durch eine Inquiry empfangenen
Daten zu verarbeiten. Dazu müssen Sie die Funktion deviceDiscoverd implementieren und
die übergebenen Argumente RemoteDevice btDevice und DeviceClass cod (letztere werden
Sie nicht zwingend benötigen) in Klassenvariablen speichern und weiterverarbeiten.
Abnahmekriterien des Mobiltelefons
Das Kapitel 8 des Pflichtenhefts betrachtet die Kriterien, unter welchen das System nach der
Entwicklung getestet und validiert wird. Unter Validierung (Validation) wird die Eignung
beziehungsweise der Wert einer Software bezogen auf ihren Einsatzzweck verstanden. Um-
6
gangssprachlich formuliert wird die Frage "Bauen wir das richtige Produkt?" beantwortet.
(Lit.: Balzert S. 101) Es wird also die Effektivität der Entwicklung sichergestellt.
Im Zusammenhang mit unserem Projekt wird die Validierung der Anforderungsdefinition
bzw. dem Abnahmetest zugeordnet. Insofern ist unter der Validierung die Überprüfung der
Eignung der Anforderungsdefinition mit den ursprünglichen Zielen des Kunden zu verstehen.
Diese Validierung wird dann durch vorgeplante und in Pflichtenheft beschriebene Tests
durchgeführt.
Tests sind dynamischen Maßnahmen, die eine Ausführung der Software erfordern (Bsp.
Überdeckungstest), und können als ein Teil der Quälitätsmaßnahme betrachtet werden. Es
gibt verschiedene Definitionen für Test. Nach ANSI/IEEE Std. 610.12-1990 ist Test "the
process of operating a system or component under specified conditions, observing or recording the results and making an evaluation of some aspects of the system or component."
Die folgende Aspekte sollen beachtet werden:
•
Tests soll man unter der Annahme planen, dass Fehler gefunden werden können. Deshalb ist ausreichend Zeit dafür einzuplanen.
•
Jede Anforderung muss getestet werden, ansonsten ist das Testen unvollständig.
•
Die Anzahl und Komplexität der Testfälle muss ausreichend sein. Die Details dazu
werden in der Regel im Softwareentwicklungsprozess festgelegt.
Wir schreiben in dieser Aufgabe die Abnahmekriterien bzw. die Tests die durchgeführt werden sollen, um die bis hierher beschriebene Funktionalitäten zu überprüfen. Außerdem, sollen die Tests auch Ausnahmesituationen überdecken. Zum Beispiel, soll ein Test geplant
werden, der beschreibt wie das System reagiert, wenn eine unbekannte Antwort auf eine gesendete Anfrage empfangen wird.
Anhang
Literatur und Quellen
[1] http://java.sun.com/products/sjwtoolkit/download-2_5.html
[2] http://java.sun.com/javame/reference/apis.jsp
[3] H. Balzert: Lehrbuch der Software-Technik. Bd.2. Software-Management, SoftwareQualitätssicherung, Unternehmensmodellierung. Spektrum Akademischer Verlag, Heidelberg
1998.
[4] http://www.eclipse.org
Herunterladen