İçeriğe geç
KOD ZEKÂSI MOTORU

Ajanlarımıza deponun tamamını gösteren motor

Bunu kendimiz için kurduk. Kod inceleyen ya da yeniden düzenleyen bir ajan, eskiden açık olan dosyayı ve pek az şeyi görüyordu; projenin geri kalanını tahmin ede ede okuyordu. Motor, kod tabanını sözdizimi ağaçlarına ve bir kullanım grafiğine ayırıyor, bir değişikliğin çevresinde neyin önemli olduğunu sıralıyor ve birebir eşleşmeyle anlamı birlikte kullanan sorguları yanıtlıyor. Artık yaptığımız her inceleme ve her yeniden düzenleme, açık dosyadan değil, deponun tamamının yapısından başlıyor.

  • SektörGeliştirici araçları
  • Çalışma biçimiKendi ajanlarımız için kurulan dahili motor
  • DurumKendi işimizde kullanımda, geliştirilmeye devam ediyor
  • Kod zekâsı
  • Melez erişim
  • Ajan altyapısı
  • Geliştirici araçları

Önce kendi ajanlarımız için

Bu bir müşteri projesi değil. Kendi araç zincirimizin, bir ajan herhangi bir şeye dokunmadan önce neyi göreceğine karar veren parçası. Bir projeyi bir kez indeksliyor, dosyalar kaydedildikçe bu indeksi güncel tutuyor ve kodla ilgili yapısal soruları yanıtlıyor: ne nerede tanımlı, onu ne kullanıyor, bir dosya neyi içeri alıyor ve o dosyayı kim içeri alıyor.

Her şeyi belirleyen kısıt, akıl yürütme bütçesi. Teknik olarak eksiksiz ama okunamayacak kadar büyük bir yanıt, sığan daha küçük bir yanıttan kötüdür. Bu yüzden her yanıt, geçerli yapısal çıktı olmayı sürdürerek sabit bir bütçeye göre kırpılıyor ve dosyalar gövdeleriyle değil imzalarıyla dönüyor. Amaç bütçeyi okumaya değil işin kendisine harcamak.

SORUN

Sorun bizimdi

Bunu hiçbir müşteri istemedi. Kendi ajanlarımızı, büyük kod tabanlarına dair yanlış bir resimle çalışırken izlemekten çıktı.

Açık bir dosya, kod tabanı değildir

Bir fonksiyonu değiştirmesi istenen ajan, fonksiyonu ve çevresindeki dosyayı görebiliyordu. Onu neyin çağırdığı, kendisinin neyi çağırdığı ve değişikliği projenin hangi parçalarının hissedeceği çerçevenin dışında kalıyordu. Değişiklik yalıtılmış biçimde düşünülüyor, aynı biçimde de inceleniyordu.

Tek bir şeyi bulmak için bütün projeyi okumak

Bir harita olmadan doğru yeri bulmak, dosya açıp elemek demek. Elenen her dosyanın bedeli, asıl işin ihtiyaç duyduğu bütçeden zaten ödenmiş olur. Büyük bir depoda bu bedel, işe yarar hiçbir düşünce başlamadan önce ortaya çıkar.

Tek tür arama hiçbir zaman yetmedi

Birebir isim araması, aynı işi başka bir adla yapan kodu kaçırır. Anlama dayalı arama ise az önce yazılan tam tanımlayıcıyı kaçırır. İkisinden birini seçmek, aracı her seferinde başka bir biçimde yanıltıyordu.

ÇÖZÜM

Ne kurduk

Yapıyı anlayan bir indeks, üç ayrı bakış biçimini harmanlayan bir erişim katmanı ve tek bir yanıtın kaça mal olabileceğine dair kesin sınırlar.

Dosya yığını yerine yapısal bir harita

Motor kaynağı sözdizimi ağaçlarına ayırıyor ve her dosyada gerçekten neyin tanımlandığını çıkarıyor. Böylece bir proje metniyle değil yapısıyla anlatılabiliyor.

  • On dilde fonksiyonlar, sınıflar, metotlar, arayüzler, tipler, sabit kümeleri, yapılar, özellik tanımları ve gerçeklemeler çıkarılıyor
  • Bir dosya, gövdeleri olmadan yalnızca imzalarıyla dönebiliyor; ajan okumadığı bir dosyanın biçimini görüyor
  • Proje haritası her dosyanın dilini, satır sayısını ve sembol sayısını taşıyor; ağaç işe yaramayacak kadar büyüdüğünde üst düzeye toplanıyor

