Escolar Documentos
Profissional Documentos
Cultura Documentos
Padrões de frontend.
SPA e PWA.
Tecnologias backend.
Frameworks: Hibernate, .NET Core, Quarkus, SpringBoot, Flask, Django, NodeJS, Express e
NestJS.
Containers.
Engine (Docker).
ENGENHARIA DE SOFTWARE
A meta principal da Engenharia de Software: desenvolver sistemas de software com boa relação
custo-benefício
Princípios:
● Formalidade: desenvolvimento segundo passos, com precisão
● Abstração: identificação de determinado fenômeno da realidade, aspectos mais relevantes, sem
preocupação com detalhes
● Decomposição: divide o problema em partes
● Generalização: resolução do problema de forma genérica, a fim de aproveitar soluções
● Flexibilização: permite ao software ser alterado, sem causar problemas para execução
Modelo de processos de software: conjunto de atividades, métodos, práticas e transformações que guiam
pessoas na produção. Deve ser definido caso a caso, considerando:
● Características da aplicação
● Tecnologia a ser adotada na sua construção
● Organização onde o produto será desenvolvido e a equipe de desenvolvimento alocada
4 Fases essenciais:
● Especificação de Software
● Desenvolvimento de Software (Projeto e Implementação)
● Validação de Software
● Evolução de Software
DICA: esboço do projeto se dá na modelagem
Engenharia de requisitos.
Fase mais crítica do desenvolvimento. Principais defeitos de software são oriundos da fase de especificação
de software.
Fases (Pressman):
● Concepção
● Levantamento
● Elaboração: análise de requisitos (expansão e detalhes)
● Negociação
● Especificação: documentação
● Validação
● Gestão
Fases (Sommerville):
● Estudo de viabilidade: gera relatório de viabilidade. Identifica se as necessidades do usuário podem
ser satisfeitas. Em geral rápida e preferencialmente barata. Como o sistema pode contribuir para a
organização? É rentável? É viável? Conjunto preliminar de requisitos de negócios, um esboço da
descrição. A direção decide prosseguir ou não.
● Elicitação e análise de requisitos: gera modelos de sistema: Descobre, identifica informações. Deve-se
trabalhar com os clientes para entender o domínio, serviços que devem ser fornecidos, desempenho
esperado.
○ Obtenção de requisitos: interação com os stakeholders para coletar requisitos. Descobrem-se
os requisitos de domínio
○ Classificação e organização: organiza os req em conjuntos coerentes (classificações de req)
○ Priorização e negociação: resolve conflitos e prioriza reqs.
○ Documentação de requisitos: podem ser formais ou informais. Documenta-se para os
engenheiros, não clientes. Em seguida volta a “obtenção de reqs”
● Especificação: gera requisitos de usuário e de sistema. Cria uma documentação que serve como
contrato entre as partes para ser consultado ao longo do desenvolvimento.
● Validação: estágio focado no cliente.
● Gestão (Gerenciamento de Reqs): fase onde ocorre a rastreabilidade e eventual mudança de
requisitos
Disponibilização da função de qualidade (Quality Function Deployment, QFD): técnica aplicável à atividade de
levantamento de requisitos a qual traduz as necessidades do cliente para requisitos técnicos de software.
Classificação de requisitos:
● Nível de abstração (requisitos funcionais ou não funcionais)
○ Requisitos de usuário: alto nível de abstração, para leigos
○ Requisitos de sistema: baixo nível de abstração, para pessoas técnicas
● Qualidade:
○ Req Normais: refletem objetivos e metas estabelecidos para o produto em reuniões com cliente
○ Esperados: implícitos e tão fundamentais que o cliente pode não declarar formalmente.
Exemplo: facilidade de uso, confiabilidade
○ Fascinantes: vão além da expectativa do cliente
● Evolução
○ Permanentes: estáveis
○ Voláteis: instáveis. Específicos para ambiente ou cliente em particular. Modificam-se quando o
sistema está em desenvolvimento ou em uso
■ Mutáveis: modificam em função do ambiente (ex.: baseados em leis fiscais)
■ Emergentes: não podem ser completamente definidos quando o sistema é especificado
e emergem à medida que a compreensão do cliente sobre o sistema se desenvolve.
Em geral só aparecem durante desenvolvimento
■ Consequentes: baseados em suposições de como o sistema será utilizado. O user
percebe a necessidade deles enquanto usa
■ De compatibilidade: que dependem de outro equipamento
● Funcionalidade
○ Funcionais: ações ou funcionalidades que o sistema deve fornecer. Tratam do que o sistema
deve (ou não) fazer. Podem ser descritos como requisitos de usuários (abstratos)
○ Não-funcionais: tratam de como o sistema deve fazer. Restrições e condições estipuladas
sobre as quais o sistema deve funcionar. Fazem parte da arquitetura técnica. Não se
preocupam diretamente com a funcionalidade. Incluem: custo, performance, segurança,
robustez, usabilidade etc. Utilizam-se medidas que possam ser testadas ou mensuradas.
Problema: req conflitantes - alto desempenho com baixo custo. Sub classificam-se quanto à
ORIGEM:
■ Produto: especificam comportamento do produto (rapidez, confiabilidade, usabilidade).
■ Organizacionais: derivados de políticas e procedimentos da organização do cliente e do
desenvolvedor (padrões, linguagem, tempo de entrega da documentação)
■ Externos: req legais, como o sistema interage com outros (interoperabilidade), ética
● Requisitos de domínio: derivados do domínio e refletem características do negócio. Podem ser
funcionais ou não-funcionais. Geralmente escrito no jargão do negócio e entendido pelo especialista
da área.
Gestão de backlog.
A versão de um novo produto que permite que uma equipe colete o máximo de aprendizado sobre os clientes
com a menor quantidade de esforço.
● Relação com feedback do cliente o mais cedo possível.
● Comum no projeto ágil, onde as entregas são rápidas e frequentes.
● NÃO É PROTÓTIPO
● NÃO DISPENSA QUALIDADE
Dívida do desenvolvedor:
● refatoração do código
● realização de testes
● atualização de bibliotecas
● documentação
Priorizar:
● Segurança
● Problemas que afetam desempenho
● Problemas que afetam mais áreas
● Problemas que afetam capacidade de adicionar funcionalidades
Story points (histórias de usuário): mede esforço e complexidade dentro da história de usuário. Vem do
Scrum.
● Planning poker: técnica para estimação de pontos. Cartas com valores da sequência Fibonacci (ou
outra). Para cada história, devs escolhem uma carta.
Ponto de função: unidade de medida do software. Indiretamente, permite medir custo do desenvolvimento e
quantidade esperada de erros, a depender de histórico da organização.
Análise de pontos de função (AFP) é um método para dividir o aplicativo de software em componentes
menores e medi-los em relação às suas funcionalidades para estimar o seu tamanho. Independe de
tecnologia, linguagem, plataforma.
● Sob ponto de vista do usuário, ou seja, não importa a complexidade da implementação, importa se é
percebida pelo usuário
● NÃO MEDE, ao menos não diretamente, esforço, custo, qualidade
Fronteira da aplicação: define o que é interno e externo à aplicação. Sua identificação é importante para
contagem correta dos pontos de função.
Tipos de contagem:
● Projeto de desenvolvimento: mede funcionalidades
● Projeto de manutenção/melhoria: mede modificações na aplicação existente. Somente evolutivas, e
não corretivas ou preventivas
● Projeto de aplicação/produção: mede aplicação instalada e em pleno funcionamento (baseline)
Para medir complexidade de ALI/AIE: quantidade de DER e RLR. Para medir complexidade de transações:
DER e ALR.
● Dados Elementares Referenciados (DER) ou Tipo de Dado (TD): atributo único, reconhecido pelo
usuário e não repetido
● Registros Lógicos Referenciados (RLR) ou Tipo de Registro (TR): subgrupo de dados elementares.
Ex.: endereço, formado por CEP, rua, número, etc.
● Arquivos Lógicos Referenciados (ALR): é um ALI/AIE que foi acessado por uma função de transação.
Pontos de Função Não-Ajustados (PFNA): multiplica total de funções de dado e transações por suas
respectivas complexidades:
Método Backfiring: estimativa dos pontos de função pelo tamanho físico (linhas de código x fator de
conversão dependente da linguagem de prog)
Análise e projeto.
Diversos fatores versam sobre qualidade, além das necessidades do usuário. Sistemas devem atender seus
objetivos
DICA: Atributos de qualidade ISO 9126 - Caixa Econômica Federal + Ministério Público da União (CEFMPU):
● Confiabilidade: quantidade de tempo que o software fica disponível, tolerância a falhas, facilidade de
recuperação.
● Eficiência: Grau de otimização de uso dos recursos
● Funcionalidade: grau de satisfação das necessidades declaradas, exatidão, segurança
● Manutenibilidade: facilidade de correção, de análise, de mudanças, estabilidade, testabilidade
● Portabilidade: facilidade de transportar de ambiente a outro, de instalação, de substituição
● Usabilidade: facilidade de uso, compreensão, operabilidade, aprendizagem
Gerenciamento de qualidade:
● Garantia de qualidade: foca no processo de desenvolvimento de software e prevenção de defeitos.
Orientado a processo e prevenção. Processos.
● Controle de qualidade: foca no produto entregue ao usuário e na detecção e correção de defeitos.
Orientado a produto e detecção. Ações.
DICA: Teste x depuração. Teste: estabelece a existência de defeitos; depuração: localiza e conserta.
● Defeito/Falta: ato insconsciente cometido por um indivíduo (ex.: instrução ou comando incorreto).
Causam erro.
● Erro/Engano: trata-se da ação humana que produz um resultado incorreto (ex.: lógica incorreta
escrita). Manifestação concreta de defeito. Diferença entre valor obtido e esperado.
● Falha: comportamento operacional do software diferente do esperado. Consequência de defeitos e
erros.
● D - causam E - causam F: DEF
Pressman:
● Defeito: problema de qualidade após o lançamento
● Erro: problema de qualidade antes
Qualidade:
● Em uso: Eficácia, produtividade, segurança, satisfação. Ponto de vista do usuário.
● Interna: atributos internos, como tamanho do código
● Externa: conjunto de atributos externos
Detecção de erros de código sem executá-lo. Revisão automática de código. Ex.: Compilador, inspeção.
Prática de encontrar defeitos no código e modelagem.
Analisadores estáticos: ferramentas de software que varrem o código em busca de defeitos e anomalias.
Possibilidade: revisão por pares.
Teste unitário.