W trakcie przygotowywania | Under construction:

    • Mateusz Bajorek

      • Analiza i wizualizacja aktywności programistów w ramach ich dnia pracy

      • Analysis and visualization of programmers’ activities during their workday

    • Aleksander Buła,

      • Automatyzacja refaktoryzacji kodu z programowania imperatywnego do funkcyjnego

      • Automated refactoring from imperative to functional programming

    • Mateusz Dudziński,

      • Optimizing heap memory allocation (for speed and cache locality)

    • Krzysztof Kowalczyk,

      • Analiza porównawcza działania głębokich sieci neuronowych w środowiskach produkcyjnych

      • A comparative study of deep neural networks’ performance in production environments

    • Tomasz Miśków,

      • Analiza porównawcza odporności głębokich sieci neuronowych na zwodnicze przykłady

      • A comparative study of deep neural networks' immunity to adversial examples

    • Jan Żak,

      • Empirical analysis of (class) cohesion metrics

    • Piotr Nosek,

      • Automatyczna analiza oraz ocena estetyki i czytelności kodu

      • Automatic analysis and evaluation of code cleanliness and readability

    • Tomasz Gąsior,

      • Analiza ryzyka systemowego z danych blockchaina Ethereum

      • Systemic risk from Ethereum blockchain data

    • Marta Cieślak

      • Wyszukiwanie podobnych zmian w kodzie z wykorzystaniem technik uczenia maszynowego

      • Searching for similar code changes using machine learning

    • Marcin Dominiak,

      • ROOTKITY

      • ROOTKITS

    • Krzysztof Gromadzki,

      • Reefperf - narzędzie do porównywania wydajności aplikacji działających w chmurze

      • Reefpref - tool for cloud applications performance comparison

  • Vladimir Markovets

    • Analiza dynamiczna systemów informatycznych

    • Dynamic analysis of software systems

  • Michał Stachurski

    • Wizualizacja i analiza zmian zachodzących w projektach informatycznych

    • Visualization and analysis of changes occurring in software projects

  • Bartosz Franaszek,

    • Jakość kodu testowego

    • Quality of test code

  • Bartosz Frąckowiak,

    • Asercje architektoniczne

    • Architectural assertions

  • Grzegorz Timoszuk

    • Wizualizacja oprogramowania

    • Software visualization

Publikacje zaindeksowane | Published and indexed:

Proponowane | Suggested:

    • Wizualizacja | Visualization:

      • Wizualizacja dynamiki zmian zachodzących w rozwijanym kodzie źródłowym

      • Visualization of change dynamics in the source code being actively developed

      • Wizualizacja sieci społecznościowej programistów tworzącej się przy realizacji projektów

      • Visualization of programmers' social networks that get constituted during software development

      • Wizualizacja “bad smellsów” w kodzie

      • Visualization of source code bad smells (ie. anti-patterns)

      • Wizualizacja wskaźnika niestabilności oraz klas typu “helper”

      • Visualization of instability indicators and helper classes

      • Metody wizualizacji kodu źródłowego w repozytorium wspomagające analizę jakości

      • Methods of source code visualization that support quality analysis

      • Wizualizacja przepływu sterowania w runtime w oparciu o graf oprogramowania

      • Visualization of runtime flow of steering between software elements based of graph representation of software

    • Analiza | Analysis:

      • Analiza repozytorium pod kątem automatycznej refaktoryzacji kodu, na podstawie zadanych kryteriów

      • Software repository analysis for automatic source code refactoring, according to predefined software criteria

      • Analiza jakości i złożoności kodu, na podstawie zadanych kryteriów

      • Analysis of quality and complexity of source code, according to predefined criteria

      • Analiza pracy programistów na podstawie zmian w systemie kontroli wersji

      • Analysis of programmers performance based on version control changes

      • Wielokryterialna ocena progu wejścia i łatwości utrzymania kodu w projektach open-source

      • Multi-criteria assessment of entry and maintenance thresholds for open-source projects

      • Asercje architektoniczne

      • Architectural assertions

      • Wykorzystanie uczenia maszynowego w ocenie i wizualizacji jakości kodu na podstawie historii jego zmian

      • Using machine learning for assessment and visualization of source code quality based on its change history

      • Analiza dynamiczna systemów informatycznych

      • Runtime (dynamic) analysis of software systems

  • Optymalizacja | Optimisation:

    • Automatyczne przepakietowywanie / partycjonowanie kodu

    • Automatic re-packaging / partitioning of source code

    • Automatyczne przydzielanie zgłoszeń / zdań do programistów

    • Automatic assignment of programmers tasks / issues

    • Automatyczny / automatyzowany refaktoring z programowania imperatywnego do funkcyjnego

    • Automatic / automated refactoring from imperative to functional programming

    • Automatyczne wykrywanie wzorców i antywzorców związanych z poprawnością, wydajnością i współbieżnością

    • Automatic discovery of patterns and anti-patterns related to correctness, efficiency and concurrency

    • Usuwanie martwych fragmentów kodu na podstawie podsłuchiwania przepływu sterowania

    • Removing dead code based on runtime eavesdropping

    • Identyfikowanie i walidacja powiązań pomiędzy wymaganiami a kodem

    • Identification and validation of relations between user requirements and source code

