Pular para o conteúdo principal

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.

Comentários

Anônimo 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!
Anônimo 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!

Postagens mais visitadas deste blog

O Modelo Espiral

O objetivo do modelo espiral é prover um metamodelo que pode acomodar diversos processos específicos. Isto significa que podemos encaixar nele as principais características dos modelos vistos anteriormente, adaptando-os a necessidades específicas de desenvolvedores ou às particularidades do software a ser desenvolvido. Este modelo prevê prototipação, desenvolvimento evolutivo e cíclico, e as principais atividades do modelo cascata. Sua principal inovação é guiar o processo de desenvolvimento gerado a partir deste metamodelo com base em análise de riscos e planejamento que é realizado durante toda a evolução do desenvolvimento. Riscos são circunstâncias adversas que podem surgir durante o desenvolvimento de software impedindo o processo ou diminuindo a qualidade do produto. São exemplos de riscos: pessoas que abandonam a equipe de desenvolvimento, ferramentas que não podem ser utilizadas, falha em equipamentos usados no desenvolvimento ou que serão utilizados no produto final, etc.

O Modelo Evolutivo

O modelo evolutivo descreve um processo na qual o software deve ser desenvolvido de forma a evoluir a partir de protótipos iniciais. Para entender melhor este modelo é importante entender o que é prototipação (ou prototipagem). Prototipação é uma abordagem baseada numa visão evolutiva do desenvolvimento de software, afetando o processo como um todo. Esta abordagem envolve a produção de versões iniciais - "protótipos" - de um sistema futuro com o qual pode-se realizar verificações e experimentações para se avaliar algumas de suas qualidades antes que o sistema venha realmente a ser construído. Objetivos da Prototipação Num projeto de software várias questões podem ser respondida com a construcão de protótipos. Nas situações típicas de desenvolvimento podemos distinguir entre diferentes objetivos na prototipação: Exploratória - é quando o protótipo é usado para ajudar a esclarecer requisitos dos usuários com respeito ao sistema futuro. Uma prototipação também é exploratória

Sistemas Computacionais

Um sistema computacional (ou baseado em computador) é aquele que automatiza ou apóia a realização de atividades humanas através do processamento de informações. Um sistema baseado em computador é caracterizado por alguns elementos fundamentais. Hardware Software Informações Usuários Procedimentos ou Tarefas Documentação O hardware corresponde às partes eletrônicas e mecânicas (rígidas) que possibilitam a existência do software, o armazenamento de informações e a interação com o usuário. A CPU, as memórias primária e secundária, os periféricos, os componentes de redes de computadores, são exemplos de elementos de hardware. Um único computador pode possibilitar a existência de diversos sistemas e um sistema pode requisitar diversos computadores. O software é a parte abstrata do sistema computacional que funciona num hardware a partir de instruções codificadas numa linguagem de programação. Estas instruções permitem o processamento e armazenamento de informações na for