Apesar da divergência que existe entre vários autores a respeito da definição de
Projeto de
Software, posso conceituá-lo
como sendo um processo que, a partir dos requisitos do
software e do domínio do problema, decompõe o sistema em componentes e determina seus relacionamentos, especificando suas interfaces, descrevendo suas funcionalidades e identificando oportunidades para o reuso. Ou seja, uma vez que o domínio do problema foi esclarecido, o sistema é projetado com o apoio de uma ou mais metodologias de forma a resolver o problema em questão.
O
projeto do software é uma etapa crucial para o sucesso no desenvolvimento de qualquer sistema, pois com ele o projetista tem uma visão ampla do que deve ser feito e aplica a estratégia que melhor atende às necessidades do software. Esta estratégia deve considerar os seguintes aspectos na concepção de um software:
*
Extensibilidade – o software suporta a adesão de novas funcionalidades sem que haja necessidade de grandes alterações na sua arquitetura subjacente;
*
Robustez – o software deve estar preparado para tratar de situações imprevisíveis, como entrada de dados inválida e condições de baixa memória do computador;
*
Tolerância à falhas – o software não pode estar suscetível à falhas, ele deve ser resistente e capaz de recuperar possíveis ações de falha;
*
Compatibilidade – o software deve ter a capacidade de operar com outros produtos que também foram projetados para suportar a interoperabilidade;
*
Modularidade – o software resulta em componentes independentes e bem definidos, o que leva a uma melhor divisão de trabalho na equipe de desenvolvimento e melhor manutenção do sistema;
*
Reusabilidade – um software reusável permite que seus componentes modularizados possam ser reutilizados em casos que existam necessidades semelhantes em outros projetos.
No seu artigo, o autor Reeves conclui que a única documentação do software que atualmente satisfaz o critério de engenharia de software é o código fonte. Neste ponto eu discordo totalmente do autor, pois na minha concepção o projeto e a arquitetura do software são os critérios mais importantes. Uma vez que estes critérios são obtidos com uma boa qualidade, o código fonte pode ser implementado por qualquer programador a partir da documentação.