Ukończone | Completed (apd.uw.edu.pl):

  • Jakub Grzywacz, XII 2020

Kryteria wyboru języka programowania: analiza na podstawie serwisów YouTube i Stack Overflow -- W pracy poszukiwano odpowiedzi na pytanie badawcze: Jakimi kryteriami kierują się programiści przy wyborze języków programowania? Aby odpowiedzieć na to pytanie, zastosowano mieszaną metodę badawczą: jakościową i ilościową. W pierwszej części dokonano analizy jakościowej treści wypowiedzi wybranych programistów zamieszczonych w serwisie YouTube. Następnie przeprowadzono analizę ilościową danych z serwisu Stack Overflow. W tym celu wykorzystano metodę Louvain badania skupisk w sieciach społecznościowych. Otrzymane rezultaty przedstawiono za pomocą wizualizacji. Na podstawie analizy zebranych danych zidentyfikowano kluczowe kryteria wyboru języka programowania, którym w pierwszej kolejności jest przeznaczenie tworzonej aplikacji. Następnym kryterium jest używana dotychczas platforma oraz podobieństwo z wcześniej wykorzystywanym językiem. Zauważalne jest również znaczenie dużych korporacji dominujących na rynku IT. Wprowadzeniem do badania jest przegląd literatury związanej z ich przedmiotem.

Selection criteria for programming language: an analysis based on YouTube and Stack Overflow -- The study attempted to answer the research question: What criteria do programmers use when choosing programming languages? To answer this question there was the use of mixed research methods: qualitative and quantitative. In the first part, the qualitative analysis of the content of selected programmers posted on YouTube was performed. Then, a quantitative analysis of data from Stack Overflow was conducted. For this purpose was used the Louvain method for community detection. The obtained results were visualized. Based on the analysis of the collected data, the key criteria for selecting a programming language were identified. In the first place, it is the purpose of the application. The next criterion is the platform used so far and the similarity with the previously used language. The importance of large corporations dominating the IT market is also noticeable. The introduction to the research is a review of the literature related to their subject.

  • Arkadiusz Tomczak, IX 2020

Narzędzia do automatycznej rekonstrukcji typów w języku Python -- Statyczna analiza kodu źródłowego programu pozwala na wczesne wykrywanie błędów. W statycznie typowanych językach jednym z elementów takiej analizy jest kontrola typów. Python jest dynamicznie typowanym językiem programowania, w który została dodana możliwość dopisywania podpowiedzi typów. Wiele projektów powstało przed wprowadzeniem stosownego modułu typowania. W celu ułatwienia migracji powstały narzędzia, które na podstawie obecnego kodu źródłowego są w stanie zrekonstruować informacje o typach. Wyróżniono dwa podejścia do ich implementacji – rekonstrukcja typów na podstawie statycznej analizy kodu źródłowego oraz dynamiczne zbieranie informacji o typach występujących w trakcie uruchomienia programu. W ramach tej pracy magisterskiej zostało wykonane porównanie dwóch narzędzi, każde reprezentujące inne podejście. Przeanalizowano wyniki ich uruchomienia na 24 wybranych otwartoźródłowych bibliotekach. Zdefiniowano miary, które pozwoliły na ocenę skuteczności narzędzi. Statyczny analizator PySonar2 rozpoznał średnio 67,23% funkcji w testowanych bibliotekach, w przypadku dynamicznego MonkeyType było to 74,13%. Porównano również zbiory typów w funkcjach, które zostały rozpoznane przez oba narzędzia. Narzędzie PySonar2 rozpoznało średnio 74,13% wszystkich typów, natomiast MonkeyType 85,88%.

Tools for automatic type reconstruction in the Python programming language -- Static code analysis can be used for early bug detection. Type checking is one of stages of such analysis in statically typed programing languages. Python is dynamic programming language which provides syntax for type hints. However, many projects were started before typing module was provided. Tools for automatic type reconstruction based on existing source code has been developed in order to make migration of such projects easier. Two approaches can be distinguished - type reconstruction based on static code analysis and dynamic types collection during runtime. This master's thesis contains comparison of two selected tools, each one represents different approach. Comparison was based on results of analysis of 24 open source Python libraries using selected tools. There has been defined measures used to evaluate tools effectiveness. PySonar2 (static code analyzer) on average has recognized 67,23% of functions, whereas dynamic MonkeyType has recognized 74,13%. Comparison of sets of types of function parameters and return values recognized by both tools was also conducted - on average PySonar2 recognized 74,13% of all types, MonkeyType recognized 85,88%.

  • Kamil Motyka, IX 2018

