Davranış odaklı geliştirme - Behavior-driven development
| Yazılım geliştirme |
|---|
Gelen yazılım mühendisliği , davranış odaklı geliştirme ( BDD ) bir olduğunu çevik yazılım geliştirme yazılım projesinde geliştiriciler, kalite güvencesi test ve müşteri temsilcileri arasında işbirliğini teşvik süreci. Ekipleri, uygulamanın nasıl davranması gerektiğine dair ortak bir anlayışı resmileştirmek için konuşmayı ve somut örnekleri kullanmaya teşvik eder. Test odaklı geliştirmeden (TDD) ortaya çıktı . Davranış odaklı geliştirme, yazılım geliştirme ve yönetim ekiplerine yazılım geliştirme üzerinde işbirliği yapmak için ortak araçlar ve ortak bir süreç sağlamak için TDD'nin genel tekniklerini ve ilkelerini etki alanı odaklı tasarım ve nesne odaklı analiz ve tasarımdan gelen fikirlerle birleştirir .
BDD, temelde yazılım geliştirmenin hem ticari çıkarlar hem de teknik anlayışla nasıl yönetilmesi gerektiği hakkında bir fikir olsa da, BDD uygulaması, geliştirme sürecini desteklemek için özel yazılım araçlarının kullanımını varsayar. Bu araçlar genellikle BDD projelerinde kullanılmak üzere özel olarak geliştirilmiş olsalar da, test odaklı geliştirmeyi destekleyen araçların özel biçimleri olarak görülebilirler. Araçlar , BDD'nin ana teması olan her yerde bulunan dile otomasyon eklemeye hizmet ediyor .
BDD, davranışı ve beklenen sonuçları ifade edebilen doğal dil yapılarını (örn. İngilizce benzeri cümleler) kullanan, alana özgü basit bir dilin (DSL) kullanımıyla büyük ölçüde kolaylaştırılır . Test komut dosyaları, uzun zamandır değişen derecelerde karmaşıklığa sahip popüler bir DSL uygulaması olmuştur. BDD, özellikle çözülmesi gereken iş sorununun "sorun alanı" karmaşık olduğunda etkili bir teknik uygulama olarak kabul edilir.
Tarih
Davranış odaklı geliştirme, basit bir DSL'den yararlanan bir geliştirme süreci olan test odaklı geliştirmenin bir uzantısıdır. Bu DSL'ler, yapılandırılmış doğal dil ifadelerini yürütülebilir testlere dönüştürür. Sonuç, belirli bir işlev için kabul kriterlerine ve bu işlevi doğrulamak için kullanılan testlere daha yakın bir ilişkidir. Bu nedenle, genel olarak TDD testinin doğal bir uzantısıdır.
BDD şunlara odaklanır:
- Süreçte nereden başlamalı
- Ne test edilmeli ve ne test edilmemeli
- Tek seferde ne kadar test edilir
- Testler ne denir
- Bir testin neden başarısız olduğunu nasıl anlayabilirim?
BDD, özünde, doğal olarak ortaya çıkan sorunlardan kaçınmak için birim testi ve kabul testi yaklaşımını yeniden düşünmekle ilgilidir . Örneğin, BDD, birim test adlarının koşullu bir fiille başlayan tam cümleler olmasını önerir (örneğin İngilizce'de "gerekir") ve iş değeri sırasına göre yazılmalıdır. Kabul testleri, bir kullanıcı hikayesinin standart çevik çerçevesi kullanılarak yazılmalıdır : "Bir [rol/aktör/paydaş] olarak [fayda] sağlayan bir [özellik/yetenek] istiyorum". Kabul kriterleri senaryolar bazında yazılmalı ve sınıflarda uygulanmalıdır: [ilk bağlam] verildiğinde, [olay gerçekleştiğinde], sonra [bazı sonuçların sağlanması] .
Bu noktadan başlayarak, birçok kişi yıllar içinde BDD çerçeveleri geliştirdi ve sonunda bunu geliştiriciler, kalite güvencesi ve bir yazılım projesindeki teknik olmayan veya iş katılımcıları için bir iletişim ve işbirliği çerçevesi açısından çerçeveledi . Kasım 2009'da Londra'da yapılan "Agile spesifikasyonları, BDD ve Testing eXchange" sırasında Dan North, BDD'nin şu açıklamasını yaptı:
BDD, ikinci nesil, dışarıdan içeriye, çekme tabanlı, çok paydaşlı, çok ölçekli, yüksek otomasyonlu, çevik bir metodolojidir. Önemli olan çalışan, test edilmiş yazılımların teslimi ile sonuçlanan, iyi tanımlanmış çıktılarla bir etkileşim döngüsünü tanımlar.
2013'te GOTO Konferansı'nda Dan North ile yaptığı röportajda, Liz Keogh BDD'yi şöyle tanımladı:
Bir uygulamanın nasıl davrandığını anlatmak için örnekler kullanıyor... Ve bu örnekler hakkında sohbet ediyor.
Dan North, JBehave adlı bir BDD çerçevesi oluşturdu ve ardından Ruby için RBehave adlı ve daha sonra RSpec projesine entegre edilen hikaye düzeyinde bir BDD çerçevesi oluşturdu . Ayrıca David Chelimsky, Aslak Hellesøy ve diğerleri ile RSpec'i geliştirmek ve ayrıca "The RSpec Book: Behavior Driven Development with RSpec, Cucumber, and Friends"i yazmak için çalıştı. RSpec'teki ilk hikaye tabanlı çerçeve daha sonra, esas olarak Aslak Hellesøy tarafından geliştirilen Salatalık ile değiştirildi . Salatalık test çerçevesinin bir parçası olan Capibara , böyle bir web tabanlı test otomasyon yazılımıdır.
BDD'nin İlkeleri
Test odaklı geliştirme, bir yazılım geliştiricinin her bir yazılım birimi için aşağıdakileri yapması gerektiğini belirten bir yazılım geliştirme metodolojisidir:
- birimi için bir test tanımlayan birinci ;
- testleri başarısız kılmak;
- daha sonra üniteyi uygulayın;
- son olarak, birimin uygulanmasının testleri başarılı kıldığını doğrulayın.
Bu tanım, yüksek seviyeli yazılım gereksinimleri, düşük seviyeli teknik detaylar veya aradaki herhangi bir şey açısından testlere izin verdiği için oldukça spesifik değildir. Bu nedenle BDD'ye bakmanın bir yolu, TDD'den daha spesifik seçimler yapan TDD'nin sürekli gelişimidir.
Davranış odaklı geliştirme, herhangi bir yazılım biriminin testlerinin, birimin istenen davranışı açısından belirtilmesi gerektiğini belirtir. Çevik yazılım geliştirmeden ödünç almak , bu durumda "istenen davranış", iş tarafından belirlenen gereksinimlerden oluşur - yani, yapım aşamasında olan yazılım birimini görevlendiren herhangi bir varlık için iş değeri olan istenen davranış . BDD uygulamasında buna BDD'nin "dıştan içe" bir faaliyet olduğu belirtilmektedir.
davranışsal özellikler
Bu temel seçimi takiben, BDD tarafından yapılan ikinci bir seçim , istenen davranışın nasıl belirtilmesi gerektiği ile ilgilidir . Bu alanda BDD, nesne yönelimli analiz ve tasarım alanından kullanıcı hikayesi belirtimlerinden ödünç alınan davranışsal belirtimler için yarı biçimsel bir biçim kullanmayı seçer . Senaryo bu biçimin yönü bir uygulama olarak kabul edilebilir Hoare mantığı durumun alana özgü dilini kullanarak yazılım birimlerinin davranışsal şartnameye.
BDD, iş analistlerinin ve geliştiricilerin bu alanda işbirliği yapması gerektiğini ve davranışı, her biri özel bir belgede açıkça yazılı olan kullanıcı öyküleri açısından belirlemesi gerektiğini belirtir. Her kullanıcı hikayesi bir şekilde aşağıdaki yapıyı izlemelidir:
- Başlık
- Açık bir başlık.
- anlatı
- Aşağıdaki yapıya sahip kısa bir giriş bölümü:
- Olarak : özellikten yararlanacak kişi veya rol;
- istiyorum : özellik;
- yani : özelliğin faydası veya değeri.
- Kabul kriterleri
- Aşağıdaki yapıya sahip anlatının her bir özel senaryosunun açıklaması :
- Verilen : senaryonun başlangıcındaki başlangıç bağlamı, bir veya daha fazla tümcede;
- Ne zaman : senaryoyu tetikleyen olay;
- Sonra : bir veya daha fazla tümcede beklenen sonuç.
BDD'nin bu kullanıcı hikayelerinin tam olarak nasıl yazılması gerektiğine dair herhangi bir resmi gereksinimi yoktur, ancak BDD kullanan her ekibin, yukarıda listelenen unsurları içeren kullanıcı hikayelerini yazmak için basit, standartlaştırılmış bir format bulmasında ısrar eder. Ancak, 2007'de Dan North, farklı BDD yazılım araçlarında geniş kitleler bulan bir metin formatı için bir şablon önerdi. Bu formatın çok kısa bir örneği şöyle görünebilir:
Title: Returns and exchanges go to inventory. As a store owner, I want to add items back to inventory when they are returned or exchanged, so that I can track inventory. Scenario 1: Items returned for refund should be added to inventory. Given that a customer previously bought a black sweater from me and I have three black sweaters in inventory, when they return the black sweater for a refund, then I should have four black sweaters in inventory. Scenario 2: Exchanged items should be returned to inventory. Given that a customer previously bought a blue garment from me and I have two blue garments in inventory and three black garments in inventory, when they exchange the blue garment for a black garment, then I should have three blue garments in inventory and two black garments in inventory.
Senaryolar, etkileşimlerin gerçekleştiği UI öğelerine atıfta bulunulmadan, iş dilinde - zorunlu olmaktan ziyade bildirimsel olarak ideal bir şekilde ifade edilir.
Bu biçim, yukarıdaki örneğe benzer bir sözdizimine sahip olan Gherkin dili olarak adlandırılır. Ancak Gherkin terimi , Salatalık , JBehave, Marul, davranış ve Behat yazılım araçlarına özgüdür .
Her yerde bulunan bir dil olarak belirtim
Davranış odaklı geliştirme kavramını ödünç her yerde dile gelen etki odaklı tasarım . Her yerde bulunan bir dil, hem yazılım geliştiriciler hem de teknik olmayan personel olmak üzere bir yazılım geliştirme ekibinin tüm üyeleri tarafından paylaşılan (yarı) resmi bir dildir. Söz konusu dil, tüm ekip üyeleri tarafından söz konusu yazılımın etki alanını tartışmak için ortak bir araç olarak kullanılmakta ve geliştirilmektedir. Bu şekilde BDD, bir yazılım projesindeki tüm farklı roller arasındaki iletişim için bir araç haline gelir.
Yazılım geliştirmeyle ilgili ortak bir risk, Geliştiriciler ve İş Paydaşları arasındaki iletişim arızalarını içerir. BDD, proje Ekibi üyeleri için her yerde bulunan bir dil olarak istenen davranışın belirtimini kullanır. BDD'nin davranışsal belirtim için yarı biçimsel bir dil üzerinde ısrar etmesinin nedeni budur: her yerde bulunan bir dil olmak için bir miktar formalite bir gerekliliktir. Ek olarak, böyle her yerde bulunan bir dile sahip olmak, belirtimlerin biçimsel olarak gerekçelendirilebilmesi için bir belirtimler etki alanı modeli yaratır. Bu model aynı zamanda mevcut olan farklı BDD-destekleyen yazılım araçlarının temelidir.
Yukarıda verilen örnek, geliştirilmekte olan bir yazılım sistemi için bir kullanıcı hikayesi oluşturmaktadır. Bu kullanıcı hikayesi bir paydaşı, bir iş etkisini ve bir iş değerini tanımlar. Ayrıca, her biri bir ön koşul, tetikleyici ve beklenen sonuca sahip çeşitli senaryoları da açıklar. Bu parçaların her biri, dilin daha resmi kısmı tarafından tam olarak tanımlanır ( örneğin, Verilen terimi bir anahtar kelime olarak kabul edilebilir) ve bu nedenle, her yerde bulunan dilin resmi kısımlarını anlayan bir araç tarafından bir şekilde işlenebilir.
Çoğu BDD uygulaması, metin tabanlı DSL'leri ve belirtim yaklaşımlarını kullanır. Ancak, entegrasyon senaryolarının grafiksel modellemesi, örneğin test amaçları için pratikte de başarılı bir şekilde uygulanmıştır.
Özel takım desteği
Teste dayalı tasarım uygulamasına çok benzer şekilde, davranışa dayalı geliştirme, bir projede özel destek araçlarının kullanıldığını varsayar. BDD, davranışı daha insan tarafından okunabilir bir dilde tanımlamaya ek olarak yalnızca test kodunu değil, ayrı bir belge sağlamayı gerektirdiğinden, TDD'nin daha spesifik bir sürümü olarak görülebilir. Bu, testleri yürütmek, açıklamaları okumak ve ayrıştırmak ve test kodunu okumak ve yürütülecek ilgili test uygulamasını bulmak için iki aşamalı bir süreç gerektirir. Bu süreç, bir geliştirici olarak BDD ile çalışmayı biraz daha zahmetli hale getirir, ancak insan tarafından okunabilir doğası nedeniyle bu belgelerin değeri daha da az teknik bir hedef kitleye uzanır ve bu nedenle gereksinimleri ("özellikler") tanımlamak için bir iletişim aracı olarak hizmet edebilir. ).
Takım ilkeleri
Prensipte bir BDD destek aracı, TDD'yi destekleyen araçlara çok benzer şekilde, yazılım için bir test çerçevesidir. Bununla birlikte, TDD araçlarının testleri belirtmek için izin verilenler açısından oldukça serbest biçimli olma eğiliminde olduğu durumlarda, BDD araçları daha önce tartışılan her yerde bulunan dilin tanımıyla bağlantılıdır.
Tartışıldığı gibi, her yerde bulunan dil, iş analistlerinin davranışsal gereksinimleri geliştiriciler tarafından da anlaşılacak şekilde yazmalarına olanak tanır. BDD destek araçlarının ilkesi, bu aynı gereksinim belgelerini bir testler topluluğu olarak doğrudan yürütülebilir hale getirmektir. Spesifikasyonların yürütülmesini sağlayan teknik araçla ilgili nedenlerden dolayı bu sağlanamıyorsa, davranışsal gereksinimlerin yazılma tarzı veya araç değiştirilmelidir. Davranışsal gereksinimlerin tam olarak uygulanması araca göre değişir, ancak çevik uygulama aşağıdaki genel süreci ortaya çıkarmıştır:
- Takım, bir spesifikasyon belgesini okur.
- Takım doğrudan (örneğin her yerde dilin tamamen biçimsel parçalarını anlar Verilen örnekte yukarıdaki anahtar kelime). Buna dayanarak, araç her senaryoyu anlamlı maddelere ayırır.
- Bir senaryodaki her bir bireysel madde, kullanıcı hikayesi için bir test için bir tür parametreye dönüştürülür. Bu kısım, yazılım geliştiricilerin projeye özel çalışmasını gerektirir.
- Çerçeve daha sonra her senaryo için, o senaryodaki parametrelerle testi yürütür.
Dan North, çalışması kullanıcı hikayelerini kaydetmek için önerdiği şablona dayanan BDD'yi (JBehave ve RBehave dahil) destekleyen bir dizi çerçeve geliştirdi . Bu araçlar, kullanım durumları için metinsel bir açıklama kullanır ve diğer bazı araçlar (CBehave gibi) bunu izlemiştir. Ancak, bu biçim gerekli değildir ve bu nedenle başka biçimleri de kullanan başka araçlar da vardır. Örneğin, Fitnesse ( karar tabloları etrafında inşa edilmiştir) , BDD'yi yaymak için de kullanılmıştır.
Takım örnekleri
Farklı platformlar ve programlama dilleri için günümüzde projelerde kullanılan birkaç farklı BDD yazılım aracı örneği vardır.
Muhtemelen en bilineni Dan North, Elizabeth Keogh ve diğerleri tarafından geliştirilen JBehave'dir. Aşağıda bu projeden alınan bir örnek verilmiştir:
Game of Life'ın bir uygulamasını düşünün . Bir etki alanı uzmanı (veya iş analisti), birisi oyun ızgarasının başlangıç yapılandırmasını kurduğunda ne olması gerektiğini belirtmek isteyebilir. Bunu yapmak için, hücreleri değiştiren bir kişi tarafından atılan birkaç adıma bir örnek vermek isteyebilir. Anlatım kısmını atlayarak, bunu aşağıdaki senaryoyu düz metin belgesine yazarak yapabilir (bu, JBehave'in okuduğu giriş belgesi türüdür):
Given a 5 by 5 game When I toggle the cell at (3, 2) Then the grid should look like ..... ..... ..... ..X.. ..... When I toggle the cell at (3, 1) Then the grid should look like ..... ..... ..... ..X.. ..X.. When I toggle the cell at (3, 2) Then the grid should look like ..... ..... ..... ..... ..X..
Kalın yazı, girdinin bir parçası değildir; hangi kelimelerin resmi dil olarak kabul edildiğini göstermek için buraya dahil edilmiştir. JBehave, Verilen (bir senaryonun başlangıcını tanımlayan bir ön koşul olarak), Ne zaman (bir olay tetikleyicisi olarak) ve Sonra (tetiği izleyen eylemin sonucu olarak doğrulanması gereken bir son koşul olarak) terimlerini tanır . Buna dayanarak, JBehave senaryoyu içeren metin dosyasını okuyabilir ve onu tümcelere ayrıştırabilir (bir kurulum maddesi ve ardından doğrulanabilir koşullara sahip üç olay tetikleyicisi). JBehave daha sonra bu maddeleri alır ve bir test ayarlama, olay tetikleyicilerine yanıt verme ve sonucu doğrulama yeteneğine sahip koda iletir. Bu kod proje ekibindeki geliştiriciler tarafından yazılmalıdır ( Java'da , çünkü bu JBehave platformuna dayanmaktadır). Bu durumda, kod şöyle görünebilir:
private Game game;
private StringRenderer renderer;
@Given("a $width by $height game")
public void theGameIsRunning(int width, int height) {
game = new Game(width, height);
renderer = new StringRenderer();
game.setObserver(renderer);
}
@When("I toggle the cell at ($column, $row)")
public void iToggleTheCellAt(int column, int row) {
game.toggleCellAt(column, row);
}
@Then("the grid should look like $grid")
public void theGridShouldLookLike(String grid) {
assertThat(renderer.asString(), equalTo(grid));
}
Kodun, bir senaryodaki her tür yan tümce için bir yöntemi vardır. JBehave, ek açıklamaları kullanarak hangi yöntemin hangi cümleyle gittiğini belirleyecek ve senaryo boyunca çalışırken her yöntemi sırayla çağıracaktır. Senaryoda her fıkrada metni (örneğin, bir o maddede kodunda verilen şablon metni eşleştirmek için beklenen Verilen bir senaryoda "Y oyun tarafından bir X" biçiminde bir madde içerecektir olması bekleniyor) . JBehave, tümcelerin şablonlarla eşleşmesini destekler ve şablondan terimleri seçmek ve bunları parametre olarak test kodundaki yöntemlere geçirmek için yerleşik desteğe sahiptir. Test kodu, test edilen kodla etkileşime giren ve senaryoya dayalı olarak bir test gerçekleştiren bir senaryodaki her cümle türü için bir uygulama sağlar. Bu durumda:
theGameIsRunningBir yöntem tepki göstereceğini Verilen ilk oyun ızgara kurarak maddesi.iToggleTheCellAtBir yöntem reaksiyona girer zaman geçiş olayı kapalı pişirilerek madde madde tarif edilmiştir.theGridShouldLookLikeBir yöntem reaksiyona girerek sonra senaryo beklenen duruma oyun ızgara durumunu karşılaştırarak madde.
Bu kodun birincil işlevi, hikayesi olan bir metin dosyası ile test edilen kod arasında bir köprü olmaktır. Test kodunun test edilen koda erişimi olduğunu (bu durumda örneğinin Game) ve doğası gereği çok basit olduğunu unutmayın. Test kodu basit olmalıdır, aksi takdirde geliştirici testleri için testler yazmak zorunda kalır.
Son olarak, testleri çalıştırmak için JBehave, senaryoları içeren ve Gametest koduna bağımlılıkları (örnekleri gibi ) enjekte eden metin dosyalarını tanımlayan bazı tesisat kodu gerektirir . Bu tesisat kodu, JBehave'in teknik bir gereksinimi olduğundan ve doğrudan BDD tarzı test ilkesiyle ilgili olmadığından burada gösterilmemiştir.
Hikayeye karşı spesifikasyon
Davranış odaklı geliştirmenin ayrı bir alt kategorisi, kullanıcı hikayeleri yerine girdi dili olarak belirtimleri kullanan araçlar tarafından oluşturulur. Bu stilin bir örneği , aynı zamanda orijinal olarak Dan North tarafından geliştirilen RSpec aracıdır. Belirtim araçları, kullanıcı öykülerini test senaryoları için bir girdi biçimi olarak kullanmaz, bunun yerine test edilmekte olan birimler için işlevsel belirtimleri kullanır. Bu spesifikasyonlar genellikle kullanıcı hikayelerinden daha teknik bir yapıya sahiptir ve genellikle işletme personeli ile iletişim için kullanıcı hikayelerinden daha az uygundur. Bir yığın için bir belirtim örneği şöyle görünebilir:
Specification: Stack When a new stack is created Then it is empty When an element is added to the stack Then that element is at the top of the stack When a stack has N elements And element E is on top of the stack Then a pop operation returns E And the new size of the stack is N-1
Böyle bir belirtim, test edilen bileşenin davranışını tam olarak belirtebilir, ancak bir iş kullanıcısı için daha az anlamlıdır. Sonuç olarak, spesifikasyona dayalı test, BDD uygulamasında hikaye tabanlı testin bir tamamlayıcısı olarak görülür ve daha düşük bir seviyede çalışır. Spesifikasyon testi genellikle serbest formatlı birim testinin yerine geçer.
RSpec ve JDave gibi spesifikasyon test araçları, doğası gereği JBehave gibi araçlardan biraz farklıdır. JUnit gibi temel birim test araçlarına alternatif olarak görüldüğünden , bu araçlar hikaye ve test kodu ayrımından vazgeçmeyi tercih eder ve bunun yerine spesifikasyonu doğrudan test koduna yerleştirmeyi tercih eder. Örneğin, bir hashtable için bir RSpec testi şöyle görünebilir:
describe Hash do
let(:hash) { Hash[:hello, 'world'] }
it { expect(Hash.new).to eq({}) }
it "hashes the correct information in a key" do
expect(hash[:hello]).to eq('world')
end
it 'includes key' do
hash.keys.include?(:hello).should be true
end
end
Bu örnek, yürütülebilir koda katıştırılmış okunabilir dilde bir belirtimi gösterir. Bu durumda aracın bir seçim adlandırılmış yöntemleri ekleyerek test kod diline şartname dilini resmileştirmektir olduğunu itve should. Ayrıca bir belirtim ön koşulu kavramı vardır - beforebölüm, belirtimin dayandığı ön koşulları belirler.
Testin sonucu şöyle olacaktır:
Hash
should eq {}
includes key
hashes the correct information in a key
Üç Amigo
"Spesifikasyon Çalıştayı" olarak da anılan Three Amigos, Ürün Sahibinin, QA ve geliştirme ekibi gibi farklı paydaşlarla Şartname ile Örnek şeklinde gereksinimi tartıştığı bir toplantıdır. Bu tartışmanın temel amacı, konuşmayı tetiklemek ve eksik özellikleri belirlemektir. Tartışma aynı zamanda kalite güvencesi, geliştirme ekibi ve Ürün sahibi için gereksinimi zenginleştirmek ve doğru ürünü oluşturup oluşturmadıklarından emin olmak için birbirlerinin bakış açısını bir araya getirmek ve duymak için bir platform sağlar.
Üç Amigo
- İş - İş kullanıcısının rolü, yalnızca sorunu tanımlamaktır (ve herhangi bir çözüm önerme girişiminde bulunmamak)
- Geliştirme - Geliştiricilerin Rolü, sorunu çözmenin yollarını önermeyi içerir
- Test Etme - Test edenlerin rolü, çözümü sorgulamak, What-If senaryoları aracılığıyla beyin fırtınası için olabildiğince farklı olasılıklar ortaya çıkarmak ve sorunu çözmek için çözümü daha kesin hale getirmeye yardımcı olmaktır.
Ayrıca bakınız
- Örnek şartname
- Behat (PHP çerçevesi)
- Cynefin çerçevesi
- Concordion (Java çerçevesi)
- Gösterge (yazılım)
- Yasemin (JavaScript test çerçevesi)
- Squish GUI Tester (JavaScript, Python, Perl, Ruby ve Tcl için BDD GUI Test Aracı)
- Kullanım durumu