Teklif al
Süreç

Yazılım teslim alırken nelere dikkat edilir

Dosyalar da kod da sizde duruyor; hangi dosyanın hangi kayda ait olduğunu yalnız kodu okuyan biliyor. Sistem çalışıyor, sizde yeniden kurulamıyor. Devir listesi bu boşluğun listesidir.

Algoriel 11 dk okuma
Yazılım teslim alırken nelere dikkat edilir
Bu yazıda
  1. Devir listesine bir kalem tek ölçütle girer
  2. Depo, bağımlılık listesi ve kurulum tarifi ayrı kalemlerdir
  3. Veritabanı yedeği ile yüklenen dosyalar iki ayrı kalemdir
  4. Ayar dosyası, önbellek ve zamanlanmış işler
  5. Alan adı, sunucu ve üçüncü taraf hesapları kimin adına açıldıysa sistem fiilen onundur
  6. Devir kalemleri yan yana
  7. Teslim anındaki prova: satıcı hâlâ sözleşmedeyken sistemi ikinci kez kurmak

Yazılım devir listesi, iş bittiğinde satıcıdan elinize geçmesi gereken kalemleri ve her kalemin nasıl sınandığını yazan belgedir. Listeye neyin gireceği tek ölçütle kararlaştırıldığında liste kapanır; kapanan liste sözleşmenin kapsamına girer, kapanmayan liste işin sonuna kalır. KGM SsangYong’un kurumsal sitesi devralındığında araç görselleri diskteydi ama hangisinin hangi modele ait olduğu hiçbir yerde yazmıyordu.

Devir listesine bir kalem tek ölçütle girer

Devir konuşması çoğu zaman bir istek listesiyle başlar: kod, veritabanı, belgeler, parolalar. Liste uzadıkça iş güvenceye alınmış gibi görünür. Uzunluk bir ölçüt değildir. “İyi olur” diye açılan liste hiçbir yerde kapanmaz; her toplantıda bir kalem daha eklenir ve kalemlerin hiçbiri neden orada durduğunu söyleyemez.

Kapanan tek liste tek soruyla kurulur. Bu kalem elinizde olmasaydı, satıcıya tek soru sormadan çalışan sistemi boş bir ortamda ikinci kez kurabilir miydiniz? Cevap hayırsa kalem listededir. Cevap evetse kalem faydalıdır, ama devrin konusu değildir. Ölçüt listeyi kapattığı için listenin zamanını da değiştirir: kapanan bir liste sözleşmeye yazılabilir, kapanmayan liste ancak işin sonunda hatırlanır. Sözleşmeye giren kalem işin kapsamındadır ve fiyatın içindedir. İşin sonunda istenen kalem satıcının o gün elinde ne varsa onunla sınırlıdır.

Ölçütün alternatifi genelde iki biçimde çıkar. Birincisi eksiksizlik: her şeyi isteyelim, fazlası zarar vermez. Fazlası zarar vermeyebilir, ama eksiksizlik sınanamaz. Hangi kalemin gerçekten geldiğini kimse ölçmez ve liste bir teslim tutanağına dönüşür. İkincisi satıcının kendi listesi: firma neyi devretmeye alışkınsa liste odur. Bu liste doğru olabilir, ama sizin sorunuza göre değil satıcının alışkanlığına göre yazılmıştır ve eksiği ancak satıcı ulaşılamaz olduktan sonra görünür. Yeniden kurulabilirlik ölçütü ikisinden de farklı bir iş yapıyor: her kaleme bir sınama borcu yüklüyor.

Ölçütün portföydeki karşılığı şöyle. KGM SsangYong’un kurumsal sitesi bize yayındayken geldi; o siteyi kuran ekip biz değildik. Devir noktasında markanın elinde ne olduğunu alıcı gözüyle sayabiliriz. Markanın adını taşıyan bir alan adında yayında bir site vardı. İçinde çalışılabilecek kadar bütün bir kod tabanı vardı. Katalog verisi MySQL’de duruyordu, araç görselleri diskteydi. Sistem ayaktaydı ve parçaları elde görünüyordu.

Elde olmayan şey bir dosya değil, bir bilgiydi: hangi görselin hangi araç modeline gittiği. Görseller duruyordu, eşleme durmuyordu. Devir listesinin en sık boş kalan satırı da budur. Taşınabilir bir dosyası olmadığı için kimse onu kalem saymaz; oysa yokluğunda yeniden kurulan sistemin sayfaları yanlış doluyor.

