Engenharia de software

Capítulos

Capítulo 1

Fundamentos e modelos de processos prescritivos

Conceito Descrição
Engenharia de Software Aborda a necessidade da área em razão da complexidade e diversidade de padrões para o desenvolvimento de softwares.
Processos de software Um conjunto de elementos e atividades próprias de um processo de desenvolvimento de software, como atividades metodológicas, ações de engenharia de software, tarefas, produtos de trabalho, garantia de qualidade e mecanismos de controle de mudanças para cada projeto.
Modelos de processos prescritivos Modelos tradicionais que surgiram para organizar e direcionar atividades de desenvolvimento de software, com capacidade de prescrever um conjunto de elementos e atividades. Denominados "tradicionais" e criados com objetivos específicos para presumir o desenvolvimento de software.
Modelos de processos ágeis Modelos que representam uma abordagem contrária aos modelos prescritivos, com iterações curtas onde o resultado é medido pelo produto pronto. Serão estudados em detalhes futuramente.
Modelo em cascata Um dos principais modelos prescritivos, representa as atividades fundamentais do processo: especificação, desenvolvimento, validação e evolução. Precede uma atividade de revisão ao final de cada fase para avaliar se o projeto pode passar à fase seguinte.
Fases do Modelo Cascata Incluem: Definição dos requisitos (serviços, restrições e metas são estabelecidos e definidos em detalhes); Projeto do sistema e do software (requisitos são repartidos entre hardware e software); Implementação e teste de unidade (projeto é realizado como um conjunto de programas ou unidades de programa que são implementadas e testadas); Integração e teste do sistema (unidades de programa são integradas e testadas como um sistema completo); Operação e manutenção (sistema é instalado, colocado em uso e aperfeiçoado à medida que novos requisitos são descobertos).
Desenvolvimento incremental Um dos principais modelos prescritivos, intercala as atividades de especificação, desenvolvimento e validação. O sistema é desenvolvido como uma série de versões (incrementos), cada uma acrescentando funcionalidades à versão anterior. A primeira versão pode ter funcionalidades limitadas, e versões posteriores adicionam mudanças.
Integração e configuração Um dos principais modelos prescritivos, baseia-se na disponibilidade de componentes ou sistemas reutilizáveis, focando na configuração desses componentes para um novo contexto e sua integração em um sistema.
Modelo Espiral Tem como característica principal a realização de ciclos de prototipação para a redução de riscos de projeto. É fortemente orientado a riscos, proposto por Boehm em 1986, apresentando a ideia em ciclos iterativos. Combina prevenção e tolerância a mudanças, assumindo que mudanças são resultado de riscos e incluindo atividades explícitas de gerenciamento de riscos para sua redução.
Modelo Sashimi Introduz a noção de que as fases do modelo cascata não são estanques, podendo um projeto estar simultaneamente em mais de uma fase.
Modelos V e W Focam no teste durante o desenvolvimento de software, indicando que o teste deve ser uma preocupação constante desde o início, não apenas uma etapa final.
Modelo orientado a cronograma Tem foco prioritário no desenvolvimento das funcionalidades mais importantes, deixando as demais para o final para garantir que as críticas sejam entregues no prazo em caso de atrasos.
Entrega em estágios Tem como prioridade planejar e entregar partes prontas do sistema antes do final do projeto.
Prototipação evolucionária Propõe o uso de protótipos para ajudar na definição dos requisitos e na exploração de soluções de projeto. Permite que todo o sistema, ou parte dele, seja construído rapidamente para entender ou esclarecer dúvidas. O protótipo evolui até se tornar um sistema que pode ser entregue.
Métodos para prototipação Incluem: Throw-away (protótipos descartáveis, usados apenas para estudar aspectos do sistema, entender requisitos e reduzir riscos); e Cornerstone (protótipos fundamentais, usados para compreender todos os aspectos do throw-away e que se tornam parte do sistema final, evoluindo até se tornar o sistema entregue).
Rational Unified Process (RUP) Um modelo híbrido de processo, contrário a metodologias que oferecem uma visão única do processo. Aborda quatro fases no processo de software. Reúne elementos de outros modelos, apoiando prototipação e entrega incremental. Cada fase pode seguir o modo iterativo, com resultados incrementais, e as quatro fases juntas podem ser aplicadas incrementalmente ou seguir a metodologia espiral.
Fases do RUP Incluem: Concepção (elaboração de plano de negócios, identificação de entidades externas e requisitos, avaliação da contribuição do sistema para o negócio); Elaboração (desenvolvimento dos requisitos e da arquitetura do sistema); Construção (implementação e testes do sistema); Transição (implantação do sistema em ambiente real).
Disciplinas do RUP O modelo apresenta um conjunto de seis atividades lógicas de projeto (Modelagem de negócios, Requisitos, Análise e design, Implementação, Teste, Implantação) e três de apoio (Ambiente, Gerenciamento de mudança e configuração, Gerência de projeto) para cada fase.

