ML untuk Penyelamatan: Alat Pengembang AI

Pembelajaran mesin terus menembus bidang aktivitas manusia yang paling beragam, dan bidang teknologi seperti pengembangan perangkat lunak, tentu saja, tidak terkecuali. Menurut perkiraan AI dan spesialis pembelajaran mesin Sergey Markov, disuarakan dalam ceramah "Hasil AI-2019" , pada tahun 2020 sejumlah besar alat pengembangan menggunakan pembelajaran mesin akan muncul. Ini membawa saya pada gagasan bahwa beberapa alat ini harus tersedia di pasar saat ini - dapatkah mereka membantu dalam kehidupan sehari-hari seorang pengembang web biasa menulis dalam Java, Python dan JS? 

Ke depan, saya akan mengatakan bahwa, sayangnya, saat ini tidak ada solusi terbuka yang dapat menghasilkan setidaknya beberapa kode "pertempuran". Yang paling dekat dengan ini adalah Bayoudan DeepCoder, tetapi proyek-proyek ini masih terlalu mentah. Kemajuan yang lebih besar diamati di bidang terkait - seperti pelengkapan otomatis, analisis statis, pembuatan tes. Saya akan membicarakan ini di artikel.



Kite - smart autocomplete dan dokumentasi bawaan di Python IDE


Situs web: https://kite.com/
Harga: Sepenuhnya gratis.

Plugin untuk mempercepat penulisan kode dengan bantuan penyelesaian otomatis pintar. Layang-layang indeks basis kode proyek, yang berarti menunjukkan tips yang paling relevan. Selain pelengkapan otomatis itu sendiri, jika perlu, Anda dapat membuka dokumentasi bawaan dengan sampel kode untuk 800+ perpustakaan dalam satu klik (paling berguna untuk perpustakaan seperti numpy atau panda). Sekali seminggu sebuah laporan dikirim ke pos dengan statistik tentang penggunaan fungsi substitusi otomatis. 
 

Saran layang-layang (ditandai dengan ikon) jauh lebih relevan daripada saran asli. Munculan dengan dokumentasi akan memberi tahu Anda apa yang dapat ditransfer ke kwargs

Layang-layang digunakan untuk mengirim potongan kode kecil ke server, yang tidak cocok untuk banyak alasan keamanan, tetapi kabar baik! - Sekarang Kite telah meninggalkan praktik ini, dan seluruh analisis dilakukan secara lokal. Plug-in cukup ramah untuk digunakan - mudah untuk menginstal dan bekerja dengan cepat tanpa memuat sistem. Layang-layang mendukung sebagian besar IDE populer: Ide, PyCharm, Sublime, Vim, kode Vs, Spyder, dan Atom.


Intinya: mungkin proyek penggunaan tempur yang paling siap dalam pemilihan. Saya merekomendasikan kepada semua orang yang menulis dengan Python.

Untuk bahasa lain, ada produk serupa - Codota untuk Java atau TabNine, yang mendukung 22 bahasa. Saya tidak punya waktu untuk mencobanya, tetapi rasanya seperti Codota menawarkan petunjuk yang lebih konservatif, sementara TabNine (untuk Jawa) menawarkan seluruh potongan kode, termasuk nama variabel (kadang-kadang tanpa konteks apa pun) dan langsung ke intinya.

DeepCode - penganalisa kode statis dengan fokus pada pencarian kerentanan


Situs web: https://www.deepcode.ai/
Harga: Versi cloud gratis untuk proyek dan tim opensource hingga 30 orang. Ada opsi self-host untuk GitLab dan BitBucket Enterprise, harganya bisa dinegosiasikan.

Seperti yang dikatakan oleh pengembang, DeepCode adalah Tata Bahasa untuk kode. Tujuannya adalah untuk membantu pengembang dalam mendeteksi kesalahan dan kerentanan dalam kode. Solusi yang di-host-sendiri datang dalam bentuk wadah buruh pelabuhan, diintegrasikan ke dalam sistem kontrol versi melalui kait dan dikonfigurasi dalam 10 menit. Bot juga tersedia untuk memeriksa permintaan tarik. Menyatakan dukungan untuk Java, Python, JavaScript, dan TypeScript.