Ölçüt kiralık yazılımda da aynı kalır, yalnız kalemler değişir. Abonelikle kullandığınız bir üründe kaynak kod zaten devredilmez. O zaman listede kod deposu yerine verinin dışa aktarma biçimi, dosyaların indirilebilir hâli ve hesapların kimin adına açıldığı durur. Soru değişmiyor: bu ürüne yarın erişemeseniz elinizdekiyle ne yapabilirsiniz?

Depo, bağımlılık listesi ve kurulum tarifi ayrı kalemlerdir

Depo teslim alındığı anda masada bir cümle kurulur: kod bizde. Cümle doğrudur ve tam o anda eksik olan iki kalemi görünmez yapar. Kod deposu sistemin ne olduğunu söyler; koddan çalışan bir siteye giden yolu söylemez. O yol iki kalemden geçer. Birincisi, sistemin hangi parçalar üstünde koştuğunu adıyla yazan bağımlılık listesi. İkincisi, boş bir makinede hangi adımın hangi sırayla yürütüleceğini yazan kurulum tarifi. Üçü ayrı kalemdir, çünkü biri olmadan öteki sınanamaz.

Bağımlılık listesi göründüğünden basittir: yazılı araç adlarından oluşur. KGM SsangYong’un kurumsal sitesinde yığın proje sayfasında adıyla duruyor: Laravel, Tailwind, jQuery, MySQL ve Redis. Devir listesinin yığın satırı böyle görünür. Bu satır olmadan boş ortama neyin kurulacağı bilinmez ve iş satıcıya sorulan sorulara döner. Sürüm bilgisi ayrı bir sorudur; listede yazmıyorsa orada da bir boşluk vardır ve o boşluk kurulum sırasında ortaya çıkar.

Yığına sonradan giren her parça listede adıyla durmalıdır. SsangYong’da sonradan giren parça bir önbellek katmanıydı ve proje sayfası onu adıyla yazıyor. Yazılı olması bir titizlik göstergesi değil, devir açısından işlevsel bir şeydir: sonradan giren parça yazılı değilse, boş ortamda kurulan sistem kodla aynı, davranışla farklı çalışır.

Sınama tek cümleye iner. Satıcıya tek soru sormadan, yalnız depo, bağımlılık listesi ve tarifle boş bir ortamda siteyi açın. Sınamanın çıktısı “çalıştı” değildir. Çıktı, kaç soru sormak zorunda kaldığınızdır; her soru tarifin eksik bir adımıdır ve o adım yazıya geçmeden sınama bitmez.

Tarifi yürütecek biri sizde yoksa sınamayı satıcıdan bağımsız üçüncü bir ekibe yaptırırsınız. Sözleşme kapanmadan ödenen tek seferlik bir maliyettir. Satıcıya “kendi tarifini kendin yürüt” demek sınama sayılmaz; tarifin eksik adımlarını zaten bilen biri o adımları fark etmez. Mevcut araçların korunması ayrı bir kararın konusu; onu mevcut sette neden kalındığını anlattığımız bakım yazısında açtık.

Veritabanı yedeği ile yüklenen dosyalar iki ayrı kalemdir

Devir listelerinin çoğunda tek bir “yedek” satırı bulunur ve o satır iki şeyi birden temsil ettiğini varsayar. Etmez. Veritabanı dökümü kayıtları taşır; yüklenen dosyalar diskte durur. İkisi ayrı yerden alınır, ayrı taşınır ve ayrı sınanır. Tek satır yazan liste teslim gününde ikisinden birini kaçırır, çünkü satırın hangisini kastettiği ancak eksik ortaya çıktığında belli olur.

Üçüncü kalem ikisinin arasında durur ve çoğu listede adı yoktur: hangi dosyanın hangi kayda ait olduğu bilgisi. Bu bilgi ya veritabanında bir alan olarak durur, ya dosya adının kendisinde durur, ya da bir belgede yazılıdır. Hiçbirinde yaşamıyorsa satıcının hafızasındadır ve hafıza devredilemez. Kalemin karşılığı bir dosya değil bir bilgi olduğu için de listeye girmesi kolay olmuyor: dosyaları saymak somut bir iş gibi görünür, eşlemeyi saymak fazladan titizlik gibi.

