Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Materialien zum Buch
20
Vorwort
21
TEIL I Überblick
23
1 Überblick
25
1.1 Berufswunsch Softwareentwickler
25
1.1.1 Sind Softwareentwickler besondere Informatiker?
27
1.1.2 Arbeitsmarktsituation und Verdienstmöglichkeiten
30
1.2 Über dieses Buch
32
1.3 Quellen der zitierten Statistiken
37
2 Programmierung als Kern der Softwareentwicklung
39
2.1 Die Programmierung
39
2.2 Paradigmen der Softwareentwicklung
43
2.3 Objektorientierte Programmentwicklung
44
2.3.1 Objektorientierung im Überblick
45
2.3.2 Objektorientierte Konzepte im Detail
49
2.3.3 Objektorientierung und Wiederverwendung
56
2.3.4 Visualisierung: Objektorientierung und UML
60
2.4 Programmiersprachen
66
2.4.1 Historische Entwicklung und sprachliche Vielfalt
66
2.4.2 Die Systematik der Programmiersprachen
70
2.5 Essenzielle Sprachmerkmale
76
2.5.1 Kommentare
77
2.5.2 Operatoren und Vergleiche
81
2.5.3 Kontrollstrukturen
82
2.5.4 Objektorientierung
93
2.6 Fazit und Ausblick
106
2.7 Literatur und Links
107
2.7.1 Lehrbücher zum Einstieg
107
2.7.2 Bücher zur weiteren Vertiefung und zum Nachschlagen
108
2.7.3 Interessante Onlinequellen
108
3 Algorithmen und Datenstrukturen
109
3.1 Algorithmen als Kernelemente des Programms
110
3.1.1 Wichtige Klassen von Algorithmen
113
3.1.2 Komplexität von Algorithmen
113
3.2 Entwurf von Algorithmen
115
3.2.1 Vorgehensweise
116
3.2.2 Visualisierung des Ablaufs von Algorithmen
118
3.2.3 Fallbeispiele
124
3.3 Sortieren und Suchen als Basisalgorithmen
128
3.3.1 Sortieren – das Wichtigste im Überblick
129
3.3.2 Suchalgorithmen im Überblick
138
3.4 Elementare Datenstrukturen
148
3.4.1 Datenobjekte
149
3.4.2 Systematik von Datenobjekten und Datentypen
151
3.5 Zusammenfassung und Ausblick
170
3.6 Literatur und Links
172
3.6.1 Lehrbücher zum Einstieg
172
3.6.2 Bücher zur weiteren Vertiefung und zum Nachschlagen
173
3.6.3 Interessante Onlinequellen
173
TEIL II Der Softwarelebenszyklus
175
4 Softwareprojekte professionell planen
177
4.1 Der Wasserfall
178
4.1.1 Analyse
179
4.1.2 Entwurf
181
4.1.3 Implementierung
181
4.1.4 Test
182
4.1.5 Betrieb und Wartung
183
4.1.6 Kritische Betrachtung
183
4.2 Iterative Entwicklung – schrittweise zum Ziel
183
4.3 Das V-Modell – eine Struktur hauptsächlich für Projekte der öffentlichen Hand
185
4.4 Bessere Risikobeherrschung durch das Spiralmodell
186
4.5 Agile Ansätze – der Komplexität und Unsicherheit mit Flexibilität begegnen
187
4.5.1 Die Idee der agilen Projektdurchführung
190
4.5.2 Extreme Programming
192
4.5.3 Scrum
193
4.6 Softwareentwicklung und die Schnittstellen zum Projektmanagement
199
4.6.1 Personen und Rollen in IT-Projekten
203
4.7 Ist Agilität heute alternativlos?
207
4.8 Literatur und Links
209
4.8.1 Lehrbücher zum Einstieg
210
4.8.2 Bücher zur weiteren Vertiefung und zum Nachschlagen
210
4.8.3 Interessante Onlinequellen
210
5 Die Anforderungsanalyse – Startpunkt der Entwicklung
211
5.1 Überblick und Zielstellung
211
5.2 Ausgangssituation und Notwendigkeit
214
5.3 Anforderungen ermitteln
218
5.3.1 Quellen von Anforderungen
219
5.3.2 Anforderungen erforschen
220
5.3.3 Arten von Anforderungen
226
5.3.4 Verbindlichkeit und Priorität von Anforderungen
229
5.4 Klassische Anforderungsanalyse
237
5.4.1 Lastenheft
239
5.4.2 Pflichtenheft
244
5.4.3 Grafische Notation als Hilfsmittel
245
5.5 Agile Anforderungsanalyse
248
5.5.1 Epic – User Story – Task
249
5.5.2 Agil vs. klassisch
250
5.6 Toolunterstützung
252
5.7 Fazit
256
5.8 Literatur und Links
256
5.8.1 Lehrbücher zum Einstieg
257
5.8.2 Bücher zur weiteren Vertiefung und zum Nachschlagen
257
5.8.3 Interessante Onlinequellen
257
6 Der Entwurf des Softwaresystems
259
6.1 Die Softwarearchitektur als Basis für Erfolg und Wartbarkeit eines Softwaresystems
260
6.1.1 Ziele und Auswahlkriterien für eine Architektur
261
6.1.2 Architekturprinzipien
263
6.2 Architekturparadigmen
266
6.2.1 Monolithisches IT-System
266
6.2.2 Verteilte Architektur
268
6.2.3 Client-Server-Architektur
270
6.2.4 Serviceorientierte Architektur
271
6.2.5 Microservices
275
6.2.6 Webarchitektur
286
6.2.7 Middleware
290
6.3 Entwurfsmuster als Baupläne
291
6.3.1 Fassaden-Muster
293
6.3.2 Model-View-Controller-Muster
294
6.4 Entwurfsunterstützung durch grafische Modellierung
297
6.4.1 Das Komponentendiagramm
298
6.4.2 Das Paketdiagramm
299
6.4.3 Das Verteilungsdiagramm
300
6.5 Weitere Entwurfsentscheidungen
301
6.5.1 Softwaretyp
301
6.5.2 Technologie
303
6.6 Erfolgreiche Entwürfe mithilfe von Prototypen
304
6.6.1 Arten von Prototypen
305
6.6.2 Wege und Tools zum Prototyp
307
6.7 Zusammenfassung und Fazit
312
6.8 Literatur und Links
313
6.8.1 Lehrbücher zum Einstieg
313
6.8.2 Bücher zur weiteren Vertiefung und zum Nachschlagen
313
6.8.3 Interessante Onlinequellen
313
7 Die Implementierung schafft den Kern der Anwendung
315
7.1 Die Entwicklung der Benutzerschnittstelle
316
7.1.1 Benutzeroberflächen in Java
317
7.1.2 Benutzeroberflächen auf Basis der Beschreibungssprache XAML
334
7.1.3 Im Turbogang zum User Interface: Rapid Application Development
344
7.2 Die Businesslogik umsetzen
346
7.3 Die Datenwelt anbinden
348
7.3.1 Java Database Connectivity
349
7.3.2 Entity Framework
349
7.4 Zusammenfassung und Fazit
351
7.5 Literatur und Links
351
7.5.1 Lehrbücher zum Einstieg
351
7.5.2 Bücher zur weiteren Vertiefung und zum Nachschlagen
352
7.5.3 Interessante Onlinequellen
352
8 Testen als Voraussetzung für fehlerarme Software
353
8.1 Zur Notwendigkeit von Softwaretests
354
8.2 Testgetriebene Entwicklung
355
8.3 Ein Überblick über wichtige Testarten
357
8.4 Testmethoden
361
8.4.1 Statische Tests
361
8.4.2 Dynamische Tests
364
8.5 Testebenen
369
8.5.1 Komponententests
371
8.5.2 Integrationstests
375
8.5.3 Systemtests
376
8.5.4 Abnahme- und Nutzertests
377
8.6 Technik des Testens
387
8.6.1 Tools
387
8.6.2 Testautomation
389
8.7 Fazit und Zusammenfassung
391
8.8 Literatur und Links
391
9 Distribution – das Produkt muss zum Kunden
393
9.1 Die Softwaredistribution im Überblick
394
9.1.1 Die Merkmale von Software und ihre Auswirkungen auf den Vertrieb
394
9.1.2 Vertragliche und lizenzrechtliche Bestimmungen
395
9.1.3 Vertriebswege
397
9.1.4 Erlösmodelle
399
9.2 Automatisierte Softwareverteilung
405
9.3 Verbesserte Zusammenarbeit durch DevOps
408
9.3.1 Probleme durch eine künstliche Trennung der Zuständigkeiten
408
9.3.2 Verbesserte Zusammenarbeit
410
9.4 Die Nutzung der App Stores
411
9.4.1 Vor- und Nachteile eines App Store
412
9.4.2 Programminterne Stores
414
9.4.3 Vermarkungsstrategien
415
9.4.4 Präsentation im Store
416
9.5 Die Technik der Softwarebereitstellung
417
9.5.1 Software für den Desktop
418
9.5.2 Apps für mobile Systeme
422
9.5.3 Softwarebereitstellung für Webapplikationen mithilfe der Cloud
424
9.5.4 Weitere Technologien – Container
434
9.6 Fazit
437
9.7 Literatur und Links
437
9.7.1 Lehrbücher zum Einstieg
437
9.7.2 Bücher zur weiteren Vertiefung und zum Nachschlagen
438
9.7.3 Zeitschriftenbeiträge
438
9.7.4 Interessante Onlinequellen
438
10 Vom Altsystem zur zeitgemäßen Anwendung
439
10.1 Technologien im Wandel
440
10.2 Notwendigkeit einer Softwaremigration
442
10.3 Ziele einer Softwaremigration
444
10.4 Planung der Migration
444
10.5 Migrationsstrategien
447
10.6 Arten der Migration
451
10.7 Wirtschaftlichkeitsbetrachtungen
453
10.8 Stolpersteine
454
10.9 Eine Fallstudie
455
10.9.1 Der Status quo
456
10.9.2 Das Migrationsziel: eine moderne Webanwendung
457
10.9.3 Einen Migrationsansatz auswählen
459
10.9.4 Webapplikationen mit Wisej
461
10.9.5 Die technische Migration
467
10.10 Literatur und Links
473
10.10.1 Lehrbücher zum Einstieg
473
10.10.2 Zeitschriftenbeiträge für die weitere Vertiefung
473
10.10.3 Interessante Onlinequellen
473
TEIL III Technologien und Methoden
475
11 Webtechnologien
477
11.1 Einführung
477
11.2 Zusammenspiel von HTML, CSS und JavaScript
478
11.3 Die Struktur einer Webseite mit HTML
480
11.4 HTML Basics
481
11.5 Das Layout und das Design einer Webseite mit CSS
487
11.5.1 Selektoren
490
11.5.2 Vererbung
494
11.5.3 Das Box-Modell
496
11.5.4 Positionierung und Layout
499
11.6 Logik und Interaktion mit JavaScript
504
11.6.1 Die Sprachfeatures von JavaScript im Überblick
507
11.6.2 Manipulation des DOM
512
11.6.3 Die Nutzung von APIs
516
11.7 Klassenbibliotheken und Frameworks
519
11.7.1 Bibliothek vs. Framework
519
11.7.2 Vorteile von Webframeworks
520
11.7.3 Nachteile von Webframeworks
521
11.7.4 Designprinzipien und Funktionsweise von Webframeworks
522
11.7.5 Arten von Webframeworks
525
11.7.6 Bekannte Webbibliotheken und Frameworks
525
11.8 Fazit
529
11.9 Literatur und Links
529
11.9.1 Lehrbücher zum Einstieg
529
11.9.2 Interessante Onlinequellen
530
11.9.3 Sonstige Quellen
530
12 Apps für mobile Systeme
531
12.1 Arten von Apps
533
12.2 Native Apps
535
12.2.1 Apps für Android programmieren
537
12.2.2 Apps für iOS programmieren
552
12.3 Web-Apps
553
12.4 Hybride Apps
555
12.5 Plattformübergreifende Ansätze
557
12.5.1 Mobile Apps mit Xamarin
559
12.5.2 Mobile Apps mit RAD Studio
564
12.6 Auswahlkriterien
571
12.6.1 Kriterien und Anforderungen
571
12.6.2 Entscheidungsfindung
576
12.7 Sensoren
577
12.7.1 Kamera
578
12.7.2 Fingerabdrucksensor
578
12.7.3 GPS-Sensor
580
12.7.4 Rotationssensor
582
12.7.5 Näherungssensor
583
12.7.6 Beschleunigungssensor
583
12.8 Emulation und Simulation
584
12.8.1 Emulation von Android
587
12.8.2 Simulation von iOS
590
12.9 Backend as Service
591
12.9.1 BaaS-Dienstleister
593
12.9.2 Backend für eine App bereitstellen
595
12.9.3 App ruft Backend – ein Beispiel
596
12.10 Fazit
599
12.11 Literatur und Links
599
12.11.1 Lehrbücher zum Einstieg
599
12.11.2 Bücher zur weiteren Vertiefung und zum Nachschlagen
600
12.11.3 Interessante Onlinequellen
600
13 Plattform- und geräteübergreifende Entwicklung
601
13.1 Nutzerinnen und Nutzer im Fokus
602
13.2 Ansätze für die plattformübergreifende Entwicklung
604
13.2.1 Java
605
13.2.2 RAD Studio, Delphi, C++ Builder mit FireMonkey
608
13.2.3 Qt
609
13.2.4 Ansätze auf der Basis von .NET
611
13.2.5 Web-Apps auf den Desktop
611
13.2.6 Auswahlkriterien
612
13.3 Ein Beispiel mit RAD Studio
614
13.4 Fazit
617
13.5 Literatur und Links
618
13.5.1 Lehrbücher zum Einstieg
618
13.5.2 Bücher zur weiteren Vertiefung und zum Nachschlagen
618
13.5.3 Interessante Onlinequellen
618
14 Parallelprogrammierung
619
14.1 Systemtechnische Ebene
620
14.1.1 Prozesse und Threads
623
14.1.2 Zustände von Prozessen
625
14.2 Anwendungsebene
626
14.2.1 Probleme und Erfolgsbestimmung
632
14.3 Programmiertechnische Ebene
634
14.3.1 Konzepte der Task Parallel Library
635
14.3.2 Reaktionsfähigkeit mithilfe von async und await
637
14.4 Zusammenfassung
638
14.5 Literatur und Links
638
14.5.1 Lehrbücher zum Einstieg
639
14.5.2 Bücher zur weiteren Vertiefung und zum Nachschlagen
639
14.5.3 Interessante Onlinequellen
639
15 Kundenzufriedenheit durch Nutzerorientierung
641
15.1 Die Nutzer im Fokus
644
15.1.1 Development versus Design
645
15.1.2 Personas – was sind sie?
647
15.2 Benutzerschnittstellen im Wandel
648
15.2.1 Command-Line Interface
649
15.2.2 Graphical User Interface
650
15.2.3 Natural User Interface
657
15.2.4 Voice User Interface
658
15.2.5 Organic User Interface
659
15.3 Gestaltung von Benutzeroberflächen
660
15.3.1 Objektive Merkmale und subjektives Empfinden
662
15.3.2 Softwareergonomie
665
15.3.3 Designrichtlinien als Handlungsrahmen
666
15.4 Literatur und Links
668
15.4.1 Lehrbücher zum Einstieg
668
15.4.2 Weitere Buchquellen
669
15.4.3 Zeitschriftenartikel
669
15.4.4 Interessante Onlinequellen
669
16 Datensicherheit und Datenschutz
671
16.1 Begriffe und Angrenzungen
674
16.2 Überblick über die Datenschutz-Grundverordnung
676
16.3 Datenschutz und Cloud-Computing
679
16.4 Technischer Datenschutz
681
16.4.1 Sichere Kommunikation durch Verschlüsselung
681
16.4.2 Identifikation, Authentifikation und Autorisierung
688
16.5 Fazit
697
16.6 Literatur und Links
697
16.6.1 Lehrbücher
698
16.6.2 Zeitschriftenartikel
698
16.6.3 Interessante Onlinequellen
698
17 Grundlagen der Datenhaltung
699
17.1 Datenbank – ein Ort, um Ordnung zu halten
699
17.1.1 Anforderungen an eine Datenbank
702
17.1.2 Überblick über Datenbanksysteme
703
17.2 Phasen der Datenbankentwicklung
708
17.3 Relationale Datenbanken
711
17.3.1 Das Entity-Relationship-Modell (ER-Modell)
711
17.3.2 Alles eine Frage des Schlüssels
715
17.3.3 Normalisierung der Datenbankstruktur
721
17.4 NoSQL-Datenbanken
726
17.4.1 Key-Value-Datenbanksysteme
727
17.4.2 Dokumentenorientierte Datenbanksysteme
729
17.4.3 Column-Family-Datenbanksysteme
731
17.4.4 Graph-Datenbanken
732
17.5 Fazit und Ausblick
735
17.6 Literatur und Links
735
17.6.1 Lehrbücher zum Einstieg
735
17.6.2 Bücher und Quellen zur weiteren Vertiefung und zum Nachschlagen
735
17.6.3 Interessante Onlinequellen
736
18 Werkzeugunterstützung
737
18.1 Die Rolle von Werkzeugen
738
18.2 Integrierte Entwicklungsumgebungen als Multifunktionswerkzeuge
739
18.2.1 Bestandteile einer integrierten Entwicklungsumgebung
739
18.2.2 Wichtige integrierte Entwicklungsumgebungen im Überblick
742
18.3 Versionsverwaltungen als Voraussetzung für eine erfolgreiche Entwicklung
744
18.3.1 Varianten der Versionsverwaltung
745
18.3.2 Vergleich zentrale und verteilte Versionsverwaltung
747
18.3.3 Git-Grundlagen
747
18.4 Weitere Softwaretools für die Entwicklung
754
18.4.1 Tools für die modellgetriebene Entwicklung
754
18.4.2 Tools für die Datenmodellierung
756
18.4.3 Einfache Texteditoren
757
18.4.4 Tools für die Koordination der Zusammenarbeit und fürs Projektmanagement
758
18.5 Fazit und Ausblick
758
18.6 Literatur und Links
759
18.6.1 Lehrbücher zum Einstieg
759
18.6.2 Zeitschriftenartikel
759
18.6.3 Interessante Onlinequellen
759
19 Qualitätssicherung und Clean Code Development
761
19.1 Das Verständnis von Softwarequalität
761
19.2 Ansätze zur Bestimmung der Softwarequalität
764
19.2.1 Qualitätseigenschaften nach Boehm
764
19.2.2 Quantifizierung der Qualität nach Gilb
765
19.2.3 Goal Question Metric
766
19.3 Softwarequalität zwischen Nutzen und Kosten
769
19.4 Qualität verbessern
771
19.4.1 Sich stetig weiterentwickeln: kontinuierliche Verbesserung
771
19.4.2 Prozessqualität über alle Entwicklungsschritte
775
19.4.3 Regeln als Handlungsleitfaden
777
19.4.4 Clean Code Development
782
19.4.5 Lästig und unverzichtbar – die Entwicklungsdokumentation
785
19.5 Eine gesunde Fehlerkultur
786
19.5.1 Der Begriff des Fehlers
787
19.5.2 Umgang mit Fehlern
789
19.5.3 Fehlermetriken
791
19.6 Fazit und Zusammenfassung
793
19.7 Literatur und Links
793
19.7.1 Lehrbücher zum Einstieg
794
19.7.2 Bücher zur weiteren Vertiefung und zum Nachschlagen
794
19.7.3 Zeitschriftenartikel
794
19.7.4 Interessante Onlinequellen
794
TEIL IV Trends
795
20 Enterprise Mobile Computing
797
20.1 Einsatzszenarien
798
20.1.1 Mobilisierung bestehender digitaler Geschäftsprozesse
799
20.1.2 Digitale Transformation
800
20.2 Bring Your Own Device
807
20.2.1 Bedeutung und Nutzen einer BYOD-Strategie
808
20.2.2 Problemlage und Anforderungen bei einer BYOD-Strategie
809
20.2.3 Mögliche Szenarien aus Unternehmenssicht
814
20.2.4 Umsetzungsstrategie
815
20.3 Technische Aspekte für Enterprise Mobile Computing
817
20.3.1 Geräteauswahl
817
20.3.2 Enterprise Mobile Device Management
817
20.3.3 Backend as a Service for Enterprise
819
20.4 Fazit und Ausblick
829
20.5 Literatur und Links
829
20.5.1 Bücher zur weiteren Vertiefung und zum Nachschlagen
829
20.5.2 Zeitschriftenbeiträge
830
20.5.3 Interessante Onlinequellen
830
21 Internet of Things
831
21.1 Stand heute und Zukunftsszenarien
832
21.1.1 Exkurs: Wie intelligent ist KI?
836
21.1.2 Vom Eigenbau zum Standard
838
21.2 IoT-Infrastruktur
841
21.2.1 Architektur
841
21.2.2 Netzwerktopologien
842
21.2.3 IoT-Cloud-Services
844
21.2.4 Smart Home – Anwendungsbeispiel einer IoT-Infrastruktur
847
21.3 Hardware auf kleinstem Raum
850
21.3.1 Arduino
850
21.3.2 Raspberry Pi
852
21.4 Fallbeispiel: Windows 10 auf dem Raspberry Pi
854
21.4.1 Anforderungen und Anwendungsarchitektur
855
21.4.2 Überlegungen zur Hardware
857
21.4.3 Überlegungen zum Betriebssystem
858
21.4.4 Windows 10 IoT einrichten
860
21.4.5 Administrieren und konfigurieren
861
21.4.6 Anwendungsarchitektur
862
21.4.7 Entwurf der Software
864
21.5 Fazit und Ausblick
866
21.6 Literatur und Links
867
21.6.1 Lehrbücher zum Einstieg
867
21.6.2 Zeitschriftenbeiträge
867
21.6.3 Interessante Onlinequellen
867
22 Cloud-Computing
869
22.1 Grundlagen des Cloud-Computings
870
22.1.1 Merkmale und Eigenschaften des Cloud-Computings
870
22.1.2 Modelle des Cloud-Computings
872
22.1.3 Nutzungsmodelle des Cloud-Computings
874
22.2 Ökonomische Gesichtspunkte
876
22.2.1 On-Premises- versus Cloud-Computing
877
22.2.2 Kostenbasierter Vergleich
879
22.3 Cloud-Computing als Werkzeug der Softwareentwicklung
881
22.3.1 Cloud-Lösungen für Kommunikation und Datenaustausch
882
22.3.2 Projekt- und Quellcodeverwaltung
882
22.3.3 Monitoring und Bugtracking
884
22.4 Fazit
885
22.5 Literatur und Links
885
22.5.1 Fachbücher
885
22.5.2 Interessante Onlinequellen
885
Index
887