SOVA Seminarium magisterskie i badawcze
Nazwa
Skrócony opis
Pełny opis
Przykładowe tematy prac magisterskich
Pomysły Maćka Broniarza
Pomysły Cezarego Bartoszuka
Pomysły Grześka Timoszuka
Nazwa
- Analiza, wizualizacja i optymalizacja oprogramowania
- Software Optimisation, Visualisation and Analysis (SOVA)
Skrócony opis
Seminarium jest przeznaczone dla osób zainteresowanych automatyczną analizą, optymalizacją i refaktoryzacją oraz wizualizacją oprogramowania. Interesują nas zarówno zagadnienia badawcze jak i praktyczne zastosowania oraz studia przypadków. Zajmujemy się opracowaniem podstaw, technik i narzędzi do automatyzacji wymienionych czynności. W ramach seminarium będziemy także badać wpływ nowych paradygmatów i technologii (np. NoSQL, cloud, HTML5 i Android, nowe języki programowania) na architekturę systemów, ich wydajność, wzorce i anty-wzorce projektowe i architektoniczne.
Pełny opis
Seminarium jest przeznaczone dla osób zainteresowanych automatyczną analizą, optymalizacją i refaktoryzacją oraz wizualizacją oprogramowania. Interesują nas zarówno zagadnienia badawcze jak i praktyczne zastosowania oraz studia przypadków. Zajmujemy się opracowaniem podstaw, technik i narzędzi do automatyzacji wymienionych czynności. Stopień trudności powstających prac magisterskich będzie dostosowany do potrzeb konkretnego studenta: od bardzo ambitnych zadań badawczych mających na celu powstanie nowych metodyk i procedur do mniej ryzykownych (ale jakże wdzięcznych!) zadań implementacyjnych przy realizacji konkretnych narzędzi.
W ramach seminarium będziemy także badać wpływ nowych paradygmatów i technologii (np. NoSQL, cloud, HTML5 i Android, nowe języki programowania) na architekturę systemów, ich wydajność, wzorce i anty-wzorce projektowe i architektoniczne. Zdefiniujemy te wzorce oraz opracujemy metody ich wykrywania i refaktoryzacji. Zaprojektujemy narzędzia wspierające automatyzację tych metod. Zaimplementujemy te narzędzia i zweryfikujemy ich użyteczność w praktyce.
Prowadzący seminarium a także biorący w nim udział doktoranci mają doświadczenie w przedsięwzięciach komercyjnych, m.in. w Google, Microsoft i startupach technologicznych.
Tematyka seminarium obejmuje (choć nie jest ograniczona do) następujące tematy:
- Architektura i projektowanie oprogramowania
- Wzorce architektoniczne i projektowe z uwzględnieniem nowych technologii
- Anty-wzorce wydajnościowe i jakościowe
- Automatyczna refaktoryzacja anty-wzorców, defektów i złych praktyk
- Automatyczna optymalizacja na poziomie aplikacji, języka oraz maszyny wirtualnej
- Analiza i prognozowanie jakości oprogramowania
- Eksploracja oprogramowania
- Badania empiryczne w inżynierii oprogramowania
- Synteza programów
- Wizualizacja oprogramowania
- Automatyczne generowanie testów
Przykładowe tematy prac magisterskich
- Użycie grafowych algorytmów grupowania w realizacji zadań wywiadu architektonicznego
- Analiza i ładowanie do hurtowni architektonicznej kodu programów w językach z silnymi typami.
- Analiza i ładowanie do hurtowni architektonicznej kodu programów w językach z luźnymi typami, np. duck typing
- statycznie w oparciu o graf
- dynamicznie z pomocą kieckera
- Formułowanie i wyznaczanie wartości miar oprogramowania w grafowym modelu hurtowni architektonicznej.
- Detect Tartars before they surround your camp. Sposoby wykrywania złych tendencji w przedsięwzięciach informatycznych
- Język do definiowania ograniczeń w grafie
- trzeba z Robertem porozmawiać
- trzeba co najmniej sprawdzić czy jest coś co chcemy sprawdzać a nie daje tego np.: sonar
- zmiany w organizacji struktury projektu w celu maksymalizacji określonych metryk (coupling factor)
- pakiety robione wg zależności a nie podział std podział funkcjonalny
- jaki to będzie miało wpływ na
- grafowy edytor kodu w javie (idea piszemy w javie - np edytor jak w ecl zapisujemy w grafie)
- duże i trudne
- trzeba by zrobić praktycznie pełny parser Javy (albo chocia obecny mocno poszerzyć)
- praca mocno inżynierska
Pomysły Maćka Broniarza
"Technologie ICT w rozwiązaniach Cloud Computing"
- budowa aplikacji dla chmury
- zarządzanie użytkownikami w aplikacjach cloud
- projektowanie aplikacji WWW dla systemów rozproszonych
- rozproszone systemy plików
- bazy noSQL
- rozkładanie obciążenia HTTP/HTTPS
- projektowanie skalowalnych aplikacji WWW
- wykorzystywanie zasobów on-demand
- wirtualizacja vs parawirtualizacja
- optymalizacja wykorzystania I/O
- projektowanie wirtualnego datacenter
- jak budować konwergentną infrastrukturę
- projektowanie multi-tier storage
- zapewnianie redundancji i wysokiej dostępności serwerów wirtualnych
- programowanie automatyzacji w datacenter
- jak wykorzystać software-defined networks
- monitorowanie i reagowanie na awarie
- Bezpieczeństwo Cloud Computing
- cloud computing - jak zarządzać bezpieczeństwem w chmurze
- monitorowanie miejsca przetwarzania danych
- federacyjne zarządzanie uprawnieniami i tożsamością
- audyt bezpieczeństwa aplikacji w chmurze
- ataki na systemy cloud computing
Pomysły Cezarego Bartoszuka
- Refactoring kodu jako transformacje grafu
Przy założeniu, że nasz model grafowy jest rozszerzony o abstrakcyjne drzewo składni na poziomie klas i metod możemy zaimplementować transformacje grafowe, które będą przeprowadzać popularne refactoringi takie jak: przenieś metodę w górę/w dół hierarchi dziedziczenia; wydziel metodę; wprowadź zmienną; zainlinuj metodę.
Niektóre refactoringi (jak np. przenieś metodę w górę hierarchi dziedziczenia) można zaimplementować raz do wielu języków. - Pomiar działań programistów w projekcie
Weźmy model grafowy rozszerzony o abstrakcyjne drzewa składniowe oraz o rewizje. Dodajmy do niego programistów jako autorów rewizji. Co możemy powiedzieć o aktywności / charakterze działań programistów?
Pomysły Grześka Timoszuka
- Wykrywanie bad smelli/antywzorców projektowych w grafowym modelu hurtowni architektonicznej.
- Dodawanie nowych języków (np.: Scala, Groovy) programowania do grafowaego modelu hurtowni architektonicznej.
- Dodanie do zależności wynikających z IoC (np.: Spring) do grafowaego modelu hurtowni architektonicznej i analiza wpływu tych informacji na hurtownię.
- Zdefiniowanie i dodanie nowych metryk (np.: Pokrycie kodu testami ale na poziomie metod) w oparciu o grafowy model hurtowni danych.
- Dodanie do grafowego modelu hurtowni danych informacji na temat modelu danych (np.: JPA, Hibernate) i analiza wpływu tych informacji na hurtownię.
- Automatyczne generowanie diagramów UML na podstawie danych zawartych w grafowej hurtowni danych.
- Wtyczka do IDE (np Elipse, IDEA), która pozwala składować kod programu od razu w grafowej hurtowni danych.
- Dodanie języka do definiowania ograniczeń i wymagań w grafowej hurtowni danych. Proste ograniczenia to np.: zakaz używania klasy/pakietu/biblioteki w projekcie, zakaz zmiany interfejsu. Proste wymagania to np.: liczba testów dla każdej
- wzorce projektowe na grafie
- trudne
- heurystyki?
- poszukiwanie nietestowanych scieżek wywołań