KGM SsangYong’un kurumsal sitesi devir noktasında tam bu boşluğu taşıyordu. Araç görselleri diskte duruyordu; hangi görselin hangi modele gittiği ise hiçbir yerde yazmıyordu.

Sınama küçük ve nettir: dökümü ve dosyaları boş ortama birlikte koyun, sonra tek bir kayıt sayfasını açın. Görsel doğru geliyorsa eşleme yazılıdır ve sizdedir. Görsel hiç gelmiyorsa ya da yanlış geliyorsa eşleme birinin hafızasındadır. Tek bir sayfa, eşlemenin nerede yaşadığını söyler; bütün kataloğu gezmeniz gerekmez.

Dosya taşımayan bir sistemde bu kalem boş döner. Boş kalem listeden silinmez, “yok” diye yazılır. Silinirse devir gününde dosyaların hiç olmadığı mı yoksa unutulduğu mu ayırt edilemez ve ayrım sonradan kurulamaz. Devraldığınız bir sistemde önceden verilmiş kararların size ne bıraktığını devralınan sistemin ödünç kısıtlarını anlatan mimari yazısında ayrıca yazdık.

Ayar dosyası, önbellek ve zamanlanmış işler

Bir sistemin çalışması için gereken her şey kodun içinde durmaz. Kodun çağırdığı ama kodla birlikte gelmeyen parçalar vardır: önbellek sunucusu, kuyruk, belirli saatlerde koşan zamanlanmış görev. Bunlar devir listesinde adıyla ve nerede koştuğu bilgisiyle yer alır. Yer almazsa yeniden kurulan sistem yine açılır, çünkü kod bu parçaların yokluğunda da yüklenir. Eksiklik hata olarak değil, sessizlik olarak görünür.

Ortam ayarları ve gizli anahtarlar ayrı bir kalemdir ve yeri sık karışır. Depoda durmazlar; durmamaları da doğrudur. Ama devirde ayrıca teslim edilmezlerse sistem sizde hiç açılmaz. “Kod bizde” cümlesinin en sık düştüğü yer burasıdır: depo tam, sistem kapalı.

Bu parçaların listeden düşmesinin nedeni ihmal değil, görünmezlik. Depoya bakan biri onları görmez. Sistemi her gün işleten biri de görmez, çünkü onun ortamında zaten kurulu duruyorlar. Parça kendini ancak boş bir ortamda, ilk kez kurulurken gösterir. Devir listesinde bu yüzden parçanın adı kadar nerede koştuğu da yazar: aynı parçanın sizde nereye kurulacağına, satıcının ortamındaki yerine bakılarak karar verilir.

Portföyde bunun somut karşılığı var. KGM SsangYong’un kurumsal sitesinde önbellek katmanı yığına sonradan giren parçaydı ve kodun dışında koşuyor; katalog okumaları oradan karşılanıyor. Bu parça devir listesinde yazmasaydı yeniden kurulan site açılır, ama her katalog okuması yeniden MySQL’e düşerdi. Sistem devralınmadan önceki hâline dönerdi ve kimse bir hata mesajı görmezdi.

Sınama şu: sistemi yalnız yazılı listeden başlatın, hafızanızdan hiçbir şey eklemeyin. Kod bir adrese bağlanmaya çalışıp bulamıyorsa o adres listede eksiktir. Sınamanın sorduğu şey “açıldı mı” değil, “kodun çağırdığı her şey listede mi”. Bu ayrım önemli, çünkü açılan bir sistem devir gününde herkesi rahatlatır ve rahatlama eksik kalemi gizler.

Parça satıcının kendi altyapısında koşuyorsa devredilemez. O zaman listeye parçanın kendisi değil, sizde yerine ne kurulacağı yazılır. Devredilemeyen parça listeden düşmez; “yeniden kurulacak” diye işaretlenir ve maliyeti devir konuşmasında görünür kalır.

Alan adı, sunucu ve üçüncü taraf hesapları kimin adına açıldıysa sistem fiilen onundur

Kodun dışında kalan hesaplar şunlardır: alan adı kaydı, barındırma hesabı ve sistemin bağlandığı dış servis hesapları. Bunların hangisi kimin kimliğiyle açıldıysa o parça fiilen onundur. Sözleşme sahip olarak sizi yazabilir; erişim yine hesabı açanın elindedir. Devirde sınanan şey kâğıttaki sahiplik değil, elinizdeki erişimdir.

