\section{Arquitetura}
\label{sec:architecture}

Com base na extensa lista de requisitos funcionais definidos pelo Governo
Federal do Brasil, selecionamos alguns sistemas livres compor a solução
proposta para o novo SPB.  Avaliamos os sistemas que juntos poderiam fornecer o
maior subconjunto possível dos requisitos. Nós também estávmos convencidos de
que seria impossível fornecer todas as funcionalidade com uma única ferramenta.

Do ponto de vista da arquitetura, dois requisitos eram importantes para a nova
plataforma:

\begin{enumerate}
\item \textit{Integrar sistemas livres existentes}, com diferenças mínimas de suas versões originais;
\item \textit{Fornecer uma interface de usuário unificada} entre os diferentes sistemas, bem como a autenticação centralizada.
\end{enumerate}

A adoção de sistemas livres existentes e a minimização de mudanças feitas
localmente tiveram como objetivo ser capazes de atualizar para versões mais
recentes do software original, beneficiando de melhorias e manutenção feitas
pelas comunidades de projetos existentes. Proporcionar uma interface de usuário
consistente em cima dessas diferentes ferramentas era necessária para fazer a
transição entre os diferentes sistemas sem a percepção do ponto de vista dos
usuários, ou seja, sem confundi-lo através de interfaces completamente
diferentes ao interagir com o portal.

Para o primeiro requisito, identificamos quatro sistemas principais que exigiam
equipes especializadas para o trabalho no processo de integração. As equipes
aprenderam a desenvolver para seus sistemas designados e contribuíram para as
comunidades originais, de modo que a versão que usamos não era
significativamente diferente do original.

No final do projeto, o portal SPB foi composto por mais de dez sistemas, como
Colab, Noosfero, Mezuro, Gitlab, Mailman, Postfix e Munin. A seguir
apresentamos os mais relevantes deles, bem como como eles foram integrados na
plataforma.

\begin{itemize}

\item \textbf{Colab\footnote{\url{https://github.com/colab}}:} é uma plataforma
de integração de sistemas para aplicações web. Um de seus objetivos é permitir
que diferentes aplicações sejam combinadas de tal forma que um usuário não note
a mudança entre as aplicações. Para isso, a Colab oferece autenticação
centralizada, consistência visual, retransmissão de eventos entre aplicações e
mecanismo de pesquisa integrado.

\item \textbf{Noosfero\footnote{\url{http://noosfero.org}}:} é um software para
redes sociais e de colaboração. Além dos recursos clássicos de redes sociais,
ele também fornece recursos de publicação de conteúdo, como blogs e um CMS
(\textit{Content Management System}) de propósito geral. A maioria das
interações do usuário com o SPB é através do Noosfero: registro do usuário,
páginas do projeto e de documentação e formulários de contato.

\item \textbf{Gitlab\footnote{\url{http://gitlab.com}}:} é um gerenciador web
de repositório Git com páginas wiki e recursos de \textit{issue tracker}. O
Gitlab é uma plataforma livre e se concentra em oferecer uma solução holística
de desenvolvimento colaborativo em torno do repositório em uma única
plataforma.

\item \textbf{Mezuro\footnote{\url{http://mezuro.org/}}:} é uma plataforma para
coletar métricas de código-fonte com o objetivo de monitorar a qualidade
interna de projetos de software livre escrito em C, C ++, Java, Python, Ruby ou
PHP.

\end{itemize}

\begin{figure}[hbt]
  \centering
    \includegraphics[width=.5\linewidth]{figures/arch.png}
  \caption{Visão geral da arquitetura do novo portal SPB.}
  \label{fig:architecture}
\end{figure}

Do ponto de vista prático, a plataforma SPB foi implantada em 7 máquinas
virtuais com diferentes
funções\footnote{\url{https://softwarepublico.gov.br/doc/arquitetura.html}}. A
arquitetura conceitual da plataforma é apresentada na Figura
\ref{fig:architecture}. O Colab inicialmente lida com toda a interação do
usuário, redirecionando as solicitações para as ferramentas integradas. Ele
processa as respostas das ferramentas e aplica uma aparência visual
consistente, gerenciando também a autenticação e fornecendo uma busca
unificada: em vez de usar a funcionalidade de busca restrita redundante de cada
ferramenta, uma busca no portal SPB pode retornar conteúdo de qualquer uma
delas, sejam páginas web, postagens da lista de discussão ou mesmo
código-fonte.

