The location pairs coverage metric for testing of concurrent programs
- Global styles
- Apa
- Bibtex
- Chicago Fullnote
- Help
Abstract
Bu tezde koşut zamanlı çalışan programların test programı kapsam ölçümlerini yaparak, kullanıcının test programını geliştirmesi için kullanılabilecek konum çiftleri (Location Pairs) ölçütü sunulmaktadır. Location Pairs (LP) ölçütü akademi ve endüstride kullanılan koşut zamanlı çalışan programlarda sıklıkla karşılaşılan bir yüksek düzey hata örüntüsünden esinlenerek yaratılmıştır. Yüksek düzey hatalar koşut zamanlı çalışan bir programın bileşenlerinin arasında paylaşılan ve atomik olarak değiştirilmesi gereken değişkenlerin atomik olarak değiştirilmemesi sonucu ortaya çıkar. Bu tür hatalar alt düzey hatalardan farklıdır çünkü bu tür hataları önlemek için paylaşılan değişkenlerin tek tek korunması yerine birden fazla değişken birlikte korunmalıdır. LP ölçütü bir Java sanal makinesi ve statik yarış tespit aracı kullanılarak kodlanmıştır. İlk olarak statik yarış tespit aracı kullanılarak paylaşılan değişkenler tespit edilmektedir. İkinci adımda konum çiftleri paylaşılan değişkenler taranarak tespit edilmektedir. Daha sonra test programının yürütümü testin çalıştırılması esnasında sanal makine aracılığı ile gözlemlenmektetir. Son adımda gözlemler sonucu elde edilen ölçüm sonuçları kullanıcıya rapor edilmektedir. Kullanıcı bu sonuçlara göre daha fazla konum çiftini kapsayacak test senaryoları yaratabilir. Yaptığımız deneylerde de gösterdiğimiz gibi koşut zamanlı çalışan programların testlerinde LP ölçümü yüksek düzey hataların bulanmasında kullanıcılara yardımcı olmaktadır. In this thesis, we present a coverage metric, namely the Location Pairs (LP) coverage, for improving the testing of programs which have concurrently running components. The LP coverage metric is inspired by an execution pattern, encountered in practically used software, that leads to high-level concurrency errors. A high-level concurrency error occurs if a set of thread-shared variables are needed to be accessed atomically, but some threads access them non-atomically. These errors are different from low-level data races, because to avoid data races, protecting single variables is sufficient. The LP coverage metric aims to detect if a pattern of two consecutive actions is executed. The measurement of the LP coverage metric is implemented using a Java virtual machine and a static race detection tool. First, we detect accesses to shared-variables using static analysis of the race detection tool. Second, location pairs are extracted using this information. Then, we monitor the execution of the tests and record any consequent accesses to locations which accesses the same shared data. At the end, we report covered and uncovered pairs to the developer. The developer can create more interesting scenarios using coverage report and can potentially prevent high level concurrency errors by testing rarely executed scenarios. We run our tool on several Java benchmarks to show that the tool can practically be used on large-scale programs and the LP coverage metric helps better to find concurrency errors compared to existing coverage techniques for sequential programs.
Collections