Capítulo 2

Principais métodos ágeis

Conceito Descrição
Métodos ágeis de desenvolvimento de software Surgiram em um esforço para sanar fraquezas da engenharia de software convencional, especialmente a sobrecarga dos modelos prescritivos em sistemas menores.
Desenvolvimento ágil Abordagem de desenvolvimento de software que busca sanar fraquezas da engenharia convencional.
Manifesto Ágil Documento que define a filosofia ágil, valorizando indivíduos e interações, software em funcionamento, colaboração com o cliente e resposta a mudanças, mais que processos e ferramentas, documentação abrangente, negociação de contratos e seguir um plano.
Agilidade Mais que uma resposta à mudança, abrange a filosofia do manifesto ágil. Incentiva comunicação fácil em equipe, entrega rápida de software operacional, cliente como parte da equipe e planos flexíveis. Pode ser aplicada a qualquer projeto, sendo essencial que a equipe possa adaptar tarefas, planejar compreendendo a fluidez, eliminar artefatos não essenciais e enfatizar entrega incremental.
Princípios do Manifesto Ágil Doze princípios que definem o espírito ágil, incluindo priorizar satisfação do cliente, aceitar mudanças, entregar software frequentemente, colaborar com cliente, confiar em indivíduos motivados, comunicação face a face, software em funcionamento como medida de progresso, desenvolvimento sustentável, excelência técnica, simplicidade, equipes auto-organizadas e autoavaliação regular.
Método XP (Extreme Programming) Um método ágil que requer seguir uma série de práticas relacionadas ao cliente, gerência, programação e testes.
Práticas do Método XP Incluem: Jogo de planejamento (equipe e cliente priorizam funcionalidades semanalmente); Programação em pares (dois programadores na mesma máquina, um usando a máquina e outro auxiliando); Padrões de codificação (equipe segue padrões para o código parecer ter sido desenvolvido pela mesma pessoa); Testes de aceitação (planejados e conduzidos com o cliente para verificar requisitos); Desenvolvimento orientado a teste (definir e implementar testes antes de programar a unidade); Refatoração (não fugir da refatoração para manter complexidade gerenciável); Integração contínua (integrar funcionalidade assim que viável para evitar surpresas).
Método FDD (Feature Driven-Development) Método ágil que enfatiza orientação a objetos, apresentado em 1997. Dividido em duas fases.
Fases do Método FDD Incluem: Concepção e planejamento (pensar antes de construir, em geral de uma a duas semanas); Construção (desenvolvimento iterativo do produto em ciclos de uma a duas semanas).
Disciplinas do Método FDD Na fase de Concepção e planejamento: Desenvolver Modelo Abrangente (uso de modelagem orientada a objetos); Construir Lista de Funcionalidades (decomposição funcional para identificar funcionalidades); Planejar por Funcionalidade (planejamento de ciclos iterativos baseado em funcionalidades). Na fase de Construção: Detalhar por Funcionalidade (design orientado a objetos); Construir por Funcionalidade (construir e testar software usando linguagem e técnica orientadas a objetos).
Método DSDM (Dynamic Systems Development Method) Modelo ágil baseado em desenvolvimento iterativo e incremental com participação ativa do usuário. Composto por três fases.
Fases do Método DSDM Incluem: Pré-projeto (projeto é identificado, negociado, orçamento definido, contrato assinado); Ciclo de vida (inicia com análise de viabilidade e negócio, depois entra em ciclos iterativos de desenvolvimento); Pós-projeto (período considerado de manutenção). A fase de Ciclo de Vida se concentra nas atividades de Exploração, Engenharia e Desenvolvimento em ciclos iterativos.
Princípios da filosofia DSDM Incluem: Envolvimento do usuário o tempo todo; Autonomia dos desenvolvedores para tomar decisões; Entregas frequentes de releases suficientemente boas; Eficácia das entregas na solução de problemas de negócio; Feedback dos usuários realimentando o processo; Reversibilidade de todas as ações; Previsibilidade do escopo e objetivos das iterações; Ausência de testes no escopo (considera teste fora do ciclo de vida).
Método Crystal Clear Método ágil criado por Alistair Cockburn em 1997, adequado para equipes pequenas (até 8 pessoas) que trabalham juntas. Propõe o uso de radiadores de informação, acesso fácil a especialistas, eliminação de distrações, cronograma e ajuste do método.
Ciclo de vida do Crystal Clear Organizado em três níveis: Iteração (estimação, desenvolvimento, celebração, dura poucas semanas); Entrega (várias iterações, entrega funcionalidades úteis em no máximo dois meses); Projeto (conjunto de todas as entregas).
Pilares do Crystal Clear Incluem: Entrega frequente de software utilizável; Melhoria reflexiva (equipe reflete regularmente sobre seu processo); Comunicação osmótica (equipe na mesma sala ou contíguas para ouvir conversas relevantes); Segurança pessoal (desenvolvedores podem falar sem medo); Foco (membros da equipe têm tópicos de alta prioridade para trabalhar tranquilamente); Cooperação; Ambiente técnico com integração frequente e testes automatizados.
Método ASD (Adaptive Software Development) Modelo ágil baseado em desenvolvimento cíclico iterativo. Fundamenta-se em três grandes fases.
Fases do Modelo ASD Incluem: Especular (início do projeto, planejamento de ciclos adaptáveis, definindo duração, ciclos, objetivos, componentes, tecnologias e tarefas); Colaborar (foco no desenvolvimento dos componentes especificados); Aprender (revisão da qualidade, testes e manutenção). As três fases formam um ciclo iterativo.
Método Scrum Modelo ágil para a gestão de projetos de software. Um dos conceitos mais importantes é o Sprint. Segue três fases na execução.
Fases do Método Scrum Incluem: Planejamento geral (estabelece objetivos gerais do projeto e arquitetura); Série de ciclos de Sprint (cada ciclo desenvolve um incremento do sistema); Encerramento do projeto (completa documentação e avalia lições aprendidas).
Papéis do Método Scrum Incluem: Scrum Master (responsável por manter o time em ambiente propício, facilitador e solucionador de conflitos); Product Owner (representa a voz do cliente, responsável pelo valor de negócio e necessidades dos clientes, indica requisitos mais importantes por sprint); Scrum team (responsável pelo desenvolvimento das entregas, entende requisitos, equipe de desenvolvimento geralmente com 6 a 10 pessoas).
Product Backlog (Scrum) Lista das funcionalidades a serem implementadas em cada projeto, como os requisitos. Não precisa ser completo no início do projeto, podendo começar com as funcionalidades mais evidentes.
Sprint (Scrum) Ciclo de desenvolvimento com poucas semanas de duração. No início de cada Sprint, a equipe prioriza elementos do Product Backlog para o Sprint Backlog.
Sprint Backlog (Scrum) Lista de funcionalidades a serem implementadas no ciclo (Sprint) que se inicia. O Product Owner deve mantê-lo atualizado durante o Sprint.
Reuniões no Scrum Incluem: Reuniões diárias (equipe se reúne diariamente para compartilhar o que fez ontem, o que fará hoje e quais impedimentos enfrenta); Reunião de Revisão (ao final de cada Sprint, para avaliar o que foi feito e receber feedback do Product Owner e stakeholders); Reunião de Retrospectiva (ao final de cada Sprint, para a equipe autoavaliar seu desempenho e identificar melhorias).

