1MEIC06T03: APLens - FEUP-MEIC-DS-2024-25/ai4sd GitHub Wiki

Vision

Misaligned architectural patterns lead to scalability, maintainability, and costly refactoring issues in software projects. With APLens there is no need to waste time analyzing multiple files in order to assess the quality of the implementation these patterns. Pick your GitHub repository and picking a specific architectural pattern and have your pattern implementation analyzed in a matter of seconds.

Research

POSA patterns - Pattern Oriented Software Architecture

Listing most common architectural patterns.

Cloud Adoption Patterns, Kyle Geen Brown

Architectural patterns on the cloud engineering context.

Domain Analysis

Class Diagram

image

Activity Diagram

image

Sequence Diagram

image

Architecture and design

image

Technologies

Frontend

For the implementation of the front-end ReactJS was the clear choice. It offers a component based architecture that helps isolating each components logic and, therefore, development. It's fast and scalable. For style, we picked Tailwind as it easily adapts to the ReactJS development process.

Backend

The back-end was built in Python, more precisely, Django. A powerful and pragmatic framework that combines the ease of use of Python and many buil-in operations ideal for creating a simple server.

Storage

We use Firestore - a cloud NoSQL database - to store user query histories. This way, our users will be able to consult older queries.

Development guide

Frontend

First, install the dependencies of the project

npm install

You're now ready to run the project

npm start

frontend/src/components

This file is where components are stored

frontend/src/pages

This file is where pages are stored

Backend

Run backend/manage.py

python3 manage.py runserver

Script

Run start_servers.sh to automatically initialize both backend and frontend.

./start_servers.sh

Security concerns

As our tool allows for the analysis of private repositories, we intend their data to remain that way. Therefore, we assure no data coming from a private repository will be used to train LLM models.

Quality assurance

🔧

How to use

  1. Choose the repository you want to analyze!
    • If the repository is private provide us with its access token.
  2. Pick the Pattern you want to analyze
  3. Submit and wait for your results!

How to contribute

0. Prerequisits

Be sure to have all the needed technologies installed (check them here)

1. Cloning the repository

Use a password-protected SSH key

git clone [email protected]:FEUP-MEIC-DS-2024-25/T06_G03.git

Clone using the web URL

git clone https://github.com/FEUP-MEIC-DS-2024-25/T06_G03.git

2. Contribute!

  • If you have any suggestion or bug report feel free to open an issue!
  • Feel free to contribute by making a Pull Request!

Sprints

This section is focused on showing the team's progress based on the teams' Scrum Board status in the end of each sprint.

Sprint 1

image

Retrospective

What Went Well

Everything we planned was implemented. In an early stage we already have a well composed product.

What Went Wrong

Even though we managed to successfully achieve our goal in this sprint, it would be undoubtedly better do distribute the workload evenly throughout the sprint.

What Can We Do To Improve

Try to do little tasks more often instead of allocating a lot of time on a specific day.

Sprint 2

sprint-2-final

Retrospective

What Went Well

A lot of work was done in the history of submissions and on the UI and UX of our web-app. The progression of our work was visible.

What Went Wrong

There were two tasks we didn't manage to finish.

What Can We Do To Improve

Be more thorough on the work we commit ourselves into.

Sprint 3

image

Retrospective

What Went Well

The final product of our project resulted in an easy and well design web app. It seamlessly allows for pattern implementation evaluation in any GitHub repository. We managed to finish most of our main goals.

What Went Wrong

The start of this last sprint's work, was a little delayed and this resulted in our team not being able to tackle some problems with would like to.

What Can We Do To Improve

Instead of allocating 3 hours to do a task, trying to do it in evenly separated blocks of time can help us starting to work earlier and better predict the actual effort we need to put into our endeavors.

Future Work

In order to finish our project's vision, there are two things to be implemented:

  1. Integrate Firestore on production so the already implemented submissions history can be used
  2. Fine tune the answers provided by the LLM

Happiness Meter

Levels (bad to excelent): 🗑 < 🤮 < 🤙 < 👌 < 🥰

Diogo Fernandes Hélder Costa Henrique Gardê Jaime Fonseca João Silva
Diogo Fernandes 🥰 🥰 🥰 🥰
Hélder Costa 🥰 🥰 🥰 🥰
Henrique Gardê 🥰 🥰 🥰 🥰
Jaime Fonseca 🥰 🥰 🥰 🥰
João Silva 🥰 🥰 🥰 🥰

Contributions - Team 3

Product Owner

Diogo Fernandes

Scrum Master

Hélder Costa

Developers

Henrique Gardê

Jaime Fonseca

João Silva