Bu hesaplar arasında alan adı tek başına sistemin tamamına eşdeğerdir. Adres kimin elindeyse ziyaretçi ondadır. Kod sizde olsa, veri sizde olsa, barındırma sizin adınıza olsa bile adresi başka yere çeviremiyorsanız sistemi taşıyamazsınız.

Sınama teslim gününde yapılır. Her hesaba satıcının değil kendi girişinizle girin. Sonra alan adının yönlendirmesini satıcıya sormadan değiştirebildiğinizi görün. İkisi de yapılabiliyorsa hesap sizdedir; biri yapılamıyorsa o satır listede açık kalmıştır ve sözleşme kapanmadan kapatılır.

Vipkurum çatısındaki kurumlar bu kalemin neden ayrı sayıldığını gösteriyor: kurumlar ziyaretçiye platformun adresinde değil, kendi alan adlarında ve kendi markalarıyla görünüyor. Devir açısından anlamı şu: kayıt kurumun adınaysa, altındaki platform değişse de adres kurumda kalır. KGM SsangYong’un kurumsal sitesi de markanın adını taşıyan bir adreste yayında. Bir adresin marka adını taşıması ile kaydın marka adına olması aynı şey değildir; ikincisi ancak kayıt paneline girilerek görülür ve devir listesinde ayrı bir satır olarak durur.

Hesabın sizin adınıza olması işletmesini sizin yapmanızı gerektirmez. Sahiplik ile işletme ayrılabilir; satıcıya sınırlı yetkiyle erişim verirsiniz, ana hesap sizde kalır. Bazı servisler hesap devrini hiç yapmaz. O durumda hesap sizin adınıza yeniden açılır ve bağlantılar yeni hesap üstünden kurulur. Bu iş devir gününde değil, sözleşme yazılırken planlanır; devir günü fark edilirse sistem birkaç gün iki hesap arasında kalır.

Devir kalemleri yan yana

Her satır üç soruya cevap veriyor: kalem nedir, yokluğunda ne olur, teslim anında nasıl sınanır. Üçüncü sütun listenin varlık nedeni; sınaması yazılmamış bir kalem, satıcı “teslim edildi” dediği anda sınanmış sayılır.

Devir kalemiYokluğunda ne olurTeslim anındaki sınama
Kod deposu, bağımlılık listesi ve kurulum tarifiKod elinizdedir, çalışan site değil; boş ortamda kurulum satıcıya sorulan sorularla ilerler ve her soru bir eksik adımdırSatıcıya sormadan, yalnız depo, liste ve tarifle boş bir ortamda siteyi açmak
Veritabanı dökümü: şema ve kayıtlarSite açılır, içi boştur; ya da şema var kayıt yok, kayıt var şema yokDökümü boş ortama yükleyip bir kayıt sayfasını açmak
Yüklenen dosyalar ve dosya–kayıt eşlemesiDosyalar diskte durur, hangi kayda ait oldukları bilinmez; sayfa açılır, görsel gelmez ya da yanlış gelir. KGM SsangYong’un kurumsal sitesi bize bu durumda geldi: dosyalar yerindeydi, eşleme yazılı değildiDökümü ve dosyaları birlikte koyup tek bir model sayfasını açmak; görsel doğru geliyor mu
Ortam ayarları, gizli anahtarlar ve kodun dışında koşan parçalar (önbellek sunucusu, kuyruk, zamanlanmış görev)Ayar yoksa sistem hiç açılmaz; parça yoksa açılır ama eksik çalışır ve belirti hata değil yavaşlık ya da işlenmeyen iştirSistemi yalnız yazılı listeden başlatmak; kodun bağlanmaya çalışıp bulamadığı her adres eksik kalemdir
Alan adı kaydı, barındırma ve dış servis hesaplarıSözleşme sizin dese de erişim satıcının elindedir; yönlendirmeyi değiştirmek için satıcıya ihtiyaç duyarsınız. Vipkurum’da kurumların platformun değil kendi alan adında görünmesi, adresin kurumun varlığı olmasının örneğiHer hesaba kendi girişinizle girmek; alan adı yönlendirmesini satıcıya sormadan değiştirmek