Capítulo 3

Projeto de arquitetura de software, requisitos e gerenciamento de configuração

Conceito Descrição
Projeto de arquitetura de software Tarefa de definir a estrutura geral do sistema, partindo do contexto geral para então distribuir os processos e componentes. Representa a estrutura de dados e componentes necessários, considerando o estilo de arquitetura, estrutura e propriedades dos componentes e suas inter-relações.
Projeto Definido como "um esforço temporário empreendido para criar um produto, serviço ou resultado único" (Guia PMBOK) e "um empreendimento planejado, orientado a resultados, possuindo atividades com início e término, para atingir um objetivo claro e definido" (Metodologia SISP).
Projeto de software Um processo em várias etapas onde representações de dados, estrutura do programa, características de interfaces e detalhes procedurais são sintetizados com base nos requisitos. Corresponde a um esquema preliminar pelo qual o software é construído, considerando domínios de dados, funcional e comportamental.
Estilo ou padrão de arquitetura Descrição abstrata, estilizada, de práticas recomendadas testadas e aprovadas em diferentes subsistemas e ambientes. O projeto de arquitetura considera o estilo que o sistema assumirá.
Etapas do projeto de arquitetura Incluem: Definir entidades externas com as quais o software interage; Identificar arquétipos arquiteturais (abstrações de elementos do sistema, similares a classes); Análise de estilos ou padrões de arquitetura alternativos; Implementação da arquitetura utilizando um modelo de processos.
Projeto conceitual Primeira fase do processo iterativo de projeto, apresenta ao cliente o que o sistema fará.
Projeto técnico (ou lógico) Deriva do projeto conceitual após aprovação do cliente, sendo um modelo mais detalhado focado nas definições técnicas para o desenvolvimento.
Padrões de arquitetura de software Diversos padrões que podem ser utilizados no desenvolvimento de sistemas, como arquitetura centralizada em dados, fluxo de dados, orientada a objetos, MVC, entre outros.
Arquitetura centralizada em dados Padrão comum em sistemas de informação, onde um repositório de dados (banco de dados) reside no centro e é acessado por outros componentes para modificar dados.
Arquitetura de fluxo de dados (Duto e filtro) Padrão aplicado quando dados de entrada devem ser transformados por uma série de componentes de processamento (filtros), onde cada componente realiza uma transformação de dados discreta.
Arquitetura orientada a objetos Padrão que fornece uma descrição abstrata do software, aproximando as estruturas do programa de conceitos do mundo real. Baseia-se em classes (conjunto de características e comportamentos) e objetos (instâncias de uma classe).
Arquitetura Modelo, Visão e Controlador (MVC) Padrão que foca em separar a apresentação e interação dos dados do sistema. Estruturado em três componentes lógicos: Modelo (gerencia dados e operações); Visão (define e gerencia como dados são apresentados ao usuário); Controlador (gerencia interação do usuário e a passa para Visão e Modelo).
Levantamento de requisitos Primeira etapa na construção de um sistema. Processo no qual engenheiros de software trabalham com clientes e usuários para obter informações sobre o domínio da aplicação, serviços, desempenho, restrições, etc..
Requisitos de um sistema Descrições do que o sistema deve fazer, os serviços que oferece e as restrições a seu funcionamento. Refletem as necessidades dos clientes. Classificados como funcionais e não funcionais.
Descoberta de requisitos Processo de reunir informações sobre o sistema requerido e sistemas existentes, separando requisitos de usuário e sistema de fontes como documentações, usuários e sistemas similares.
Técnicas de levantamento de requisitos Incluem: Entrevistas (formais/informais com usuários e partes interessadas); Cenários (descrições textuais ou diagramáticas de interações); Casos de uso (abordagem estruturada de cenários, identificando atores e tipo de interação); Etnografia (observação para compreender processos operacionais).
Especificação de requisitos Processo de escrever os requisitos de usuário e de sistema em um documento de requisitos.
Métodos de especificação de requisitos Incluem: Sentenças em linguagem natural (requisitos escritos em frases numeradas); Linguagem natural estruturada (requisitos em linguagem natural em formulário/template); Notações gráficas (modelos gráficos, como diagramas UML, suplementados por texto); Especificações matemáticas (baseadas em conceitos matemáticos, podem reduzir ambiguidade mas são menos compreendidas por clientes).
Gerenciamento de configuração e mudança Conjunto de atividades para gerenciar alterações em sistemas de software, identificando artefatos e controlando mudanças.
Atividades da gestão de configuração de software Incluem: Controle de versão (gerenciar diferentes versões de artefatos); Construção de sistema (reunir componentes, dados e bibliotecas para criar executável); Gerenciamento de mudanças (controlar solicitações de mudança, avaliar custo/impacto e decidir implementação); Gerenciamento de lançamentos (preparação de versões do sistema).
Controle de versão (Git) Sistema de controle de versão. Permite criar, gerenciar e trocar entre ramificações (branchs).
Ramificação (Git) Permite criar novas linhas de desenvolvimento separadas. Podem ser associadas à ramificação principal (master).
GitHub Plataforma para hospedagem de projetos gerenciados com Git.
Manutenção de software Processo geral de mudança em um sistema após sua liberação para uso.
Tipos de manutenção de software Incluem: Correção de defeitos; Adaptação ambiental; Adição de funcionalidade. Na prática, as distinções podem ser tênues.

