Archive for arquitetura de software

Estudando Arquitetura de Software

A muito tempo atrás , indo para banca de revista para comprar a primeira edição de uma revista recem lançada chamada Java Magazine, estava conversando com um amigo desenvolvedor de software sobre o futuro do desenvolvimento de software e chegamos a conclusão que o futuro seria das máquinas virtuais, e portanto do Java, no entanto tinha uma questão que eu não conseguia responder : “Eu não entendo para que é necessário um arquiteto de software.” Quando iniciei a desenvolver em Java entendi o porquê. Ao contrário do Delphi que vem com uma arquitetura “pronta” no Java você precisa definir a sua.

Embora nos anos subsequentes eu tenha efetivamente criado algumas arquiteturas para atender aos meus clientes eu o fazia de uma forma ad-hoc sem notar como esta área crescia. Ao ler o paper de Kruchten The Past,Present, and Future of Software Architecture observei esta evolução. Após ler este artigo me dei conta de como tinha evoluido a área e iniciei de imediato o processo de estudo, afinal : “nós(desenvolvedores de software) como os tubarões precisamos sempre nadar(aprender) para não morrermos afogados”[1].

Eu tenho um método para estudar um assunto. Inicio lendo um tutorial ou um paper sobre o assunto e depois passo para um livro sobre o assunto depois começo a fazer alguns projetos exploratórios na área. No caso do estudo de Arquitetura de Software fiz o mesmo só que tive a ajuda do excelente artigo sobre The Past,Present, and Future of Software Architecture. Que possui uma excelente lista de referências.

Os principais papers são:

  1. An Introduction to Software Architecture - neste paper é apresentado os estilos arquiteturais
  2. Foundations for the Study of Software Architecture é lançado a formula Software Architecture={elements, forms, rationale}
  3. 4+1 view architecture - uma única visão não é suficiente explana as 4+1 visões, excelente
  4. A Field Guide to Boxology - explana os trade offs entre os diversos estilos arquiteturais
  5. A Field Guide to Boxology(tabela)

Após ler os papers, você pode ler os livros:

  • Software Architecture , Perspectives on an Emerging Discipline, que repete muito do que eu já tinha lido nos papers
  • Software Architecture in Practice ,espetacular
  • Documenting Software Architectureestou atualmente lendo

Espero que este blog seja útil para aqueles que querem iniciar em arquitetura de software. Caso este seja seu caso deixe seu comentário.

  • 1. Sandro Alves[Escovador de bits]

Comments

O que é Arquitetura de Software?


Esta imagem de Escher ilustra bem a arquitetura de software. Atualmente estou lendo o livro Software Architecture in Practice que na página 23 define:

A arquitetura de software de um programa ou sistema de computador é a estrutura ou estruturas do sistema, que compreende os componentes de software, as propriedades externamente visíveis destes componentes e as relações entre eles.
[Bass 98]

Pretendo escrever um resumo do livro em breve.

Comments

O Que é um “Arquiteto de software”?

“O arquiteto ideal deve ser uma pessoa erudita, um matemático, familiarizado com estudos históricos, um estudioso aplicado de filosofia, conhecedor de música, que não desconheça medicina, detentor de saber jurídico e familiarizado com astronomia e cálculos astronômicos.” - Vitruvius, há aproximadamente 25 anos a.C.

Li isso na revista Mundo Java 25 uma definição desafiante e intimidante do que é um arquiteto, mas a definição de Vitruvus vale para o arquiteto de software?

Se formos interpretar literalmente a resposta é não. Então como podemos definidr um arquiteto de software? Para nós entendermos o que é um arquiteto de software precisamos saber qual o objeto do seu trabalho, a arquitetura de software.

A mais pragmática definição de arquitetura de software que eu li foi:

“Arquitetura de software é o conjunto de decisões de projeto que, se feitas incorretamente, podem causar o cancelamento do projeto.” – Eoin Woods

Simples e prática e é claro extremamente dependente do conhecimento que nós temos do que são decisões de projeto. Com esta definição fica fácil entender que o arquiteto de software é aquele que toma as decisões de projeto.

Logo você pode esta dizendo eu sou um arquiteto de software pois toda vez que programo eu tomo decisões de projeto. A verdade é que tais decisões são limitadas seja pelo conhecimento que você tem sobre as opções de projeto ou seja porquê quando você iniciou a desenvolver você já adotou uma arquitetura e não pode decidir nada diferente sob a pena de ter seu projeto cancelado.

Alguns ainda podem dizer que seu projeto não precisou de um arquiteto e não segue nenhuma arquitetura. Todo desenvolvimento de software envolve implicitamente a aceitação de uma arquitetura de software. Se você não sabe qual a arquitetura de software que esta usando então você corre o risco de tomar uma decisão de projeto que vá de encontro a sua arquitetura e tenha consequências nefastas ao seu projeto.

Usando a definição de arquitetura de software podemos dizer que arquiteto de software é aquele que toma as decisões de projeto com conhecimento que esta usando a melhor opção, opção esta que se consegue tendo um pleno conhecimento do peopleware, hardware e software ou como disse Vitruvius um amplo conhecimento sobre o ser humano e como ele interage com seu meio.

Recursos:
Definições de arquitetura de software

Comments