Contoh rekomendasi DeepCode.

Tayangan penggunaan: sangat senang dengan persentase positif palsu yang rendah. Semua masalah yang ditemukan benar-benar nyata dan tidak menyala karena alasan terlepas dari kualitas pemeriksaan (kode dengan bug tidak dimulai, kode tidak aman tidak menggunakan input pengguna). Peringatan kinerja juga terlihat cukup masuk akal. Jumlah masalah yang terdeteksi dibandingkan dengan penganalisa kode FineBugs Java atau PVS-Studio yang sama tampaknya tidak signifikan - 200 melawan 2-4 ribu. Saya tidak tahu apakah akan menganggap ini sebagai nilai tambah, tetapi setidaknya 200 buah dapat benar-benar dipisahkan, yang tidak dapat dikatakan sekitar 4 ribu. 


Bot memeriksa setiap permintaan tarik

Intinya: jika Anda selalu kesal dengan jumlah false positive ketika bekerja dengan linter, Anda harus mencoba DeepCode. Ini juga merupakan cara yang bagus untuk berkontribusi ke opensource: garpu proyek sendiri, jalankan tes - dan beberapa permintaan tarik yang berguna di saku Anda.

DiffBlue - unit test generator untuk Java 


Situs web: https://www.diffblue.com/ 
Harga: $ 3375 per bulan untuk tim yang terdiri dari 25 orang. Tarif gratis untuk penggunaan individu masih dalam rencana.

Produk ini terlihat paling ambisius dalam pemilihan. Startup Inggris tahun lalu yang menerima 20 juta investasi dari Goldman Sachs. Jika pada awalnya saya sedang mencari sesuatu yang menghasilkan kode untuk tes, maka DiffBlue menghasilkan tes untuk kode dengan kemampuan untuk tertanam dalam CI. Produk ini memiliki integrasi yang baik dengan infrastruktur uji Spring Boot. Bekerja dengan Gradle, Maven, testng, Junit.

Pengembang mengumumkan dua mode operasi: 

  • Esensial: tes dihasilkan oleh tanda tangan metode
  • Advanced: badan metode juga diperhitungkan dan tes dihasilkan untuk setiap cabang dalam kode. 

DiffBlue disediakan sebagai utilitas CLI untuk menanamkan dalam CI atau sebagai plugin untuk IntelliJ IDEA untuk menghasilkan tes selama pengembangan.


DiffBlue sendiri membasahi kelas, menghasilkan perlengkapan dan pernyataan.
 
Pada proyek nyata, DiffBlue terbukti ambigu. 

  1. . โ€” ยซยป. , , .   Gradle . . jar' , jcover.config. c Serializable, Active Record . โ€” 3000 (sic!), coverage 3%.
  2. Kasus kedua, jauh lebih sukses. Layanan mikro stateless di Spring Boot. Menurut pengembang, mereka mencurahkan banyak waktu untuk mendukung aplikasi boot musim semi. Semuanya berfungsi tanpa kesalahan, cakupan naik dari 28 menjadi 42 persen, tetapi hanya sesuai dengan instruksi. Di cabang, cakupan tumbuh hanya 6% dari (41% menjadi 47%). Ini karena banyak tes diuji oleh getter atau setter. Mungkin dalam mode Advanced hasilnya akan lebih menarik.


Itu juga terjadi. Untuk kelas dengan selusin metode publik dan logika kompleks, itu ternyata menjadi tiruan.

Intinya: jika semuanya bekerja, seperti yang direncanakan, itu akan sangat keren dan masuk akal, tetapi ini masih jauh. Versi 0.1 menunjukkan bahwa mereka masih di depan.

Kesimpulan


Menggunakan AI untuk pemrograman memang mendapatkan momentum, tetapi sejauh ini industri masih di awal perjalanan. Ada banyak aplikasi yang mungkin: dalam beberapa, sudah ada kompetisi, yang lain sejauh ini hanya produk tunggal yang disajikan. Tujuan utama dan yang tampaknya paling jelas - pembuatan kode itu sendiri - belum diambil oleh siapa pun, tetapi sudah dapat meningkatkan kecepatan pengembangan, mengurangi jumlah bug dalam kode lama dan mencegah munculnya yang baru.

All Articles