Capítulo 4

Estimativas de esforço e custo para desenvolvimento de softwares

Conceito Descrição
Estimativas de esforço para desenvolvimento de softwares Processo para realizar estimativas adequadas de tempo, tamanho da equipe e custo para aplicação de modelos de processos e arquiteturas.
Análise de Ponto de Função (APF) Técnica de medição do tamanho funcional de um software. Mede o que o software faz, não como ele foi construído, baseada nos requisitos lógicos do usuário. Uma medida de tamanho funcional, usada com outras variáveis para derivar produtividade, custo e esforço.
Tamanho funcional de um software O que é medido pela Análise de Ponto de Função.
Processo de contagem de pontos de função Dividido em seis etapas: determinar tipo de contagem; identificar escopo e fronteira; contar funções (dados e transação); determinar pontos não ajustados; determinar fator de ajuste; calcular pontos ajustados (AFP).
Tipos de contagem (APF) Incluem: Projeto de desenvolvimento (novo projeto); Projeto de melhoria (funções adicionadas, modificadas, eliminadas em projeto existente); Aplicação (projeto finalizado).
Escopo de contagem (APF) Determinar se a contagem foca em um ou mais sistemas ou partes deles. Define quais funções serão incluídas.
Fronteira da aplicação (APF) Estabelece um divisor entre componentes do aplicativo e de outros aplicativos. É a linha que separa uma aplicação de outra.
Funções tipo dados (APF) Referem-se a funcionalidades para armazenamento de dados da aplicação, caracterizadas como arquivos lógicos (ALI e AIE).
ALI (Arquivos Lógicos Internos) (APF) Arquivos lógicos mantidos dentro da fronteira da aplicação. Ex: arquivos de configuração, tabelas de BD mantidas pela aplicação.
AIE (Arquivos de Interface Externa) (APF) Arquivos lógicos mantidos fora da aplicação ou lidos de outra. Ex: dados de segurança, dados salariais em outra aplicação.
RLR (Registros Lógicos Referenciados) (APF) Subgrupo de DER, reconhecido pelo usuário. Ex: uma tabela do banco de dados.
DER (Dados Lógicos Referenciados) (APF) Campo único, reconhecido pelo usuário, não repetido. Ex: um atributo de uma tabela do banco de dados. Chaves estrangeiras não são contadas como DER.
Funções tipo transação (APF) Representam funcionalidades de processamento de dados do sistema, classificadas em EE, SE e CE. Denominadas processos elementares.
Processos elementares (APF) A menor unidade de uma função disponível ao usuário, única e independente.
EE (Entrada Externa) (APF) Processo elementar que manipula dados ou informações de controle originados fora da fronteira, com intenção de manter (incluir, alterar, excluir) ALI ou alterar comportamento do sistema.
SE (Saída Externa) (APF) Processo elementar que envia dados ou informações de controle para fora, com intenção de apresentar informação ao usuário via lógica de processamento (não apenas recuperação). Ex: Relatórios com totalização, informações gráficas.
CE (Consulta Externa) (APF) Processo elementar que envia dados ou informações de controle para fora, com intenção de apresentar informação via simples recuperação de dados de ALI/AIE. A lógica de processamento não deve conter fórmulas/cálculos. Ex: Informações com formato gráfico.
Pontos de função não ajustados (AFP não ajustados) Total obtido somando-se os pontos das funções tipo dados e funções tipo transação. Representam o tamanho funcional da aplicação.
Fator de ajuste (APF) Fator derivado dos itens de influência que afetam o tamanho funcional de um aplicativo. Calculado por: (pontos de influência x 0,01) + 0,65.
Itens de influência (APF) 14 características intrínsecas a um aplicativo que afetam seu tamanho funcional, cada uma pontuada de 0 a 5. Ex: Comunicação de dados, Funções distribuídas, Performance, Interface com o usuário, Reusabilidade, Facilidade de mudanças, etc..
Pontos de função ajustados (AFP) Obtidos multiplicando os pontos de função não ajustados pelo fator de ajuste. Processo opcional; os pontos não ajustados podem ser considerados AFP.
Duração e custo de um projeto (Estimativa) Para calcular o custo, é necessário saber o esforço total e o custo por hora/mês de trabalho. O custo é obtido multiplicando o esforço total pelo custo por hora/mês. A duração do projeto em horas por ponto de função varia por linguagem/tecnologia.
Esforço (Estimativa) O esforço total do desenvolvimento é calculado com base no tamanho funcional (AFP) e na produtividade (pontos de função produzidos por hora/mês). Obter histórico de projetos ajuda a estimar com maior precisão.
Pontos de Casos de Uso (PCU) Técnica de estimativa surgida em 1993, considerada mais simples que APF. Baseia-se na análise da quantidade e complexidade de atores e casos de uso, gerando pontos não ajustados (UUCP) e depois ajustados (UCP) pela aplicação de fatores.
UUCP (Pontos de caso de uso não ajustados) Soma dos pontos atribuídos aos casos de uso e do peso não ajustado dos atores.
UCP (Pontos de caso de uso ajustados) Obtidos multiplicando-se o total de UUCP pelo TCF e EF.
Complexidade dos atores (PCU) Definida como simples (pessoa), média (outro sistema), ou complexa (outro sistema com interface gráfica). Cada ator é contado uma única vez.
Complexidade dos casos de uso (PCU) Definida de três formas: por número de transações (simples: até 3, média: 4-7, complexo: acima de 7); por quantidade de classes necessárias (simples: até 5, média: 6-10, complexo: mais de 10); por análise de risco (simples: baixo risco, média: padronizado, complexo: não padronizado, alto risco). Somente casos de uso completos são contados.
Fatores técnicos (PCU) Treze fatores que recebem pontuação de 0 a 5, usados na análise de PCU ajustados. Ex: Sistema distribuído, Performance, Segurança, Portabilidade.
TCF (Fator de complexidade técnica) (PCU) Fator calculado com base nos 13 fatores técnicos: 0,6 + (0,01 * total da soma dos pontos de fatores técnicos).
Fatores ambientais (PCU) Oito fatores específicos às características da equipe de desenvolvimento, usados na análise de PCU ajustados. Ex: Familiaridade com o processo, Experiência com a aplicação, Motivação, Equipe em tempo parcial.
EF (Fator ambiental total) (PCU) Fator calculado com base nos 8 fatores ambientais: 1,4 – (0,03 x total da soma dos fatores ambientais).
Pontos de Histórias (PH) Técnica de estimativa variante da APF, preferida em métodos ágeis como Scrum e XP. Medida de esforço relativa à equipe de desenvolvimento, não de complexidade funcional.
História de usuário (PH) Explicação informal e geral sobre um recurso de software, escrita sob a perspectiva do usuário final. A estimativa de pontos de história pode ser feita subjetivamente pela equipe ou atribuindo pontos de acordo com o tempo de desenvolvimento.
Ksloc (Miles de Linhas de Código Fonte) Métrica rudimentar de estimativa baseada na quantidade de linhas de código fonte. Pode ser estimada pela equipe com valores otimista, pessimista e esperado.
Modelo COCOMO (Constructive Cost Model) Principal modelo de estimativa de tamanho de equipe e tempo linear de desenvolvimento. Considera Ksloc e outros fatores para estimar esforço, tempo e pessoas. Possui três modos de implementação (básica, intermediária, avançada) e considera o tipo de projeto (orgânico, semidestacado, embutido).
Esforço (E) (COCOMO) Esforço estimado em desenvolvedor/mês. Calculado com base em Ksloc e constantes (modelo básico) ou Ksloc e fatores influenciadores de custo (modelos intermediário/avançado).
Tempo linear de desenvolvimento (T) (COCOMO) Tempo sugerido em meses corridos. Calculado com base no esforço e constantes.
Número médio de pessoas (P) (COCOMO) Número médio de pessoas recomendado para a equipe. Calculado dividindo o esforço pelo tempo linear de desenvolvimento (E/T).
Fatores influenciadores de custo (COCOMO Intermediário/Avançado) 15 fatores que afetam o esforço, relacionados a produto, hardware, pessoal e processo. Cada fator tem pesos que variam de Muito baixo a Muito alto.
EAF (Esforço de Ajuste de Fatores) (COCOMO Intermediário/Avançado) Valor obtido pela multiplicação dos 15 fatores influenciadores de custo. Utilizado no cálculo do esforço.

