segunda-feira, 2 de julho de 2007

Design de Software

A atividade de design de software ainda é uma das mais mal compreendidas da engenharia de software. Muitos utilizam o termo para referir-se a definição de “como” o software ser desenvolvido em contraste como a definição do “que” o software deve fazer – determinado pela especificação dos requisitos.

Design de software também é utilizado como sinônimo de arquitetura de software. No entanto, a arquitetura do software, no sentido proposto na década de 90, como sendo a estrutura e o comportamento do software em termos de unidades abstratas interconectadas entre si – componentes e conectores – é apenas um dos produtos do design de software.

Na nossa visão, design é mais do que isso. Design é a atividade de criar, idealizar ou conceber o software. O resultado disso precisa ser expresso através de modelos ou protótipos do software. O design visa apresentar uma solução que satisfaça a especificação de requisitos (funcionais e não-funcionais), definindo o que precisa ser implementado. Este conceito de design é de certa forma contrario àquele tradicionalmente conhecido na engenharia de software, mas segue a linha proposta por Terry Winograd e outros no livro Bringing Design to Software. Precisamos trazer para o desenvolvimento de software a atividade de design que é realizada no desenvolvimento de qualquer produto industrial.

Design poderia ser traduzido tanto por projeto como por desenho. Entretanto, estes dois termos não expressam exatamente o que é design. Projeto é um termo mais abrangente do que design, pois se aplica a projeto de pesquisa, projeto de desenvolvimento de um produto e envolve planejamento, metodologia, cronograma, recursos, etc. Desenho é uma tradução utilizada no sentido de Desenho Industrial (industrial design), mas leva a conotação de que a atividade resume-se a elaborar os diagramas que descrevem os modelos do produto. Por estes motivos vamos utilizar o termo em inglês: design.

Segundo David Liddle, "o design de software é o ato de determinar a experiência do usuário com um pedaço de software. Não tem nada a ver sobre como o código opera internamente ou se ele é grande ou pequeno. A tarefa do designer é especificar de forma completa e não ambígua a experiência global do usuário". [David Liddle, Design of The Conceptual Model, em Winograd, T.]

O design de software compreende a concepção, especificação e prototipação da partes "externas" e "internas" do software. A parte externa compreende o modelo conceitual e a interface de usuário. A parte interna compreende a arquitetura de software e os algoritmos e estruturas de dados que implementam estes componentes.

Resumindo, o design de software envolve:
Design do modelo conceitual,
Design da interface de usuário,
Design da arquitetura de software e
Design dos algoritmos e estruturas de dados

Mais adiante, discutiremos estas atividades.

2 comentários:

Luciano Lobato disse...

Oi Jai,

Não conhecia teu blog. Bem legal ele :) Tô aprendendo bastante coisa.

Essa parte de design de software realmente é bem controversa, porque começa a cutucar em velhos paradigmas. Tem gente que usa design para referir-se ao projeto como um todo ou à todo tipo de projeto. Outros, como o Winograd e o Gui Bonsiepe, dizem que design é o projeto de somente as partes que serão experienciadas pelo usuário através da sua interação com a interface (desse ponto de vista, o design seria uma fase anterior à engenharia no processo de desenvolvimento).

Como eu adoto a posição do Bonsiepe, as vezes uso o termo projeto de design, o que algumas pessoas acham meio redundante... Mas essa é uma questão bem polêmica.

De qualquer forma, já assinei o rss e pretendo ver como ela se desdobra aqui n blog :)

[]s!

Marcia Mendonça disse...

Parabéns Jair pela iniciativa do blog. Muito legal ter informação de qualidade sobre o assunto e divulgar o conhecimento. Tenho certeza que o retorno para você será muito gratificante. Obrigada, acima de tudo!