ML zur Rettung: AI Developer Tools

Maschinelles Lernen durchdringt weiterhin die unterschiedlichsten Bereiche menschlichen Handelns, und ein technologischer Bereich wie die Softwareentwicklung könnte natürlich keine Ausnahme sein. Laut der Prognose des KI- und Maschinellen Lernspezialisten Sergey Markov, die in der Vorlesung „Ergebnisse der KI-2019“ geäußert wurde , wird 2020 eine große Anzahl von Entwicklungswerkzeugen mit maschinellem Lernen erscheinen. Dies führte mich zu der Idee, dass einige dieser Tools jetzt auf dem Markt verfügbar sein sollten - können sie dann dem üblichen Webentwickler, der in Java, Python und JS schreibt, "zu Hause" helfen? 

Mit Blick auf die Zukunft werde ich sagen, dass es derzeit leider keine offenen Lösungen gibt, die zumindest einen gewissen "Kampf" -Code generieren können. Am nächsten kam Bayouund DeepCoder, aber diese Projekte sind immer noch zu roh. In verwandten Bereichen wie der automatischen Vervollständigung, der statischen Analyse und der Testgenerierung sind größere Fortschritte zu verzeichnen. Ich werde darüber im Artikel sprechen.



Kite - intelligente automatische Vervollständigung und integrierte Dokumentation in der Python-IDE


Website: https://kite.com/
Preis: Völlig kostenlos.

Plugin zur Beschleunigung des Code-Schreibens mithilfe der intelligenten automatischen Vervollständigung. Kite indiziert die Codebasis des Projekts, dh es werden die relevantesten Tipps angezeigt. Zusätzlich zur automatischen Vervollständigung selbst können Sie bei Bedarf die integrierte Dokumentation mit Codebeispielen für über 800 Bibliotheken mit einem Klick öffnen (am nützlichsten für Bibliotheken wie Numpy oder Pandas). Einmal pro Woche wird ein Bericht mit Statistiken über die Verwendung der automatischen Substitutionsfunktion an die E-Mail gesendet. 
 

Drachenvorschläge (mit einem Symbol gekennzeichnet) sind viel relevanter als einheimische. Ein Popup mit Dokumentation zeigt Ihnen, was auf kwargs übertragen werden kann

Kite hat früher kleine Codeteile an den Server gesendet, was aus Sicherheitsgründen für viele nicht geeignet ist, aber gute Nachrichten! - Jetzt hat Kite diese Praxis aufgegeben und die gesamte Analyse findet vor Ort statt. Das Plug-In ist sehr benutzerfreundlich - es ist einfach zu installieren und funktioniert schnell, ohne das System zu laden. Kite unterstützt die meisten gängigen IDEs: Idea, PyCharm, Sublime, Vim, Vs-Code, Spyder und Atom.


Fazit: Vielleicht das kampfbereiteste Projekt in der Auswahl. Ich empfehle jedem, der in Python schreibt.

Für andere Sprachen gibt es ähnliche Produkte - Codota für Java oder TabNine, das 22 Sprachen unterstützt. Ich hatte keine Zeit, sie auszuprobieren, aber es scheint, dass Codota konservativere Hinweise bietet, während TabNine (für Java) ganze Codeteile einschließlich Variablennamen (manchmal ohne Kontext) anbietet und auf den Punkt kommt.

DeepCode - ein statischer Code-Analysator mit Schwerpunkt auf der Suche nach Sicherheitslücken


Website: https://www.deepcode.ai/
Preis: Die Cloud-Version ist kostenlos für OpenSource-Projekte und -Teams für bis zu 30 Personen. Es gibt eine selbst gehostete Option für GitLab und BitBucket Enterprise, der Preis ist verhandelbar.

Wie die Entwickler treffend formulierten, ist DeepCode eine Grammatik für Code. Der Zweck besteht darin, dem Entwickler beim Erkennen von Fehlern und Schwachstellen im Code zu helfen. Die selbst gehostete Lösung wird in Form eines Docker-Containers geliefert, über Hooks in das Versionskontrollsystem integriert und in buchstäblich 10 Minuten konfiguriert. Ein Bot ist auch verfügbar, um Pull-Anfragen zu überprüfen. Deklarierte Unterstützung für Java, Python, JavaScript und TypeScript.


Beispiel für eine DeepCode-Empfehlung.