Analiza sieci współpracy w serwisie GitHub -- W pracy przedstawiono analizę sieci współpracy w serwisie GitHub. Współpracę pomiędzy użytkownikami stanowi tutaj bycie członkami wspólnego projektu. Dla sieci wyznaczono miary liczbowe charakteryzujące jej topologię, w tym zbadano rozkład stopni wierzchołków, wielkości spójnych składowych a także efekt rich-club. Następnie dołączono dane geograficzne o użytkownikach, aby zbadać rozmieszczenie użytkowników i współpracę na poziomie międzynarodowym.

Analysis of GitHub collaboration network -- The paper presents an analysis of the cooperation network on GitHub. Collaboration between users means being members of a common project. For such network, numerical measures characterizing its topology were determined, including the examination of the distribution of vertex degrees, the size of the connected components as well as the rich-club effect. Next, user geographic data was attached to explore user distribution and collaboration at the international level.

  • Joanna Wiszowata, IX 2018

Generowanie skrótów kodu z wykorzystaniem mocy grupy -- W pracy zostało zaprezentowane generowanie skrótów kodu z wykorzystaniem mocy grupy. Podejście składało się z trzech etapów. Na początku zebrałam przykłady skrótów kody używając stworzonej do tego celu aplikacji webowej Żniwiarz kodu. Następnie zastosowałam do zebranych danych kilka algorytmów uczenia maszynowego. Ostatnim krokiem była automatyczna ewaluacja wybranych algorytmów. Dodatkowo przeprowadziłam ankietę, w której użytkownicy mogli ocenić zaproponowaną technikę.

Generating shortcuts of code using the power of the crowd -- In the thesis, a crowdsourcing approach of generation shortcuts of source code is presented. The approach consisted of three phases. In the beginning, examples of shortcuts were gathered using developed for this purpose web application Żniwiarz kodu. Then, a few machine learning techniques were applied to collected data. Finally, the performance of chosen algorithms was evaluated automatically. Additionally, in order to get the opinions about the proposed technique and obtained results, a user study was conducted.

  • Adam Maśny, IX 2018

Casual contributors i ich wpływ na projekty open source -- GitHub jest obecnie najpopularniejszą platformą społeczną związaną z programowaniem. Zmienił sposób w jaki ludzie współpracują przy tworzeniu projektów open source. Łączy tradycyjne możliwości repozytoriów online, takie jak system kontroli wersji z funkcjami społecznościowymi oraz znacząco zmniejszył utrudnienia związane z wnoszeniem własnego wkładu do repozytoriów. GitHub umożliwia każdemu programiście tworzenie zmian, które mogą stać się częścią projektu, po prostu tworząc pull request. Zmniejszona trudność doprowadziła do powstania nowego zjawiska casual contributors: autorów zmian którzy nie angażują się w projekt przez dłuższy okres czasu ale tworzą swoje zmiany w taki sposób, że czują się niezobowiązani do dalszej pracy nad danym projektem. Praca przedstawia wyniki badań nad zjawiskiem casual contributors na platformie GitHub. Praca bada fenomen casual contributors z naciskiem na to jak powinni być oni zdefiniowani, jakie są ich cechy i czy istnieje znacząca różnica w ich pracy jeżeli chodzi o różne języki programowania.

Impact of casual contributors on open source projects -- GitHub is nowadays the most popular social coding platform. It has transformed the way people collaborate on open source software. It combines traditional capabilities of software forges, such as version control system with social features and significantly reduced the difficulty of contributing to repositories. GitHub allowed any developer to create changes that can become part of project by simply creating pull request. Lowered difficulty brought to existence new phenomenon: contributors who do not engage in projects for a longer period of time but remain casual, creating commits and moving on. This paper presents results of researching casual contributors on GitHub. This thesis studies the phenomenon of casual contributors with emphasis on how they should be defined, what their characteristics are and if there is any significant difference in their behaviour between various programming languages.

  • Łukasz Piesiewicz, IX 2018

Analiza zmian w kodzie źródłowym -- Praca z kodem źródłowym większego projektu wymaga czasem od programisty analizy zmian jakie w nim następowały, a w szczególności jak zmieniały się poszczególne funkcje. Niestety dostępne narzędzia oferują jedynie możliwość porównania wybranych wersji plików, a nie wyświetlenia historii zmian pojedynczych funkcji. Ta praca ma na celu stworzenie narzędzia dla języka Go, które pozwoliłoby użytkownikowi na przejrzenie zmian w wybranych funkcjach wskazanego projektu. Ponadto chcę wykorzystać stworzone narzędzie do analizy projektów open-source'owych skupiając się na tym, jak rozwijały się w nich funkcje.

