Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Computer, fix' meinen Code (OOP 2020)

Computer, fix' meinen Code (OOP 2020)

Wie wäre es, wenn wir direkt den Code finden könnten, den wir gerade brauchen? Wie wäre es, wenn uns lästige Fehler im Code automatisch beseitigt werden würden? Wie wäre es, wenn wir überhaupt nicht mehr selbst coden müssten?

“Machine Learning on Code” will uns diese und noch mehr Fragen beantworten. Wir werfen einen Blick auf frei verfügbare Werkzeuge, welche Softwareentwickler*innen in ihrer täglichen Arbeit intelligent assistieren können. Dazu blicken wir auch hinter die Fassade unserer zukünftigen, digitalen Entwicklerkollegen*innen.

9f8d7084bb37f5cb2a72796918fc5d2f?s=128

Markus Harrer

February 06, 2020
Tweet

Transcript

  1. 1 O O P 2 0 2 0 , M

    ü n c h e n Computer, fix' meinen Code! Machine Learning on Code in der Praxis Markus Harrer Software Development Analyst @feststelltaste
  2. Vorab 2 Anteil von Machine Learning in diesem Talk 40

    0 Zeit in Minuten 20 Relativer Anteil
  3. Warum dieser Talk? 3 Aufklären, was heute schon möglich ist!

    Nimm‘ das!
  4. Warum dieser Talk? 4 Aufklären, was heute schon möglich ist!

    Aus einer anderen Bewertung meiner Einreichung: „Wenn er das als Ironie meint, dann würde ich den Talk sofort akzeptieren!“ Du bist unbelehr- bar!
  5. Der Schlüsselmoment 5 Security-Bugfix in der Open-Source-Bibliothek „react-components“ https://github.com/buildo/react-components/pull/1367/files

  6. Und wie gefixt? Mit Bots! 6 Völlig autonome Problembehebung

  7. Aber dann… 7

  8. Aber dann… 8

  9. 9 I, For One, Welcome Our New AI Overlords Burkhard

    Neppert, INNOQ
  10. Hintergründe 10 Eine Choreographie vollzogen von Bots Dependabot • Findet

    Security-Issues • Kann Patches dafür erstellen Nemobot • Feiert Pull-Requests mit GIFs (aber unklar, ob echter Bot) Mergify • Nimmt Pull-Requests vor, wenn bestimmte Bedingungen vorliegen https://twitter.com/gabro27/status/1173547934132178944
  11. Wie geht das? 11 GitHub Probots: Vorkonfigurierte Apps zur Erweiterung

    von GitHub https://probot.github.io/
  12. Aber der Reihe nach… 12 Machine Learning Code Machine Learning

    on Code Zusammenfassung 1 2 3 4
  13. Aber der Reihe nach… 13 Machine Learning Code Machine Learning

    on Code Zusammenfassung 1 2 3 4
  14. Der Kontext von Machine Learning 14 ML Roh- daten Algorithmen

    Fea- tures Data Science Data Mining Program- mierung Nach https://vas3k.com/blog/machine_learning/#scroll20
  15. Machine Learning Classical Supervised Classification Regression Unsupervised Clustering Generalization Association

    Reinforcement Learning Ensembles Neuronal Networks / Deep Learning Machine Learning Kategorien 15 Nach https://vas3k.com/blog/machine_learning/
  16. Aber der Reihe nach… 16 Machine Learning Code Machine Learning

    on Code Zusammenfassung 1 2 3 4
  17. Daten in der Softwareentwicklung 17

  18. Aber der Reihe nach… 18 Machine Learning Code Machine Learning

    on Code Zusammenfassung 1 2 3 4
  19. 19 Können uns Computer sagen, ob wir richtig entwickeln?

  20. 20 Generalization

  21. Machine Learning Classical Supervised Classification Regression Unsupervised Clustering Generalization Association

    Reinforcement Learning Ensembles Neuronal Networks / Deep Learning Machine Learning Kategorien Nach https://vas3k.com/blog/machine_learning/ y x z
  22. Machine Learning Classical Supervised Classification Regression Unsupervised Clustering Generalization Association

    Reinforcement Learning Ensembles Neuronal Networks / Deep Learning Machine Learning Kategorien Nach https://vas3k.com/blog/machine_learning/ y x
  23. Fragestellung 23 „ Wie gut passt der fachliche Schnitt zur

    Arbeitsweise der Entwickler*innen?“ Legende A B C A B C Änderungen pro Feature A B C Module passt eher nicht passt vollkommen Details unter https://www.feststelltaste.de/checking-the-modularization-of-software-systems-by-analyzing-co-changing-source-code-files/
  24. Idee 24 Heuristik „Werden Änderungen innerhalb einer Komponente zusammengehörig vorgenommen?“

    • Änderungen => Commits aus Versionsverwaltung • Komponenten => Teil von Dateipfad commit_id filepath #59a26 .../todo/Get.java #59a26 .../todo/New.java #34af9 .../site/Main.java ... ... git log --numstat --format=... 24
  25. Analyse 25 Änderungsmatrix mit Commits für jede Datei => pro

    Datei ein Vektor (=> aber jetzt: reine Mathematik!) #59a26 #35e25 #34af9 ... .../todo/Get.java 1 1 0 ... .../todo/New.java 1 1 0 ... .../site/Main.java 0 0 1 ... ... ... ... ... ... 25
  26. Modellbildung 26 Ähnlichkeitsberechnung => Cosinus-Ähnlichkeit zwischen Vektoren (= Quellcode-Dateien) .../todo/Get.java

    .../todo/New.java .../site/Main.java ... .../todo/Get.java 1 0.8 0.3 ... .../todo/New.java 0.8 1 0 ... .../site/Main.java 0.3 0 1 ... ... ... ... ... ... n x n- dimensionaler Vektorraum
  27. Generalisierung Multidimensionale Skalierung reduziert n Dimensionen auf zwei Dimensionen unter

    Beibehaltung der Abstände + Aus Dateipfad lässt sich Komponente extrahieren • Beispiel: .../todo/Get.java => todo filepath x y .../todo/Get.java 0.14 0.67 .../todo/New.java 0.13 0.70 .../site/Main.java 0.31 0.50 ... ... ... komp todo todo site ... 27
  28. Visualisierung 28 Erzeugung einer graphischen Repräsentation als X-Y-Diagramm Dateien des

    Softwaresystems => Punkte Dateien, die gemeinsam geändert werden => Nähe der Punkte zueinander Komponenten des Softwaresystems => Farben der Punkte y x 28
  29. Ergebnis 29 Änderungskopplung über Modulgrenzen hinweg

  30. 30

  31. 31

  32. 32 Können uns Computer sagen, ob wir richtig entwickeln? Teils!

  33. 33 Können uns Computer sagen, wo wir passenden Code finden?

  34. 34 Neuronal Network

  35. Machine Learning Classical Supervised Classification Regression Unsupervised Clustering Generalization Association

    Reinforcement Learning Ensembles Neuronal Networks / Deep Learning Machine Learning Kategorien 35 Nach https://vas3k.com/blog/machine_learning/ Bild: Mysid Dake, CC BY 1.0, farblich verändert
  36. 36

  37. ================= Example # 30996 ================= Original Input: def tearDown self

    del self user Original Output: clean up the user instance after each test method. ****** Predicted Output ******: clean up after each test =================================================== GitHub Semantic Code Search 37 1. Repräsentationen von Code erlernen… In Tokens über- führter Code Originaler Kommentar Zusammengefasster Kommentar vom trainierten Modell https://github.blog/2018-09-18-towards-natural-language-semantic-code-search/
  38. ================= Example # 30996 ================= Original Input: 0.32 0.54 0.55

    0.72 0.75 0.86 0.85 0.24 0.72 ... Original Output: 0.72 0.52 0.43 0.12 0.54 0.12 0.65 0.23 0.64 ... ****** Predicted Output ******: 0.23 0.55 0.55 0.74 0.73 0.88 0.84 0.26 0.74 ... =================================================== GitHub Semantic Code Search 38 1. … über code / sentence embeddings und Long short-term memory https://github.blog/2018-09-18-towards-natural-language-semantic-code-search/ Möglichst gute Annäherung im gleichen Vektorraum Source Code Doc Summary I code Code Encoder
  39. GitHub Semantic Code Search 39 2. Repräsentationen von Text erlernen

    https://github.blog/2018-09-18-towards-natural-language-semantic-code-search/ read csv into pandas dataframe → reads csv files into a raw object . → 0.72 0.81 … 0.73 0.78 … 0.63 0.93 … I text Text Encoder load csv or json into pandas dataframe →
  40. GitHub Semantic Code Search 3. Code- und Text-Repräsentationen zusammenführen Nach

    https://github.blog/2018-09-18-towards-natural-language-semantic-code-search/ Text 1: „Start web server“ Text 2: „Read a text file into memory“ def read(fname): with open(fname 'r') as f: contents = f.readlines() return contents Shared Vector Space Text 1 Vektor: [0.43, 0.12, 0.05, ...] Text 2 Vektor: [0.14, 0.34, 0.61, ...] Code Vektor: [0.13, 0.44, 0.59, ...]
  41. GitHub Semantic Code Search 4. Passenden Code zur Suchanfrage zurückgeben

    Nach https://github.blog/2018-09-18-towards-natural-language-semantic-code-search/ Text 1: „Start web server“ Text 2: „Read a text file into memory“ def read(fname): with open(fname 'r') as f: contents = f.readlines() return contents Shared Vector Space Text 1 Vektor: [0.43, 0.12, 0.05, ...] Text 2 Vektor: [0.14, 0.34, 0.61, ...] Code Vektor: [0.13, 0.44, 0.59, ...] Berechnung Cosinus-Distanz Text 2 und Code gehoeren zusammen!
  42. 42 Können uns Computer sagen, wo wir passenden Code finden?

    Jo!
  43. Funktional ähnlich: Facebook Aroma 43 Die Aroma Code Recommendation Engine

    findet ähnlichen Code zu gegebenen Code https://ai.facebook.com/blog/aroma-ml-for-code-recommendation/
  44. 44 Können Computer Bugs fixen?

  45. 45 Clustering

  46. Machine Learning Classical Supervised Classification Regression Unsupervised Clustering Generalization Association

    Reinforcement Learning Ensembles Neuronal Networks / Deep Learning Machine Learning Kategorien Nach https://vas3k.com/blog/machine_learning/ y x
  47. Machine Learning Classical Supervised Classification Regression Unsupervised Clustering Generalization Association

    Reinforcement Learning Ensembles Neuronal Networks / Deep Learning Machine Learning Kategorien Nach https://vas3k.com/blog/machine_learning/ y x
  48. Facebook Getafix: Einsatzkontext 48 Quellcode-Basis Sapienz SapFix Infer Getafix Genehmigter

    Bugfix Statische Analyse Bugfix Bugfix Testauto- matisierung Fehlerbericht Bugfix Fehlerbericht https://code.fb.com/developer-tools/getafix-how-facebook-tools-learn-to-fix-bugs-automatically/ Menschlicher Reviewer
  49. Mustererkennung mit Clustering 49 Nach einem Beispiel aus dem Konferenzbeitrag

    „Using Machine Learning for Developer Productivity” A: v.getWidth() B: lst.size() v != null ? v.getWidth() : 0 lst != null ? lst.size() : 0 AB: h0.h1() h0 != null ? h0.h1() : 0 AB Änderungen Abstrakte Muster A B
  50. Mustererkennung mit Clustering 50 Nach einem Beispiel aus dem Konferenzbeitrag

    „Using Machine Learning for Developer Productivity” Abstrakte Muster Änderungen
  51. Facebook Getafix: Beispiel 51 https://code.fb.com/developer-tools/getafix-how-facebook-tools-learn-to-fix-bugs-automatically/ Muster: h0.h1(); → if (h0

    == null) return; h0.h1(); public void onDestroyView() { mListView.clearListeners(); mListView = null; } public void onDestroyView() { if(mListView == null) return; mListView.clearListeners(); mListView = null; } public void onDestroyView() { h0.h1(); mListView = null; } public void onDestroyView() { if (h0 == null) return; h0.h1(); mListView = null; } Re-Substitution Cluster-Nutzung & Ranking Substitution
  52. 52 Können Computer Bugs fixen? Immer öfter!

  53. 53 Können Computer selbst programmieren?

  54. 54 Neuronal Network (nochmal)

  55. CLgen 55 Deep Learning Program Generator Generierung lauffähiger Programme unter

    Verwendung von Deep Learning. https://github.com/ChrisCummins/clgen Zumindest zu 50% nicht von manuell erstellten Code zu unterscheiden
  56. 56 Naja…

  57. 57 …oder doch?

  58. Program Synthesis + Machine Learning 58 Programming by Example: „Flash

    Fill“ in Excel https://www.microsoft.com/en-us/research/publication/automating-string-processing-spreadsheets-using-input-output-examples/ (2011) if (input[1] == '') then Concat(input[2], Const(", "), input[0], Const(".")) else Concat(input[2], Const(", "), input[0], Const(" "), let v = input[1] in Substring(v, AbsPos(v, 0), RegexPos(v, UpperCase, '', -1)), Const("."))
  59. 59 Auszug aus dem Paper “Automating String Processing in Spreadsheets

    Using Input-Output Examples” von Sumit Gulwani
  60. 60 Können Computer selbst programmieren? Ja* * in klar abgesteckten

    Bereichen
  61. Aber der Reihe nach… 61 Machine Learning Code Machine Learning

    on Code Zusammenfassung 1 2 3 4
  62. Zusammenfassung 62 • Machine Learning on Code ist noch ein

    junges Feld • Es gibt viele Forschungsaktivitäten in diesem Bereich • Erste Ansätze von MLonCode nutzen wir bereits im Alltag
  63. Vielen Dank! Fragen? 63 Markus Harrer Software Development Analyst E-Mail:

    markus.harrer@innoq.com Twitter: @feststelltaste Blog: feststelltaste.de www.innoq.com innoQ Deutschland GmbH Krischerstr. 100 40789 Monheim am Rhein Germany +49 2173 3366-0 Ohlauer Str. 43 10999 Berlin Germany Ludwigstr. 180E 63067 Offenbach Germany Kreuzstr. 16 80331 München Germany Gewerbestr. 11 CH-6330 Cham Switzerland +41 41 743 01 11 Albulastr. 55 8048 Zürich Switzerland innoQ Schweiz GmbH #SoftwareAnalytics #ArchitectureAsCode #SoftwareArchitectureReviews #LegacySystemModernization #CloudTransformation #WardleyMapping #GamificationInSoftwareArchitectureTraining #Others