Üç bakış biçimi, tek bir sıralamada

Anahtar kelime araması, birebir isim eşleşmesi ve anlamsal benzerlik farklı türde sorulara yanıt verir. Motor üçünü de tek bir indeks üzerinde çalıştırıyor ve aralarında seçim yapmak yerine sonuçlarını birleştiriyor.

  • Tam metin anahtar kelime araması, alt dize isim eşleşmesi ve vektör benzerliği her sorguda birlikte çalışıyor
  • Üç sıralama, karşılıklı sıra birleştirmesiyle harmanlanıyor; bu yöntem karşılaştırılamayan puanları değil sıraları karşılaştırdığı için elle ayarlanmış ağırlık gerektirmiyor
  • Bir sembolün proje genelinde ne kadar yaygın kullanıldığı sıralamayı hafifçe etkiliyor; böylece yük taşıyan kod, kimsenin çağırmadığı kodun önüne çıkıyor

Yalnızca nerede olduğu değil, buna neyin bağlı olduğu

Motor tanımların yanı sıra isimlerin nerede kullanıldığını, hem çağrıları hem tip başvurularını ve hangi dosyanın hangisini içeri aldığını kaydediyor. Bu, bir aramayı sonuçlara dair bir soruya dönüştürüyor.

  • Kullanım grafiği, bunun nerede tanımlandığının yanında buna neyin bağlı olduğunu da yanıtlıyor
  • İçe aktarımlar iki yönlü izleniyor: bir dosyanın neyi içeri aldığı ve yaklaşık olarak proje genelinde hangi dosyaların onu içeri aldığı
  • Haritanın yanında yakın geçmişten bir pencere duruyor; böylece son zamanlarda neyin değiştiği ayrı bir sorgu değil, yanıtın parçası oluyor

Sınırlı yanıtlar, kodun zaten bulunduğu makinede

Teslim tarafını iki kural belirledi. Bir yanıt, kendisini isteyenin ayırdığı yere sığmak zorunda ve kodun anlaşılabilmesi için makineden çıkması gerekmemeli.

  • Her yanıt, geçerli yapısal çıktı olmayı sürdürerek sabit bir bütçeye göre kırpılıyor; böylece geniş bir sorgu isteyenin bağlamını taşıramıyor
  • İndeksin tamamı geliştiricinin kendi makinesindeki tek bir veritabanı dosyası, vektör araması süreç içinde çalışıyor ve hiçbir kod hiçbir yere yüklenmiyor
  • Bir kayıt, dosya izleyicisi tarafından yakalanıp yarım saniye içinde yeniden indeksleniyor; içeriği değişmemiş bir dosya ise özetinden tanınıp atlanıyor
ETKİ

İşimizde ne değişti

Bu dahili bir araç, dolayısıyla dürüst rapor, çalışma biçimimizde neyi değiştirdiğidir. Arkasında bir kıyaslama ölçümü yok ve biz de yayımlamıyoruz.

Deponun tamamı

İnceleme nereden başlıyor

Bir inceleme ya da yeniden düzenleme, projenin yapısıyla başlıyor: değişiklik neye dokunuyor, onu ne kullanıyor, onu kim içeri alıyor. Açık dosya, üzerine düşünülebilecek şeyin sınırı olmaktan çıktı.

Bütçe işin kendisine

Akıl yürütme nereye gidiyor

Gövdeler yerine imzalar ve sığacak biçimde kırpılmış yanıtlar, mevcut bağlamın daha azının sonunda önemsiz çıkan dosyaları açmaya harcanması demek. Kazanç, hiç okunması gerekmeyende.

Makineden çıkmıyor

Müşteri koduna neden yöneltebiliyoruz

Geliştiricinin kendi makinesinde tek bir indeks dosyası, arama süreç içinde çalışıyor. Kimlik bilgisi dosyaları, özel anahtarlar ve sertifika malzemesi indekslemenin dışında tutuluyor ve indeksi yalnızca sahibi okuyabiliyor.

Son güncelleme:

Araçlarınız kod tabanınızı görüyor, yoksa yalnızca açık dosyayı mı?

Ekibinizin bugün büyük bir depoyla nasıl çalıştığını ve bağlamın nerede tükendiğini anlatın. Neyi kurmaya değer, neyi değmez, biz söyleyelim.

Projenizi konuşalım