Analysis changes in source code -- Working with source code of a larger project sometimes requires the programmer to analyze the changes that occurred in it, and in particular, how the specific functions changed. Unfortunately, available tools offer possibility to compare selected versions of files only, and not to display the history of changes in individual functions. The goal of this thesis is to create a tool for the programming language Go, which would allow the user to view the changes in selected functions of the indicated project. Moreover, I want to use the created tool for analysis of open-source projects focusing on how functions have been evolving.

  • Łukasz Łabęcki, VI 2018

Analiza emocji w komentarzach programistów -- Przedmiotem pracy jest analiza emocji w dużych projektach otwartoźródłowych. Z wykorzystaniem nowoczesnych narzędzi analizy sentymentalnej zbadano emocje wyrażane przez programistów w różnego typu komentarzach. Przeanalizowano wpływ czynników zewnętrznych na poziom wyrażanych emocji, jak również zależności pomiędzy nastrojem deweloperów i użytkowników danego oprogramowania.

Sentiment Analysis of Software Comments -- This work presents sentiment analysis of software comments in large open source projects. Using modern sentiment analysis tools, the emotions expressed by programmers were examined. Correlations between expressed emotions and different factors were analyzed. In particular, the relationship between the mood of software developers and users was investigated.

    • Aleksandra Pędzich, X 2016

Automatyczne przydzielanie zadań programistom -- Problem przydziału zadań w dużych projektach informatycznych jest nietrywialny. Zazwyczaj wyznaczony jest do tego jeden z programistów, jednak ja w swojej pracy spróbuję się zastanowić czy proces ten da się zautomatyzować. W tym celu omówię dotychczas stosowane w tej dziedzinie algorytmy i przedstawię własne rozwiązanie problemu. W moim podejściu zastosuję metodę bazującą na profilach aktywności, które będą budowane za pomocą technik uczenia maszynowego. Na podstawie przydzielonych dotychczas zadań dla każdego programisty określę jego/jej wkład w powstawaniu projektu, doświadczenie i tematykę, w której najlepiej się odnajduje. Następnie stworzona przeze mnie prototypowa wersja aplikacji dla nowego zadania zaproponuje listę osób najlepiej nadających się do wykonania zadania.

Automatic task assignment -- Task assignment in big software projects is nontrivial. Usually one of the programmers in project is supposed to assign people to tasks but I will try to consider whether this process can be automated. For this purpose, I will describe task assignment algorithms and present my own solution to the problem. In my approach, I am using a method based on activity profiles, which are created using machine learning techniques. Based on the tasks previously assigned to the programmer I will be able to describe programer's contribution in project development and his/her experience. In the end, prototype version of my application will suggest list of programmers who are best suited to fix new bug.

  • Jakub Szponder, IX 2016

Analiza i wizualizacja nieprzetestowanych zmian w kodzie programu -- Oprogramowanie cały czas ewoluuje i ulega zmianom. Testowanie jest niezbędne do tworzenia oprogramowania wysokiej jakości. Nieprzetestowane zmiany mogą być źródłem błędów. Ważne jest, by każdy nowo wprowadzony fragment kodu był odpowiednio sprawdzony. W swojej pracy chciałbym przedstawić narzędzie, które na podstawie informacji z systemu kontroli wersji umożliwi znajdowanie miejsc w kodzie, które zostały zmienione, a nie są sprawdzane przez żaden z istniejących testów. Raport taki można przedstawić w formie graficznej z podziałem na odpowiednie części programu. Dzięki takim wskazówkom, programista może w łatwiejszy sposób stworzyć testy, które obejmą wprowadzone przez niego zmiany.

Analysis and visualization of untested source code changes -- Software architecture is continuously evolving. Testing is essential to create high quality software. Untested code changes can lead to errors. It is important to verify correctness of every new piece of code. In my thesis I would like to introduce a tool which enables finding source code fragments that were changed lately and haven’t been tested based on information from version control system. The results of the analysis are visualized regarding program structure. Using the report programmer could easily create test cases that verify lately introduced changes.

  • Wojciech Donderowicz, IX 2016

Przyrostowe wykrywanie powielonych fragmentów kodu źródłowego -- Współczesne repozytoria kodu zawierają duże ilości zduplikowanych fragmentów kodu źródłowego. To zjawisko powoduje trudności w eliminacji błędów i refaktoryzacji. Problem pomagają rozwiązać narzędzia do wykrywania klonów w kodzie. W pracy przedstawiono przekrój metod detekcji duplikatów kodu oraz prototyp implementujący zaproponowany algorytm, a także wyniki testów sprawdzających jego skuteczność na wybranych otwartych repozytoriach kodu.