Teslim anındaki prova: satıcı hâlâ sözleşmedeyken sistemi ikinci kez kurmak

Kalem başına sınama kalemin varlığını doğrular. Kalemlerin birlikte yetip yetmediğini doğrulayan tek şey provadır: satıcı hâlâ sözleşmedeyken, yalnız devredilen kalemleri kullanarak boş bir ortamda sistemi ikinci kez kurmak. Hafızadan eklenen her şey provayı geçersiz kılar, çünkü prova tam olarak hafızayı ölçüyor.

Provanın çıktısı çalışan bir kopya değildir. Çıktı, eksik kalem listesidir. Her “satıcıya sormak zorunda kaldık” anı bir satır üretir ve o satır kapatılana kadar devir bitmez. Prova, eksik listesi boşaldığında biter; kurulan ikinci kopya o günden sonra silinebilir, çünkü işi kanıt üretmekti.

Provanın neyi öne çektiğini portföyden okumak mümkün. KGM SsangYong’un kurumsal sitesinde görsel dosyalarıyla araç modelleri arasındaki eşlemenin yazılı olmadığı, sistemi kuran ekip masadayken değil, sonraki ekip kod tabanını okuduğunda görüldü. Eksik zaten oradaydı; değişen tek şey ne zaman görüldüğü oldu. Prova aynı eksiği satıcı hâlâ ulaşılabilirken çıkarır. Fark eksik kalemin varlığı değil, kapatma maliyetinin kimde kaldığıdır.

Buradaki sınamanın ölçtüğü şey yeniden üretilebilirlik. Yazılımın doğru davranıp davranmadığı, yani kabulde neyin test edileceği, başka bir soru. İkisi karışırsa prova bir kabul turuna dönüşür; ekranlar gezilir, kayıtlar açılır, herkes rahatlar ve devir listesi hiç sınanmadan kapanır. Devir sorusunu yazılım firmasına sorulacak sorular yazısında da bu nedenle ayrı bıraktık.

Satıcı provayı ek iş sayabilir. Sayıyorsa sözleşmeye yazılır ve fiyatlanır; provadan vazgeçilmez. İkinci bir ortam kurmak da bir maliyettir. Devir listesinin doğruluğunu satıcı ulaşılamaz olduktan sonra öğrenmekten ucuza gelir. İki maliyet aynı şeyi ölçmüyor: biri planlanmış ve sözleşmenin içinde duruyor, öteki plansız ve tek tarafa, yani size kalıyor. Sistem henüz yoksa liste teslimde değil kuruluşta yazılır; o durumda konuşma sistem mimarisi hizmetinin kapsamına girer.

Elinizde çalışan ama devir listesi olmayan bir sistem varsa, ilk adım listeyi çıkarmaktır: kod tabanını okumak, neyin yazılı olduğunu ve neyin yalnız birinin hafızasında durduğunu adıyla ayırmak. Devraldığımız bir sistemde ne yaptığımızı yazılım danışmanlığı sayfasında okuyabilirsiniz.

Temel çıkarımlar

  • Devir listesine bir kalemi, o kalem yokken satıcıya sormadan sistemi yeniden kuramayacağınız için alın; 'iyi olur' diye alınan kalem listeyi kapatmaz.
  • Kod deposu tek başına sistem değildir; bağımlılık listesi ve kurulum tarifi depodan ayrı iki kalemdir ve boş ortamda satıcıya sorulan her soru tarifteki bir boşluktur.
  • Veritabanı dökümü, yüklenen dosyalar ve dosya–kayıt eşlemesi üç ayrı kalemdir; eşleme yazılı değilse dosyalar diskinizde dursa da hangi sayfada görüneceklerini bilemezsiniz.
  • Alan adı, barındırma ve dış servis hesapları kimin kimliğiyle açıldıysa fiilen onundur; devir günü her hesaba kendi girişinizle girin ve alan adı yönlendirmesini satıcıya sormadan değiştirin.
  • Provayı sözleşme kapanmadan, devir listesinde yazandan başka hiçbir şey kullanmadan yapın; sınadığı şey yeniden üretilebilirliktir, yazılımın doğru davranıp davranmadığı değil.