Capítulo 5

Teste de software e suas técnicas

Conceito Descrição
Teste de software Uma das fases mais importantes do desenvolvimento, tem como objetivo compreender seus conceitos para identificar possíveis defeitos e revelar esses defeitos através de casos de teste adequados. É o processo de executar um programa com a intenção de revelar defeitos, não provar a ausência deles.
Técnicas de teste de software Três técnicas propostas na literatura: funcional, estrutural e baseada em defeitos. Distinguem-se pela fonte utilizada para definir os requisitos de teste.
Critérios de teste Propostas dentro das técnicas de teste que visam atingir o objetivo de revelar defeitos. Cada critério procura explorar determinados tipos de defeitos, estabelecendo requisitos de teste.
Engano (Conceito de teste) Caracteriza-se como uma ação equivocada de um conceito específico do domínio, geralmente causado por humanos. Pode ser, por exemplo, um erro de digitação ou lógica ao escrever o código.
Defeito (Conceito de teste) A existência de um defeito em um programa leva à ocorrência de um erro, desde que o defeito seja executado. Por exemplo, uma condição lógica incorreta que causa um comportamento inesperado.
Erro (Conceito de teste) Caracteriza-se por um estado inconsistente ou inesperado devido à execução de um defeito.
Falha (Conceito de teste) Pode ser ocasionada por um estado inconsistente ou inesperado (erro).
Dados de teste É um elemento do domínio de entrada de um programa. Ex: Para um programa que computa xy com x, y > 1, (2, 5) é um dado de teste.
Casos de teste É um par formado por um dado de teste mais o resultado esperado para a execução do programa com aquele dado de teste. Ex: Para o dado de teste (2, 5), o caso de teste é ((2, 5), 10).
Domínio de entrada O conjunto de todos os possíveis valores que podem ser utilizados para executar um programa. Ex: Para um programa que computa xy para x, y > 1, o domínio de entrada são todos os pares (x, y) de inteiros maiores que 1.
Domínio de saída O conjunto de todos os possíveis resultados produzidos por um programa.
Oráculo de teste Necessário para saber o resultado esperado para a execução de um dado de teste. Permite comparar os resultados obtidos com os esperados para verificar a correção do programa.
Teste de seleção Procura identificar quais dados de teste devem ser selecionados do domínio de entrada.
Teste de partição Procura estabelecer subconjuntos de dados de teste e selecionar casos de teste em cada subconjunto. Dados que satisfazem o mesmo requisito de teste (ex: executar determinada estrutura) pertencem ao mesmo subconjunto.
Teste de Funcionalidade (Caixa preta) Método de teste que verifica e valida se as funções implementadas no software estão corretas em seus diversos níveis. Executado sobre as entradas e saídas do programa sem conhecimento do código-fonte. Inclui testes de unidade, integração, sistema e aceitação.
Testes de unidade Os testes mais básicos, consistem em verificar se um componente individual do software funciona corretamente.
Testes de integração Feitos quando unidades prontas e testadas isoladamente precisam ser integradas para gerar uma nova versão do sistema.
Estratégias de integração Incluem: Big-bang (constrói e testa todas as classes/unidades juntas); Top-down (integração e teste de cima para baixo na hierarquia do sistema); Bottom-up (integração e teste de baixo para cima).
Testes de sistema Testes feitos quando o sistema está completo e integrado. Focam em verificar se os requisitos funcionais e não funcionais foram atendidos. A execução do fluxo principal e fluxos alternativos do caso de uso é verificada.
Teste de Aceitação Similar aos testes de sistema, com o foco principal em verificar se os requisitos foram atendidos conforme a especificação.
Teste Estrutural (Caixa branca) Técnica em que todos os testes são executados com conhecimento do código-fonte. Capaz de detectar quantidade substancial de erros garantindo a execução de comandos e condições. Inclui critérios baseados na complexidade e fluxo de controle.
Critérios baseados na complexidade (Teste Estrutural) Utilizam informações sobre a complexidade do programa para derivar requisitos de software. Ex: complexidade ciclomática e caminhos linearmente independentes.
Complexidade ciclomática Métrica de software que proporciona uma medida quantitativa da complexidade lógica de um programa. Para n estruturas de seleção/repetição, a complexidade é n+1. Indica o número máximo de caminhos necessários para exercitar todos os comandos. Programas com complexidade <= 10 são simples.
Caminhos linearmente independentes Qualquer caminho do programa que introduza pelo menos um novo conjunto de instruções ou uma nova condição. Determinados a partir do grafo de fluxo de controle (GFC).
Grafo de fluxo de controle (GFC) Representação de um programa colocando comandos em nós e fluxos de controle em arestas. Nodos em sequência podem ser um nó; estruturas de seleção/repetição são nós distintos com arestas de decisão/repetição.
Critérios baseados no fluxo de controle (Teste Estrutural) Utilizam o GFC para determinar quais estruturas são necessárias. Ex: Todos-Nós, Todas-Arestas, Todos-Caminhos.
Todos-Nós (Critério de teste estrutural) Exige que a execução do programa passe ao menos uma vez em cada vértice do GFC, ou seja, que cada comando seja executado pelo menos uma vez.
Todas-Arestas (Critério de teste estrutural) Requer que cada aresta do GFC (cada desvio de fluxo) seja exercitada pelo menos uma vez.
Todos-Caminhos (Critério de teste estrutural) Requer que todos os caminhos possíveis do programa sejam executados.
Teste Funcional (Caixa preta) Executado sobre as entradas e saídas do programa sem conhecimento do código-fonte. Pode detectar todos os defeitos submetendo o programa a todas as entradas possíveis (teste exaustivo). Inclui critérios como particionamento em classes de equivalência, análise do valor-limite e error-guessing.
Teste exaustivo Submeter um programa a todas as possíveis entradas. Geralmente impraticável devido à cardinalidade do domínio de entrada.
Particionamento em classes de equivalência (Teste Funcional) Técnica que divide o domínio de entrada de um programa em conjuntos disjuntos (classes de equivalência), com a suposição de que testar um elemento de um conjunto equivale a testar todos. Requer testar pelo menos um elemento de cada conjunto.
Análise do valor-limite (Teste Funcional) Consiste em considerar valores fronteiriços com outras classes de equivalência para teste, não apenas um valor qualquer dentro de uma classe. Existem diretrizes para definir esses valores (ex: limites de intervalo, valores imediatamente subsequentes, quantidade de valores).
Error-guessing (Teste Funcional) Critério de teste funcional baseado na intuição sobre onde os defeitos provavelmente ocorrem.
Teste baseado em defeitos Técnica em que a fonte para definir os requisitos de teste é uma lista de defeitos conhecidos e suas causas. Inclui a análise de mutantes.
Análise de mutantes (Teste baseado em defeitos) Critério que consiste em simular defeitos conhecidos no código-fonte, criando programas mutantes, e confrontá-los com o código original para revelar defeitos e avaliar a qualidade dos casos de teste.
Programa mutante (Análise de mutantes) Um novo programa produzido pela aplicação de um operador de mutação no programa original.
Operadores de mutação (Análise de mutantes) Regras ou padrões que simulam a forma como os programadores cometem erros. A escolha depende da linguagem de programação e dos tipos de defeitos a serem revelados. Ex: Eliminação de comandos, troca de operador relacional, troca de variáveis.