Incremental code clone detection -- Nowadays code repositories contain huge amounts of duplicated source code. This phenomenon causes difficulties in bugs elimination and code refactoring. The problem can be eased by tools designed for code clone detection. This paper contains an overview of code clone detection methods and a description of the proposed algorithm. It also contains details about the implementation of the mentioned algorithm and a report describing its performance on selected open code repositories.

  • Michał Duczyński, VI 2016

Anonimowa predykcja punktu docelowego podróży -- Obecnie usługi oparte o lokalizacje są powszechnie dostępne na telefonach komórkowych, jednak część użytkowników ceniących prywatność zdecydowała się wyłączyć te usługi. Niewiele uwagi zostało poświecone badaniu usług opartych o lokalizacje dla anonimowych użytkowników. Ta praca implementuje algorytm przewidywania punktu docelowego podróży -- SubSyn autorów Xue et al. 2013, i porównuje ten algorytm z nowym bazowym rozwiązaniem, używając większego zbioru tras.

Anonymous destination prediction -- Obecnie usługi oparte o lokalizacje są powszechnie dostępne na telefonach komórkowych, jednak część użytkowników ceniących prywatność zdecydowała się wyłączyć te usługi. Niewiele uwagi zostało poświecone badaniu usług opartych o lokalizacje dla anonimowych użytkowników. Ta praca implementuje algorytm przewidywania punktu docelowego podróży -- SubSyn autorów Xue et al. 2013, i porównuje ten algorytm z nowym bazowym rozwiązaniem, używając większego zbioru tras.

  • Marcin Komor, VI 2016

Uruchomienie, stabilizacja i optymalizacja obiektowej bazy danych -- W pracy przedstawiono optymalizacje obiektowego silnika bazy danych LoXiM. Usprawnienia przedstawione w pracy polegały przede wszystkim na całkowitym wyeliminowaniu wycieków pamięci oraz optymalizacji wykonywania zapytań poprzez wprowadzenie dla nich pamięci podręcznej (cache).

Running, stabilization and optimization of object database engine -- The thesis presents the optimization of object-oriented database engine LoXiM. The improvements shown in the thesis consisted primarily on the complete elimination of memory leaks and optimizing the performance of database by introducing cache for queries.

  • Bartłomiej Wójcicki, IX 2015

Wykorzystanie systemów uczących się do predykcji defektów oprogramowania -- Narzędzia do predykcji defektów mogą być używane do kierowania uwagi programistów na potencjalnie błędny kod. Dotychczasowe prace w tej dziedzinie skupiały się na identyfikacji defektów w projektach w językach C/C++ i Java. Powstały użyteczne narzędzia wykorzystujące statyczne metryki kodu do predykcji defektów. W tej pracy prezentuję, iż podobne metody można z powodzeniem zastosować do projektów w języku Python. Scary, narzędzie do predykcji defektów oprogramowania, które przedstawiam, osiągnęło prawdopodobieństwo wykrycia defektu na poziomie 0.531 przy prawdpodobieństwie fałszywego alarmu wynoszącym 0.24. Te wyniki są satysfkacjonujące, choć nie są tak dobre jak rezultaty osiągane przez czołowe narzędzia do predykcji defektów dla języków C/C++ i Java (prawdopodobieństwo wykrycia defektu równe 0.71, prawdpodobieństwo fałszywego alarmu równe 0.25).

Applying machine learning to software fault prediction -- Fault predictors can be used for targeting development efforts on potentially bug-prone code. Prior work in this field has focused on identifying faults in C/C++ and Java projects. Useful defect predictors using static code metrics have been developed. In this study, I show that similar methods can be successfully applied to Python projects. Scary, a fault prediction tool I present, achieved mean recall of 0.531 with mean false positive rate of 0.24 on 5 open-source Python projects. These results are satisfactory, though not as good as ones reported for leading defect predictors for C/C++ and Java (recall of 0.71, false positive rate of 0.25).

  • Paweł Nowosad, IX 2015

Integracja narzędzi do analizy projektów programistycznych z wykorzystaniem technik grafowych -- W ramach pracy rozwinąłem istniejące koncepcje i narzędzia w celu stworzenia nowego, zintegrowanego systemu. Nowy system pozwala w ergonomiczny sposób przeglądać oraz analizować architekturę projektów programistycznych w oparciu o zapytania grafowe; swobodnie przechodzić i dostosować postać grafu do potrzeb analizy; integruje istniejące narzędzia do analizy projektów i prezentuje ich wyniki bezpośrednio na grafie. W ramach pracy zintegrowałem nowy system z kilkoma istniejącymi narzędziami do analizy projektów i zademonstrowałem możliwości jego zastosowania na przykładzie jednego otwartego projektu programistycznego.

