FluentArch: a modern approach for architectural conformance checking in C#
Abstract
Sistemas de software com longos ciclos de vida estão sujeitos à erosão arquitetural, comprometendo sua manutenibilidade e qualidade. No ecossistema C#, ferramentas como NetArch-Test.eNhancedEdition e ArchUnitNET auxiliam na verificação de conformidade arquitetural, mas apresentam duas limitações importantes: (i) operam sobre o bytecode compilado, restringindo a análise a construções pós-compilação e (ii) oferecem expressividade limitada na definição de regras personalizadas. Este trabalho apresenta o FluentArch, uma API fluente baseada no compilador Roslyn que permite a definição e verificação de regras arquiteturais diretamente sobre o código-fonte. A abordagem possibilita uma análise com granularidade mais fina, identificação precisa de dependências e suporte à criação de regras customizadas, superando restrições das soluções existentes. O uso prático da ferramenta em um projeto open source de terceiros evidenciou sua efetividade na detecção de violações arquiteturais e sua aplicabilidade em cenários reais, reforçando seu potencial como alternativa moderna e flexível para verificação arquitetural em sistemas C#. Demo vídeo: https://doi.org/10.6084/m9.figshare.29139881
References
ArchUnit. 2024. ArchUnit. [link] Acesso em: 14 maio 2025.
Ian F. Darwin. 1988. Checking C Programs with Lint. O’Reilly Media, Sebastopol, EUA.
ArchUnitNET Documentation. 2024. ArchUnitNET Documentation. [link] Read the Docs. Acesso em: 12 maio 2025.
Martin Fowler. 2005. Fluent Interface. [link] Acesso em: 16 julho 2025.
Negar Ghorbani, Tarandeep Singh, Joshua Garcia, and Sam Malek. 2024. Darcy: Automatic Architectural Inconsistency Resolution in Java. IEEE Transactions on Software Engineering 50, 6 (2024), 1639–1657.
Alessandro Gurgel, Isela Macia, Alessandro Garcia, Arndt von Staa, Mira Mezini, Michael Eichberg, and Ralf Mitschke. 2014. Blending and reusing rules for architectural degradation prevention. In 13th International Conference on Modularity. 61–72.
Jens Knodel and Daniel Popescu. 2007. A Comparison of Static Architecture Compliance Checking Approaches. In 6th Working IEEE/IFIP Conference on Software Architecture (WICSA). 12–21.
James R. Larus. 1989. Program Instrumentation and Run-Time Monitoring. In 11th Conference on Programming Language Design and Implementation (PLDI). 132–143.
MapsterMapper. 2024. Mapster. [link] GitHub repository. Acesso em: 20 maio 2025.
Microsoft. 2024. .NET Compiler Platform ("Roslyn"). [link] GitHub. Acesso em: 15 maio 2025.
Microsoft. 2025. Microsoft.CodeAnalysis. NuGet package. Disponível em: [link]. Acesso em: 20 maio 2025.
Gail Murphy, David Notkin, and Kevin Sullivan. 1995. Software Reflexion Models: Bridging the Gap Between Source and High-Level Models. In 3rd Symposium on Foundations of Software Engineering (FSE). 18–28.
NDepend. 2024. CQLinq Syntax. [link] Acesso em: 17 jul. 2025.
NDepend. 2024. NDepend. [link] Acesso em: 14 maio 2025.
NeVeSpl. 2024. NetArchTest.eNhancedEdition. [link] GitHub repository. Acesso em: 12 maio 2025.
David Lorge Parnas. 1994. Software aging. In 16th International Conference on Software Engineering (ICSE). 279–287.
Ori Roth and Yossi Gil. 2023. Fluent APIs in Functional Languages. ACM on Programming Languages 7, OOPSLA1, Article 105 (2023), 26 pages.
SonarSource. 2024. SonarQube. [link] Acesso em: 14 maio 2025.
Ricardo Terra and Marco Tulio Valente. 2009. A dependency constraint language to manage object-oriented software architectures. Software—Practice and Experience 39 (June 2009), 1073–1094.
Ricardo Terra, Marco Tulio Valente, Krzysztof Czarnecki, and Roberto S. Bigonha. 2015. A Recommendation System for Repairing Violations Detected by Static Architecture Conformance Checking. Software: Practice and Experience 45, 3 (2015), 315–342.
xUnit.net. 2024. xUnit.net. [link] Acesso em: 20 maio 2025.