Bu yazıda sık sorulanlar

  • Kaynak kod bize verildi; sistemi satıcıya sormadan kendi başımıza ayağa kaldırabilir miyiz?

    Kaldıramazsınız, elinizde yalnız depo varsa. Boş bir ortamda koddan çalışan siteye ulaşmak bağımlılık listesi ve kurulum tarifi ister; satıcıya sorduğunuz her soru tarifin eksik bir adımıdır. KGM SsangYong'un kurumsal sitesi bize yayında bir sistem olarak geldi: kod tabanı içinde çalışılacak kadar bütündü, görsel dosyaları diskteydi, ama hangi görselin hangi araç modeline ait olduğu yazılı değildi. Depoyu teslim alırken listeyi ve tarifi de isteyin.

  • Veritabanı yedeği ile yüklenen dosyalar aynı kalem mi; hangi dosyanın hangi kayda ait olduğunu nereden bileceğiz?

    Aynı kalem değildir; döküm kayıtları taşır, dosyalar diskte durur ve ikisi ayrı yerden alınır. Hangi dosyanın hangi kayda ait olduğu ise üçüncü kalemdir: ya veritabanında, ya dosya adında, ya bir belgede yaşar; hiçbirinde yaşamıyorsa satıcının hafızasındadır ve size geçmez. KGM SsangYong'un kurumsal sitesinde görsel dosyalarıyla araç modelleri arasındaki eşleme kod okunmadan görülmüyordu. Dökümü ve dosyaları boş ortama koyup tek bir kayıt sayfası açın; görsel doğru geliyorsa eşleme sizdedir.

  • Alan adı, sunucu ve dış servis hesapları satıcının adına açıldıysa ne yaparız?

    Hesapları sözleşme bitmeden kendi adınıza taşıtırsınız; taşınamayan hesap sizin adınıza yeniden açılır ve satıcıya yalnız sınırlı yetki verilir. Sözleşme sahibi olarak sizi yazsa da erişim hesabı açanın elindedir; alan adının yönlendirmesini satıcıya sormadan değiştiremiyorsanız adres fiilen sizin değildir. Vipkurum'daki kurumlar ziyaretçiye platformun değil kendi alan adında ve kendi markasıyla görünür; kayıt kurumun adınaysa platform değişse de adres kurumda kalır. Her hesaba kendi girişinizle girmeyi devir gününün ilk sınaması yapın.

  • Devir listesindeki her kalemi teslim anında nasıl sınarız?

    Sınarsınız; önce kalemi tek başına, sonra hepsini birlikte. Kalem başına sınama kalemin varlığını doğrular: tarifle siteyi açmak, dökümle bir kayıt sayfası açmak, hesaba kendi girişinizle girmek. Hepsini birlikte sınayan prova ise satıcı ulaşılabilirken, elinize geçen kalemlerden başka hiçbir şey kullanmadan sistemi boş ortamda baştan kurmaktır; çıktısı eksik kalem listesidir. Bu sınama yeniden üretilebilirliktir; yazılımın doğru davranıp davranmadığı, yani kabul testi, ayrı bir sorudur. Provayı sözleşme kapanmadan yaptırın; sonradan bulunan eksiğin maliyeti sizde kalır.

  • Devir listesi sözleşmeye ne zaman yazılır: işin başında mı, sonunda mı?

    Başında yazılır, kapsam belirlenirken. Sözleşmeye giren kalem işin fiyatına dahildir; işin sonunda istediğiniz kalem ise satıcının o gün elinde olanla sınırlıdır ve pazarlığa dönüşür. Algoriel kendi sözleşmesinde de devri bir liste olarak yazar ve her kalemi adıyla sayar; işin sonunda hatırlanacak kalem kalmaz. Teklif isterken devir listesini kapsam maddesi olarak talep edin; listesi olmayan teklif, devir kalemlerini işin sonuna bırakmış demektir.

Yazar hakkında

Algoriel

Uzaktan çalışan web yazılım ajansı

İşletmelere özel web ve mobil yazılım geliştiriyoruz. Blogda, yazılım yaptırırken ve yayından sonra karşınıza çıkan soruları cevaplıyoruz.

Etiketler:
  • yazılım devir listesi
  • kaynak kod teslimi
  • alan adı sahipliği
  • yazılım teslimi
  • yeniden kurulabilirlik

İnşa edilecek bir sisteminiz mi var?

Kurmak istediğiniz bir sistem varsa teklif formundan anlatabilirsiniz.