Integration of software analysis tools using graph techniques -- In my thesis I extended existing concepts and tools in order to create a new, integrated system. This system allows in efficient way to view and analyze the architecture of software projects thanks to the usage of graph queries; there is no restrictions in exploration and analysis of project graph representation; it integrates existing software analysis tools and displays their results directly on a graph. In my thesis I integrated the system with several existing software analysis tools and demonstrated his applicability on one example open source project.

  • Filip Daca, VI 2015

Metody wizualizacji kodu źródłowego w repozytorium wspomagające analizę jakości -- Możliwość przejrzystej wizualizacji dużego projektu informatycznego jest kluczowa przy analizie jego dotychczasowego rozwoju. Dobra wizualizacja - pozwalająca na skuteczną analizę, oprócz obrazowania elementów składowych kodu źródłowego oraz relacji między nimi, uwzględnia metryki ułatwiające ocenę jakości i złożoności badanych elementów kodu. Wzbogacenie wizualizacji o informacje pochodzące z systemu kontroli wersji badanego projektu, pozwala na prześledzenie przebiegu zmian w kodzie, a nawet na przewidywanie wystąpień usterek. W mojej pracy przeanalizowałem trzy stosowane obecnie metody wizualizacji kodu, wypracowałem wspólny dla nich model reprezentacji kodu, a uzyskane wyniki zaimplementowałem w nowym narzędziu do analizy i wizualizacji kodu. Wytworzone narzędzie udostępniłem publicznie na zasadach Open Source.

Repository source code visualization methods supporting quality analysis -- The ability to clearly visualize a large software is an important factor while analyzing project's evolution. Good visualization that allows effective analysis, in addition to reflecting source code elements with its relations, provides metrics that help determining quality and complexity of analyzed code elements. Expanding visualization with analyzed project's source code repository information, allows to track the code changes, and even predict potential bugs. In my thesis I have analyzed three common methods of source code visualization, established a mutual model to represent software code, and implemented the results in a new software visualization and analysis tool. Created tool is published and available on the Open Source terms.

  • Adam Wierzbicki, VI 2015

Wykorzystanie historii kodu do predykcji błędów -- Detekcja błędów oprogramowania stała się jednym z głównych wyzwań automatycznej inżynierii oprogramowania. Liczne badania wykazały, że ekstrakcja danych z repozytoriów jest w stanie zapewnić solidną podstawę dla predykcji błędów. W niniejszej pracy wprowadzam moje podejście do powyższego problemu opierające się na analizie historii kodu źródłowego oraz algorytmach uczenia maszynowego. Opisuję szczegółowo zaproponowane procedury obliczeniowe oraz wyjaśniam założenia, na których się opierają. Po podaniu podstaw teoretycznych, przedstawiam wyniki przeprowadzonych przeze mnie doświadczeń, które służą jako empiryczna baza dla oceny efektywności moich metod.

Using Code History for Defect Prediction -- Detection of software defects has become one of the major challenges in the field of automated software engineering. Numerous studies have revealed that mining data from repositories could provide a substantial basis for defect prediction. In this thesis I introduce my approach towards this problem relying on the analysis of source code history and machine learning algorithms. I describe in detail the proposed computational procedures and explain their underlying assumptions. Following the theoretical basis, I present the results of performed experiments which serve as an empirical assessment of the effectiveness of my methods.

  • Dominik Jastrzębski, VI 2015

Mapa zużycia energii przez aplikacje Android -- Monitorowanie zużycia energii w aplikacjach mobilnych stanowi szczególnie ważny aspekt projektowania rozwiązań informatycznych w tej dziedzinie. Dzięki zmniejszeniu poboru prądu z akumulatora, urządzenia mogą pracować dłużej bez konieczności ładowania, co wpływa pozytywnie na komfort użytkownika. W niektórych zastosowaniach (aparatura medyczna, sprzęt wojskowy) czas działania w warunkach braku zewnętrznego zasilania może mieć krytyczne znaczenie. W pracy przedstawię narzędzie do dynamicznej analizy aplikacji uruchamianych na platformie Android. Pozwala ono na wyznaczenie i wizualizację w kodzie zródłowym miejsc, które mogą być przyczyną nadmiernego zużycia energii. Wygenerowany raport pozwala programiście odnaleźć miejsca, które warto przeanalizować pod kątem zmian.