Eindrücke von der Verwendung: Sehr zufrieden mit dem geringen Prozentsatz falsch positiver Ergebnisse. Alle gefundenen Probleme waren real und wurden aus Gründen, die über die Kontrollqualität hinausgingen, nicht ausgelöst (Code mit Fehlern wurde nicht gestartet, unsicherer Code verwendete keine Benutzereingaben). Leistungswarnungen sehen auch ziemlich vernünftig aus. Die Anzahl der erkannten Probleme im Vergleich zum FineBugs Java Code Analyzer oder demselben PVS-Studio scheint unbedeutend - 200 gegen 2-4 Tausend. Ich weiß nicht, ob ich das als Plus betrachten soll, aber mindestens 200 Teile können wirklich auseinander genommen werden, was nicht über viertausend gesagt werden kann. 


Der Bot überprüft jede Pull-Anfrage

Fazit: Wenn Sie bei der Arbeit mit Lintern immer über die Anzahl der Fehlalarme verärgert waren, sollten Sie DeepCode ausprobieren. Dies ist auch eine großartige Möglichkeit, einen Beitrag zu Open Source zu leisten: Geben Sie das Projekt selbst heraus, führen Sie den Test durch - und ein paar nützliche Pull-Anfragen in Ihrer Tasche.

DiffBlue - Unit Test Generator für Java 


Website: https://www.diffblue.com/ 
Preis: 3375 USD pro Monat für ein Team von 25 Personen. Ein kostenloser Tarif für den individuellen Gebrauch ist noch in Planung.

Dieses Produkt sieht in der Auswahl am ehrgeizigsten aus. Ein britisches Startup im vergangenen Jahr, das von Goldman Sachs 20 Millionen Investitionen erhalten hat. Wenn ich anfangs nach etwas gesucht habe, das Code für Tests generiert, generiert DiffBlue Tests für Code mit der Fähigkeit, in CI eingebettet zu werden. Das Produkt bietet eine gute Integration in die Spring Boot-Testinfrastruktur. Arbeitet mit Gradle, Maven, testng, Junit.

Der Entwickler kündigte zwei Betriebsarten an: 

  • Wesentlich: Tests werden durch Methodensignatur generiert
  • Erweitert: Der Methodenkörper wird ebenfalls berücksichtigt und für jeden Zweig im Code werden Tests generiert. 

DiffBlue wird als CLI-Dienstprogramm zum Einbetten in CI oder als Plugin für IntelliJ IDEA zum Generieren von Tests während der Entwicklung bereitgestellt.


DiffBlue selbst tränkt Klassen, generiert Fixtures und Assertions.
 
Bei realen Projekten erwies sich DiffBlue als nicht eindeutig. 

  1. . — «». , , .   Gradle . . jar' , jcover.config. c Serializable, Active Record . — 3000 (sic!), coverage 3%.
  2. Fall zwei, viel erfolgreicher. Zustandsloser Microservice beim Spring Boot. Laut den Entwicklern widmen sie viel Zeit der Unterstützung von Spring-Boot-Anwendungen. Alles funktionierte fehlerfrei, die Abdeckung stieg von 28 auf 42 Prozent, jedoch nur gemäß den Anweisungen. In den Filialen stieg die Abdeckung nur um 6% von (41% auf 47%). Dies liegt daran, dass viele Tests von Gettern oder Setzern getestet wurden. Vielleicht wären die Ergebnisse im erweiterten Modus noch interessanter.


Es passiert auch. Für eine Klasse mit einem Dutzend öffentlicher Methoden und komplexer Logik stellte sich heraus, dass es sich um einen Dummy handelte.

Fazit: Wenn alles wie geplant funktionieren würde, wäre es sehr cool und sinnvoll, aber das ist noch ein langer Weg. Version 0.1 zeigt, dass die Jungs noch vorne sind.

Fazit


Die Verwendung von KI für die Programmierung gewinnt zunehmend an Bedeutung, aber die Branche steht noch am Anfang ihrer Reise. Es gibt viele mögliche Anwendungen: In einigen gab es bereits Wettbewerb, in anderen wurden bisher nur einzelne Produkte vorgestellt. Das wichtigste und offensichtlichste Ziel - die Generierung des Codes selbst - wurde noch von niemandem übernommen, aber es ist bereits in der Lage, die Entwicklungsgeschwindigkeit zu erhöhen, die Anzahl der Fehler im alten Code zu verringern und das Auftreten neuer Fehler zu verhindern.

All Articles