Project description

Potential violations of architectural layering can be detected when changes in two separate layers are performed in a single commit; a proper layering abstraction would not require such contemporary changes. As an example, commits to both a driver and the main kernel of Linux can be detected with the following script.

# Obtain ordered list of SHA hashes
area_commits()
{
  git log --pretty='%H' master -- $1 | sort
}
# Count common elements
comm -12 <(area_commits kernel) <(area_commits drivers) | wc -l

The study will examine potential violations to answer the following research questions.

  • Why does code change concurrently in two layers?
  • What types of layering violations can be discerned?
  • What architectural principles or design patterns can be employed to avoid these?

Contacts about the project