Map of energy consumption in Android applications -- Monitoring of energy consumption in mobile devices is an important part of IT solution design. If the energy consumption is reduced, a mobile device can work longer without necessity of recharging. For several applications (e.g. medical and military hardware), long uptime without external energy supply can be critical. In my thesis, I present a tool for run-time analysis of Android applications, which allows the programmer to trace and visualize energy hotspots in analyzed software. Generated reports contain information about suspicious code fragments, which potentially cause excessive energy consumption.

  • Tomasz Biczel, IX 2014

Analiza pracy programistów na podstawie historii zmian w systemie kontroli wersji -- Współczesne systemy komputerowe są często rezultatami dużych projektów programistycznych, realizowanych przez zmieniające się zespoły. Dlatego w dużym projekcie programistycznym nie jest łatwo wskazać osoby odpowiedzialne za poszczególne części systemu, szczególnie w przypadku zespołów rozproszonych geograficznie. Można podjąć próbę rozwiązania tego problemu wydobywając informacje z repozytorium kodu. W tej pracy wprowadzam (1) abstrakcyjny model wykresu ewolucji oprogramowania, (2) metodę analizy odpowiedzialności, która wykorzystuje ten model i (3) proof-of-concept narzędzia Magnify 2.0 implementującego tę metodę. Na koniec pokazuję przykłady zastosowania metody do projektów open-source, by potwierdzić lub odrzucić jej skuteczność. Sprawdzam również kilka hipotez dotyczących składu i dynamiki zmian zespołów programistycznych.

Analysis of software developers contributions based on the source code management systems -- Contemporary software systems are often results of giant projects conducted by fluctuating teams. In a huge project it is not easy to tell the person responsible for a given part of the system. It is particularly true in case of geographically dispersed teams. For an existing project such responsibility can be resolved using software repository mining. In this thesis I introduce (1) an abstract graph model of software evolution, (2) a method to analyse the responsibilities that uses this model and (3) a proof-of-concept tool Magnify 2.0 that supports this method. Finally, I apply the method to a number of open-source projects in order to confirm or refute its value. I also verify a number of hypotheses on the composition and dynamics of development teams.

  • Cezary Bartoszuk, VI 2013

Oględziny oprogramowania przy użyciu technik analizy grafów -- W dzisiejszych czasach oprogramowanie wymaga włożenia ogromnego wysiłku, aby pozostać proste w zrozumieniu i modyfikacji. Architektury systemów są często niezwykle trudne do rozgryzienia przez programistów. Dokumentacja przestaje być aktualna w ciągu kilku dni. Wszystkie z tych problemów można rozwiązać przy użyciu technik analizy i wizualizacji oprogramowania. Włączenie takich narzędzi w proces ciągłej integracji dostarcza zawsze aktualnego poglądu na projekt jako całość i pomaga trzymać rękę na pulsie. Ta praca prezentuje Magnify - nowy zestaw narzędzi do analizy i wizualizacji oprogramowania.

Software inspection through graph analysis techniques -- Nowadays complex software requires much discipline to remain understandable and modi.fiable. The architecture of a project can sometimes be very difficult to grasp by developers. Documentation gets outdated in a matter of days. These problems can be addressed using software analysis and visualization tools. Incorporating such tools in the process of continuous integration provides constant up-to-date view of project as a whole and helps to keep track on what is going on. This thesis introduces Magnify - a new toolset for software analysis and visualization.

  • Mateusz Błażewicz, III 2013

Język dziedzinowy do definiowania procesów typu workflow -- Głównym celem pracy jest zdefiniowanie języka sinBPM – języka dziedzinowego dedykowanego opisywaniu procesów biznesowych podlegających automatyzacji przy wsparciu systemów informatycznych. Motywacją stworzenia nowej notacji jest ułatwienie komunikacji pomiędzy osobami zainteresowanymi modelowaniem procesów biznesowych oraz zachęcenie do korzystania z ustalonej notacji większego grona użytkowników. Z tego względu, przy definiowaniu nowego języka szczególną uwagę poświęcono jego prostocie, czytelności i intuicyjności.

Domain specific language for defining workflow processes -- (no abstract in English)

  • Tomasz Turski, VI 2011

Projekt architektury systemów informatycznych Uniwersytetu Warszawskiego w oparciu o metodykę TOGAF -- Dobrą praktyką projektowania architektury IT w dużych organizacjach jest korzystanie ze sprawdzonych standardów i metodyk. Jedną z powszechnie stosowanych metodyk jest TOGAF. Jest to kompleksowy framework oraz zestaw narzędzi pozwalających na modelowanie architektury IT (architektury korporacyjnej) przedsiębiorstwa. W niniejszej pracy przedstawiono projekt architektury informatycznej Uniwersytetu Warszawskiego wykonany w oparciu o metodykę TOGAF. Dodatkowo, w pracy zostało opisane podejście do projektowania architektury informatycznej rekomendowane w metodyce TOGAF oraz sposób jego dostosowania do warunków Uniwersytetu Warszawskiego.

