Projeto de software geralmente envolve a resolução de problemas e planejamento de um software solução. Isso inclui tanto a componente de baixo nível e projeto de algoritmos e de alto nível, arquitetura design.

Design de software é o processo de implementação de soluções de software para um ou mais conjunto de problemas. Uma das partes importantes do projeto de software é a análise de requisitos de software (SRA). É uma parte do processo de desenvolvimento de software que lista as especificações utilizadas em engenharia de software . Se o software é "semi-automática" ou centrada no usuário , design de software pode envolver usuário design de experiência produzindo um story board para ajudar a determinar as especificações. Se o software é totalmente automatizado (ou seja, nenhum usuário ou interface de usuário ), um projeto de software pode ser tão simples como um fluxograma ou um texto descrevendo uma seqüência planejada de eventos. Existem também métodos semi-padrão, como Unified Modeling Language e conceitos de modelagem Fundamentais . Em ambos os casos, alguns documentação do plano é normalmente o produto do cartão. Além disso, um projeto de software pode ser independente de plataforma ou específico de plataforma , dependendo da disponibilidade da tecnologia utilizada para o design.

Projeto de software pode ser considerada como a criação de uma solução para um problema na mão com capacidades disponíveis. A principal diferença entre análise e projeto de software é que a saída de um software de análise consistem de pequenos problemas para resolver. Além disso, a análise não deve ser muito diferente mesmo se ele é projetado por diferentes membros da equipe ou grupos. O projeto se concentra nos recursos, e pode haver vários projetos para o mesmo problema, dependendo do ambiente que a solução será hospedado. Eles podem ser sistemas de operações, páginas web, celular ou até mesmo o novo paradigma de computação em nuvem. Às vezes, o projeto depende do ambiente que ele foi desenvolvido, se se for criada a partir com confiança quadros ou implementado com adequados padrões de projeto ).

Ao projetar software, dois fatores importantes a serem considerados são a sua segurança e usabilidade.

Os conceitos de design fornecem ao designer de software com uma base a partir da qual podem ser aplicados métodos mais sofisticados. Um conjunto de conceitos fundamentais do projeto evoluiu. Eles são:

Abstração - Abstração é o processo ou resultado de generalização por redução do conteúdo da informação de um conceito ou um fenômeno observável, normalmente para reter apenas a informação que é relevante para um propósito particular.

Requinte - É o processo de elaboração. A hierarquia é desenvolvido pela decomposição de uma declaração macroscópica da função de forma gradual, até instruções de linguagem de programação são atingidos. Em cada passo, uma ou mais instruções de um dado programa são decompostos em instruções mais detalhadas. Abstração e requinte são conceitos complementares.

Modularidade - arquitetura de software é dividido em componentes chamados módulos.

Arquitetura de Software - Refere-se à estrutura geral do software e as formas em que essa estrutura fornece integridade conceitual para um sistema. A arquitetura de software bom vai render um bom retorno sobre o investimento com relação ao resultado desejado do projeto, por exemplo, em termos de desempenho, qualidade, prazos e custos.

Controlar Hierarquia - Uma estrutura de programa que representa a organização de um componente de programa, e implica uma hierarquia de comando.

Divisória estrutural - A estrutura do programa pode ser dividido tanto horizontalmente e verticalmente. Partições horizontais definir ramos separados da hierarquia modular para cada função do programa principal. O particionamento vertical sugere que o controle eo trabalho devem ser distribuídos de cima para baixo na estrutura do programa.

Estrutura de Dados - É uma representação da relação lógica entre os elementos de dados individuais.

Procedimento Software - Incide sobre o processamento de cada módulo individualmente

Ocultação de informações - Os módulos devem ser especificados e concebidos de modo que as informações contidas dentro de um módulo é inacessível para outros módulos que não têm necessidade de tais informações