Capítulo 6

Fundamentos e recursos da cultura DevOps

Conceito Descrição
Cultura de desenvolvimento e operações (DevOps) Refere-se à junção dos conceitos de desenvolvimento (Dev) e operações (Ops). É uma cultura que faz uso dos conceitos da engenharia de software (processos, testes, projeto, arquitetura, métodos ágeis) de forma colaborativa. Não é uma tecnologia específica, ferramenta ou automatização de processo. Abrange todo o ciclo de vida do desenvolvimento de software.
Desenvolvimento (Dev) (DevOps) Uma das partes que compõem o termo DevOps. Refere-se à equipe de desenvolvimento.
Operações (Ops) (DevOps) Uma das partes que compõem o termo DevOps. Refere-se à equipe de operações.
Integração Contínua Prática na qual o código é compilado para cada mudança e executa testes automatizados minimamente confiáveis. Contrária aos métodos tradicionais que adiam a integração. O time integra o código pelo menos uma vez por dia em um único tronco. A segmentação de implementação é iniciada automaticamente a cada mudança.
Princípios da Integração Contínua (Fowler) Onze princípios que visam tornar a integração contínua mais efetiva, como manter repositório único, automatizar versão, fazer autoteste, commit diário, centralizar commit, corrigir quebra de código imediatamente, manter construção rápida, testar em ambiente próximo à produção, obter executável mais recente, possibilitar visibilidade, automatizar implantação.
Arquitetura de referência DevOps Apresenta a perspectiva dos principais recursos que o DevOps pretende fornecer.
Caminhos de adoção do DevOps Quatro caminhos propostos: Conduzir (estabelecer objetivos de negócio e ajustar com feedback, inclui planejamento contínuo); Desenvolver/testar (duas práticas: desenvolvimento colaborativo e teste contínuo); Entregar (duas práticas: entrega contínua e implantação contínua); Operar (duas práticas: monitoramento contínuo e feedback contínuo).
Planejamento contínuo do negócio (DevOps - Conduzir) Prática incluída no caminho Conduzir.
Desenvolvimento colaborativo (DevOps - Desenvolver/testar) Permite que profissionais trabalhem juntos, fornecendo práticas e plataforma comuns; sua atividade central é a integração contínua.
Teste contínuo (DevOps - Desenvolver/testar) Significa testar mais cedo e continuamente ao longo do ciclo.
Entrega contínua (DevOps - Entregar) Prática incluída no caminho Entregar.
Implantação contínua (DevOps - Entregar) Prática incluída no caminho Entregar.
Monitoramento contínuo (DevOps - Operar) Prática incluída no caminho Operar.
Feedback contínuo (DevOps - Operar) Prática incluída no caminho Operar.
Fontes de ineficiências na entrega de software Categorias de ineficiências que o DevOps busca mitigar: supercarga desnecessária (comunicar várias vezes a mesma informação); retrabalho desnecessário (defeitos descobertos tardiamente); superprodução (funcionalidades desenvolvidas não requeridas).
Construir uma cultura DevOps Requer que líderes trabalhem com equipes para criar ambiente de colaboração e compartilhamento, removendo barreiras à cooperação. Medições típicas que colocam Dev e Ops uns contra os outros devem ser substituídas por responsabilidade compartilhada. Práticas ágeis como Scrum estão no centro do DevOps.
Princípios básicos para implementar a cultura DevOps Incluem: foco no que se deseja melhorar; estabelecer métricas para medir desempenho (somente é possível melhorar o que se pode medir); padronizar tarefas.
Planejamento de liberação (DevOps) Função impulsionada pelas necessidades comerciais de oferecer recursos mais rápido; aproveita práticas ágeis para planejar prazos com mais frequência e focar na qualidade.
Mitos sobre DevOps Crenças comuns e incorretas sobre o DevOps, como a de que é apenas para desenvolvedores e administradores de sistemas (quando na verdade abrange todas as funções da organização).

Observações…

Como organizei o conteúdo desta página

Esta página contém resumos dos principais conceitos da disciplina sistema gerenciador de banco de dados, extraídos de arquivos no formato PDF com a ferramenta NotebookLM.

De forma simples, enviei os arquivos para o NotebookLM e pedi os resumos com os seguintes comandos:

Organize uma tabela com os principais conceitos do texto. Na primeira coluna, o nome do conceito e na segunda, o conceito em si.

A partir do segundo pedido, usei o comando:

Repita o processo anterior para este texto.

No terceiro pedido, recebi a mensage de:

O comando fornecido solicita que o processo anterior seja repetido. No entanto, não há processo anterior no histórico de conversas fornecido. [Me] Para obter uma resposta abrangente, forneça o processo anterior que você gostaria que fosse repetido.

Desta forma, alternei entre o primeiro e segundo comando até o último arquivo, que veio com a formatação Markdown deformada. Então, pedi uma última revisão com o comando:

Refaça a tabela para uma melhor formatação em Markdown.

A publicação final continua uma exportação simples, do formato org mode para HTML, usando o Emacs.

Voltar para o início…

Autor: Jackson de Jesus

Criado em: 14-05-2025, qua 20:31

Validate