Lead
Softwareentwickler verbringen typischerweise mehr Zeit damit, Code zu analysieren, als neuen Code zu schreiben. In diesem Projekt untersuchen wir verschiedene Ansätze, um Entwickler bei alltäglichen Entwicklungsaufgaben zu unterstützen.

Lay summary
Entwickler investieren normalerweise viel Zeit in die Suche nach projektspezifischen Informationen, hauptsächlich weil existierende Entwicklungswerkzeuge sich auf das Schreiben von Code konzentrieren, anstatt existierend Software zu analysieren. Anstatt Entwickler auf Emailverteiler und Internetsuchen zu verweisen, wollen wir Entwicklertools soweit erweitern, dass sie die richtigen Informationen zur richtigen Zeit zur Verfügung stellen.

Ein anderes Problem ist die Schwierigkeit, eine momentan entwickelte Applikation mit den eigentlichen Anforderungen in Beziehung zu bringen. Wir plannen, Wege zu untersuchen, wie man Softwaresysteme mit “Ausführbare Domänenmodelle” (“Executable Domain Models”) verbinden kann, d.h. eine Simulation basierend auf den abgebildeten Entitäten der realen Welt. Wir glauben, dieser Ansatz vereinfacht es, Softwaresysteme auf einem aktuellen Stand zu halten, und die Verbindung zwischen Software und deren Anforderungen aufrecht zu erhalten.

Softwarequalität kann für unterschiedliche Arten von Software auf verschiedene Weise definiert werden. Entwickler sind oft überfordert mit den mannigfaltigen Qualitätsanforderungen an moderene Softwaresysteme, wie zum Beispiel die Sicherheit von mobilen Applikationen, oder die gebräuchlichen Konventionen von Softwarebibliotheken aus externen Quellen. Ein pragmatischer Ansatz ist zum Beispiel sogenannte “Code Smells” (Software Gerüche) in Software zu entdecken, und Entwickler auf etwaige Verstösse 
aufmerksam zu machen. Damit dies gut funktioniert, muss es i) einfach sein, “Code Smells” zu entdecken, und ii) Warnungen zu Verstössen müssen klar aufzeigen, wie diese zu beheben sind.

Ausserdem wollen wir Entwickler dabei unterstützen, Code auf neue Platformen zu migrieren. Ein grosser Teil der Zeit, in der Software entwickelt wird, wird nicht für die Implementierung neuer Funktionen aufgewendet, sondern damit, existierenden Code mit neuen Softwarebibliotheken und -platformen kompatibel zu machen. Wir stellen uns einen Ansatz vor, bei dem Platformen die Werkzeuge gleich mitliefern, welche benötigt werden, um alten Code voll- oder teilautomatisiert auf die neue Platform zu migrieren.