Esta pesquisa foi realizada por alunos de turmas anteriores e não foi corrigida, portanto
sua missão é revisar com cuidado e alterar/complementar este post sempre anotando as 
referências (fontes) na parte inferior. Não se esqueça de que não deve ser um Copy/Paste
e sim uma síntese das pesquisas que fizer.


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 e 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 - Software Requirements Analysis). É uma parte do processo de desenvolvimento que lista as especificações utilizadas em engenharia de software . Se o software é "semi-automático" ou centrado no usuário, o design de software pode envolver a experiência de usuário (UX - User experience), produzindo um "history board" para ajudar a determinar suas 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 considerado como a criação de uma solução para um problema, através capacidades disponíveis. A principal diferença entre análise e projeto de software é que a saída de um software de análise consiste de pequenos problemas a serem resolvidos. Além disso, a análise não deve ser muito diferente, mesmo se projetada por diferentes membros de uma equipe ou grupo. O projeto se concentra nos recursos, e podem haver vários projetos para o mesmo problema, dependendo do ambiente em que a solução será hospedada. Eles podem ser sistemas de operações, páginas web, celular ou até mesmo o novo paradigma de computação em nuvem.

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


Conceitos Fundamentais

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.

Refinamento - É o processo de elaboração. A hierarquia é desenvolvida pela decomposição de uma declaração macroscópica da função de forma gradual, até que instruções de linguagem de programação são atingidas. 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