Architecture design of information systems at the University of Warsaw, based on TOGAF methodology -- (no abstract in English)

  • Tomasz Rogozik, II 2011

Platforma obliczeń rozproszonych typu "Human-based Computation" -- Istniejące modele obliczeń rozproszonych wymagają określonej architektury komputerów oraz sieci, w których są użytkowane, a jednostką obliczeniową w każdej z nich jest maszyna. Human-Based Computation jest podejściem do obliczeń rozproszonych wykorzystującym ludzi do rozwiązywania na skalę masową (w oparciu o WWW) zadań trudnych do rozwiązania przez komputer. Bazą do wprowadzenia takiego nowego modelu w życie jest stworzenie odpowiedniej platformy do definiowania zadań oraz ich rozwiązywania przez ludzi. Niniejsza praca przedstawia model obliczeń rozproszonych z udziałem człowieka oraz ukazuje świeżość tego pomysłu wraz z analizą czynników motywujących użytkowników do wykonywania zadań. Praca opisuje również szczegóły implementacji systemu umożliwiającego definiowanie zadań, zamieszczanie zadań na dowolnych dynamicznych stronach WWW, rozwiązywanie zadań i gromadzenie uzyskanych wyników. Przedstawiono również integrację aplikacji z jednym z popularnych serwisów społecznościowych, oraz analizę uzyskanych wyników.

Human-based distributed computation platform -- (no abstract in English)

  • Marcin Kosieradzki, I 2010

JLINQ-zintegrowany język zapytań dla języka Java -- W pracy przedstawiono implementację dwóch prototypów JLINQ oraz omówiono zagadnienia związane z rozszerzeniem składni Javy o zintegrowany język zapytań. Praca składa się z 12 rozdziałów. W rozdziale 1 przedstawiona została geneza pracy oraz uzasadnienie dla jej podjęcia. Rozdział 2 zawiera sformułowanie celu pracy oraz etapów, w jakich projekt był realizowany, natomiast w rozdziale 3 zdefiniowano podstawowe pojęcia używane w pracy: strumienie i wyrażenia lambda. Zasadniczą część pracy stanowią projekty dwóch prototypów rozszerzeń języka Java, nazwanych JLINQ1 i JLINQ2. Pierwszy z nich (JLINQ1), powstał w warunkach braku dostępu do dobrego otwartego kompilatora Java, drugi (JLINQ2) był tworzony w sytuacji, kiedy istniała możliwość skorzystania z open-source'owego projektu OpenJDK. Omówienie implementacji JLINQ1 zawiera: opis sposobu realizacja tłumaczenia JLINQ na język Javę (rozdział 5), opis realizacji tłumaczenia na język SQL (rozdział 6), przykłady zastosowania (rozdział 7) oraz opis gramatyki języka (rozdział 8). Omówienie implementacji JLINQ 2 obejmuje sposób realizacji wyrażeń lambda w kompilatorze Javac, opisany w rozdziale 9, oraz przykłady zastosowania, zaprezentowane w rozdziale 10. Praca kończy się podsumowaniem, w którym porównano oba rozwiązania (rozdział 11) oraz określeniem kierunków ewentualnego rozwoju projektu (rozdział 12).

JLINQ-Language-Integrated Query for Java -- (no abstract in English)

  • Patrycja Węgrzynowicz, IX 2007

Automatyczne rozpoznawanie wzorców projektowych -- Rozpoznawanie wzorców projektowych pozwala na lepsze zrozumienie koncepcji projektowych stojących za poszczególnymi konstrukcjami programistycznymi, a to gra kluczową rolę w inżynierii wstecznej umożliwiając szybszą i bardziej szczegółową analizę systemów o wysokim stopniu złożoności. W pracy przedstawiono metodę oraz prototypową implementację rozpoznawania wzorców projektowych na podstawie analizy kodu źródłowego programu. Opracowana metoda oparta jest o wyszukiwanie elementarnych relacji strukturalnych oraz behawioralnymi pomiędzy podstawowymi jednostkami programu. W pracy opisano zidentyfikowany zbiór elementarnych relacji oraz, z jego użyciem, zdefiniowano wzorce konstrukcyjne GoF. Prototypowa implementacja systemu rozpoznawania wzorców projektowych analizuje kod źródłowy programów w Javie. Zidentyfikowane jednostki programu oraz domknięcia tranzytywne relacji między nimi są przechowywane w relacyjnej bazie danych, a wyszukiwanie instancji wzorców projektowych odbywa się poprzez wykonywanie odpowiednio skonstruowanych zapytań SQL.

Automatic Detection of Design Patterns -- (no abstract in English)