Escolar Documentos
Profissional Documentos
Cultura Documentos
- Construir projetos com pessoas motivadas. Dar-lhes o ambiente e suporte que precisam e
confiar neles para fazer o seu trabalho
- O método mais eficaz de passar informação numa equipa de desenvolvimento é em conversas
cara-a-cara
- Software que funciona é o principal medidor de progresso
- O processo AGILE promove um ambiente sustentável - os patrocinadores, utilizadores e
desenvolvedores deverão manter um ritmo constante indefinidamente
- Atenção contínua para a excelência técnica e um bom design melhora a agilidade
- Simplicidade - a arte de maximizar a quantidade de trabalho não feito - é essencial
- As melhores arquiteturas, requisitos e designs vêm de equipas bem organizadas
- Em intervalos regulados, a equipa reflete como se tornar mais efetivo, ajusta e afina o
comportamento de acordo
SCRUM é uma framework com a qual as pessoas podem endereçar problemas complexos,
entregando produtos valiosos de forma produtiva e criativa. É uma framework simples para
colaboração de equipas efetiva, em produtos complexos.
A definição de SCRUM consiste nos seus cargos, eventos, artefactos e regras.
- Leve
- Simples de entender
- Difícil de dominar
- Equipa de desenvolvimento
- Product Owner
- Scrum Master
O Product Owner é responsável pela gestão do backlog de produto. Esta gestão consiste em:
- Comunicar explicitamente o Objetivo do Produto
- Criar e claramente comunicar os itens do backlog do produto
- Ter a certeza de que o backlog do produto é transparente, visível e compreendido
Independentemente da delegação, ou não, de tarefas, o Product Owner é o responsável pela
execução das tarefas e a entrega do valor do produto
Suporta a organização:
- liderando e treinando os seus elementos na adoção do SCRUM
- ajudando os colaboradores e partes interessadas a entender uma abordagem empírica para um
trabalho mais complexo
- Sprint
- Sprint Planning
- Daily Scrum
- Sprint review
- Sprint retrospective
Períodos de tempo fixos que podem durar um mês ou menos, para criar consistência e assegurar
pequenas iterações para feedback, de modo a inspecionar e adaptar como o trabalho é feito e o
que precisa de ser trabalhado.
Inicia a sprint, delineando o trabalho a ser feito durante a Sprint. Isto é feito com a colaboração da
equipa Scrum
Tópicos avaliados: porque é que esta sprint tem valor? o que pode ser feito nesta sprint? como vão
escolher o trabalho a ser feito?
O seu propósito é planear maneiras de aumentar a qualidade e efetividade. A equipa avalia como
é que a última sprint correu, relativamente a desempenho individual, interações, processos,
ferramentas e a sua definição de “Done”. Aqui termina a Sprint
Aqui avalia-se: o que correu bem na Sprint? o que pode ser melhorado? qual as melhorias com
que nos vamos comprometer na próxima sprint?
- Product backlog
- Sprint backlog
- Increment
lista ordenada do que é necessário melhorar no produto. É a única fonte de trabalho a ser
realizado pela equipa. Também existe um refinement, que representa o ato de dividir um item do
backlog em items mais pequenos e precisos. Não é obrigatório, mas é considerada uma boa
prática.
É uma ferramenta usada para visualizar o trabalho e optimizar o fluxo de trabalho dentro da
equipa.
São extremamente úteis para garantir que o trabalho da equipa é visualizado e que o fluxo de
trabalho dos mesmos é normalizado.
Um kanban simples tem três passos: To Do, In Progress e Done. Mas podem ser adicionados
mais, dependendo do tamanho, estrutura e objetivos da equipa.
Os items representam-se por cards no quadro.
Ajuda a visualizar o trabalho e a evitar bottlenecks, uma vez que podem ser limitados o número de
items em WIP
Os sistemas de controlo de versões ajudam as equipas a trabalhar mais rápido e de maneira mais
inteligente.
São especialmente úteis para equipa de DevOps uma vez que as ajuda a reduzir o tempo de
desenvolvimento e a aumentar a implementação bem sucedida
Os softwares de controlo de versões mantêm rasto de todas as alterações feitas no código, numa
base de dados especial.
Se um erro for cometido, os developers conseguem comparar versões antigas do código para
ajudar a resolver esse erro enquanto minimizam disrupção para todos os elementos da equipa
Tipicamente, o código está organizado numa estrutura de pastas ou árvore de ficheiros. Enquanto
um elemento da equipa de desenvolvimento trabalha numa nova funcionalidade, outro corrige
erros de um bug não relacionado. Assim, cada developer faz as suas alterações na árvore de
ficheiros
2.5 - O que pode dizer sobre incompatibilidade de alterações feitas por diferentes developers? 26
Alterações feitas num ponto A de um código podem impactar alterações ou código existente num
ponto B. Estes problemas deverão ser identificados e resolvidos de maneira organizada, sem
bloquear o trabalho a ser desenvolvido pelo resto da equipa.
Em todo o desenvolvimento de software, qualquer alteração pode introduzir novos BUGs e o novo
software não pode ser confiado até ser testado. Assim sendo, teste e desenvolvimento devem
prosseguir juntos até uma nova versão estar pronta.
- Git
- Mercurial
- Suversion
- AzureDevOpe
- CVS
1 - Master
2 - Develop
3 - Feature - para desenvolver novas funcionalidades the advenham da develop branch
4 - Release - ajuda a preparar uma nova release em produção - usualmente advém da develop
branch e deverá ser fundida (merge) de volta para a branch develop e master
5 - Hotfix - também ajuda a preparar para uma futura release, mas ao contrário de outras
branches, as hotfix advém de um BUG que foi descoberto a deverá ser resolvido. Permite aos
developers continuar a trabalhar nas suas próprias alterações na branch develop enquanto o bug
está a ser corrigido
A Master e Develop branches são consideradas branches principais, com um tempo de vida
infinito, enquanto que o resto das branches esperam-se ser de desenvolvimento paralelo e tempo
de vida curto.
- GitHub Flow
- GitLab flow
- Trunk-based development
03. DevOps
- Velocidade
- Entrega rápida
- Confiabilidade
- Escalabilidade
- Colaboração melhorada
3.10.1 - Porque é que o GIT é uma ferramenta de controlo de versões importante para DevOps 46
Git deverá ser a melhor e mais usada ferramenta de controlo de versões, atualmente. Controlo de
versões fornece aos developers um meio com o qual eles podem manter o rasto de todas as
mudanças e atualizações feitas ao seu código, para o caso de haver algum erro, ser fácil voltar e
usar uma versão anterior do código.
A ferramenta Git DevOps torna fácil a implementação, uma vez que é compatível com a maioria
dos protocolos HTTP, SSH e FTP. Oferece a melhor vantagem para repositórios partilhados de
projetos não lineares, ao contrário de outras ferramentas de controlo de versões centralizadas.
O Git possui três ferramentas de armazenamento, incluindo o GitHub e o GitLab, assim como o
BitBucket.
GitLab e BitBucket são especialmente desenhadas para controlo de versões num espectro
empresarial.
3.10.2 - Porque é que uma ferramenta de compilação como o Maven é importante para 47
DevOps?
Maven é uma das mais importantes ferramentas DevOps para construir projetos. Ao contrário do
sistema de compilação ANT, Apache Maven é mais do que uma framework de automatização de
compilação. Também é desenhada para gerir relatórios, documentação, distribuir releases, e
processos de dependências. Escrito em Java, o Maven pode compilar e gerir projetos escritos em
Java ou C#, Ruby, Scala, e outras linguagens de programação que usam POM (project object
model) plugins.
O Maven oferece muitos benefícios aos seus utilizadores. Facilita a compilação e monitorização de
processos através da automatização e mantém um processo de construção uniforme,
possibilitando a consistência e a eficiência. Esta ferramenta também oferece uma informação
compreensiva do projeto através de documentação de qualidade, um valioso recurso para as
melhores práticas de desenvolvimento. Também fornece uma funcionalidade de processo do
processo de migração muito simplificada.
Tem um rico repositório de plugins para melhorar o processo de compilação e uma grande
compatibilidade com IDEs como o Eclipse, Jbuilder, MyEclipse, NetBeans, IntellijIDEA, entre
outros.
3.10.3 - Porque é que uma ferramenta de integração contínua, como o Jenkins, é importante 48
para DevOps?
3.10.4 - Porque é que ferramentas de gestão de configurações, como o Chef, são importantes 49
em DevOps?
Ansible é uma ferramenta de gestão de configurações DevOps open source, usada para
implementação, automatização e orquestração.
Enquanto que o Ansible alavanca a arqutetura da infraestrutura como código, usa conexão SSH
para empurrar os seus nós sem agente.
É considerado fácil para aprender e usa o seu playbook escrito em Yaml com comandos
minimalistas e fácilmente lidos por humanos.
Plataformas de contenterização são soluções aplicacionais que permitem aos developers compilar,
testar e enviar aplicações em ambientes que não contenham dependências de recursos. Cada
container (contentor) compreende um ambiente de execução que inclui aplicações específicas, as
suas bibliotecas, código fonte, configurações e dependências. Plataformas destas oferecem
orquestração, automatização, segurança, governação e outros recursos.
DevOps depende muito de contenterização e microsserviços para implementação e
desenvolvimento eficiente de aplicações, com Docker e Kubernetes sendo as tecnologias mais
utilizadas de containers.
O motor de Docker está desenhado para automatizar desenvolvimento, implementação e gestão
de aplicações contenterizadas em nós únicos. Docker é uma ferramenta open source compatível
com serviços na cloud como AWS, GCP e Azure Cloud. Docker é executável em Windows e
Sistemas Operativos Linux.
3.10.8 - E o Kubernetes? Porque pode ser uma ferramenta importante para DevOps? 53
Kubernetes, por outro lado, é uma plataforma de automatização de orquestração que permite aos
desenvolvedores executar aplicações em contentores através de clusters Kubernetes, referindo a
um grupo de nós.
Desenvolvedores aproveitam o Kubernetes para automatizar processos como configuração de
containers, escalabilidade, rede, segurança e outros para atingir velocidade e eficiência em
produção.
3.10.9 - Porque é que o AWS Cloud, por exemplo, pode ser uma ferramenta importante para 54
DevOps?
AWS tem uma grande variedade de serviços que oferece dentro das categorias PaaS (Platform as
a Service), SaaS (Software as a Service) e IaaS (Infrastructure as a Service), incluindo
computação, identificação e gestão de acessos (ACM), redes e armazenamento.
Enquanto que a AWS oferece nuvens públicas, privada e híbridas, o foco é maioritariamente em
núvens públicas.
3.10.10 - E o Azure Cloud? Como pode ser útil na computação e armazenamento em DevOps? 55
Azure é a escolha preferida para empresas, especialmente nas que confiam mais em aplicações
office, graças à facilidade de transição.
Azure oferece ao DevOps um serviço com conjunto de ferramentas para gerir desenvolvimento de
projetos de software end-to-end. Este serviço compreende o servidor DevOps da Azure e o serviço
Azure DevOps Cloud.
O servidor fornece um ambiente de execução baseado em ferramentas na cloud para facilitar
implementações on-premise.
O serviço na Cloud, por outro lado, possui ferramentas como Azure Boards, Azure Pipeline, Azure
Reports, Azure Test Plans e Azure Artifacts para desenvolvimento, teste e implementação de
software na cloud.
3.10.11 - E o Google Cloud Platform? Como pode ser uma ferramenta importante para o 56
DevOps?
3.10.12 - Porque é que ferramentas de teste, como o Selenium, são importantes para DevOps? 57
A lógica por detrás da automatização é eliminar envolvimento humano em determinadas tarefas,
usando a tecnologia para automaticamente executar essas tarefas. Automatização de testes
emprega aplicações de software, à parte do software a ser desenvolvido, para executar cenários
de testes automaticamente, comparar resultados e reportar defeitos.
O processo é executado muitas vezes para entregar software de alta qualidade para os
utilizadores finais. Testar é uma parte integral do desenvolvimento de software e é menos
propenso a erros.
Selenium é uma framework open source para testes em aplicações web que suporta os browsers
mais usados e plataformas como Linux, Windows e MacOS.
Selenium integra com uma grande variedade de linguagens de programação incluindo Python, C#,
Ruby, Java, Javascript, PHP e Perl, e muitas outras frameworks de automatização de testes.
A Suite de Testes Selenium possui:
- Selenium IDE - para criar e executar casos de teste para testes exploratórios e gravar playbacks
de testes.
- Selenium Client API - permite aos developers escrever scripts de testes diretamente em várias
linguagens de programação ao invés de precisarem de escrevê-las numa linguagem de
programação do Selenium
- Selenium WebDriver - possui atalhos (bindings) para escrever scripts de teste
- Selenium Grid - servidor proxy inteligente que permite que sejam executados testes em múltiplos
browsers a sistemas operativos em paralelo.
- Selenium Remote Control Server - escrito em Java, comunica com browsers, através de
comandos em Selenium, para execução.
04. Containers
É o processo de criar um ambiente que automatiza a maioria das tarefas de manutenção para
cargas de trabalho contentorizadas, aplicações e serviços. A maioria das empresas conta com
plataformas de orquestração de containers e fornece serviços completos de gestão de containers
aos seus utilizadores.
O processo de gestão de containers padronizado ter 4 estágios para as aplicações e serviços que
contém:
- Criação
- Implementação
- Escalabilidade/Expansão
- Destruição
Contentorização assegura que nenhum destes pontos dependa de um OS Kernel. Assim,
containers não trazem nenhum Sistema Operativo convidado com eles, da mesma maneira que
máquinas virtuais precisam.
Aplicações contentorizadas estão ligadas a todas as suas dependências como uma única unidade
de implementação. Alavancando as funcionalidades e recursos do SO hospedeiro, os containers
permitem estas aplicações de funcionar em qualquer ambiente.
- Precisam de menos recursos de sistema, uma vez que não ligam imagens de sistemas
operativos a cada aplicação que guardam
- São altamente interoperáveis, uma vez que estas aplicações podem usar o SO anfitrião.
- Uso de recursos otimizado como computação de containers permite que aplicações semelhantes
partilhem das mesmas bibliotecas e ficheiros binários.
- Não existem problemas de hardware ou implementação, uma vez que os containers são
independentes de infraestruturas
- Melhor portabilidade porque consegue migrar e implementar containers em qualquer lado,
tranquilamente
- Escabilidade e desenvolvimento facilitado porque a tecnologia de contentorização permite
expansão gradual e testes paralelos de aplicações
4.7 - Para que são usados os containers? 64
- Desenvolvimento Agile
- Alta eficiência
- Soluções prontas para o futuro
05. Frameworks
Uma framework é uma estrutura de software que fornece funcionalidades genéricas e orientações
de design para o desenvolvimento de aplicativos. Ela ajuda os desenvolvedores ao oferecer uma
base reutilizável que agiliza o processo de criação, reduzindo a complexidade e promovendo boas
práticas.
5.2 - O que é uma framework, em termos práticos? 68
5.6 - Como é que uma framework pode ser um custo desnecessário para uma empresa? 72
Uma framework pode ser considerada um custo se os desenvolvedores não souberem como a
mesma funciona. Assim sendo, a empresa terá custos na formação dos seus desenvolvedores. Se
essa framework não for utilizada em tarefas futuras, o tempo investido em aprendê-la pode custar
mais que um código desenvolvido com o propósito pretendido.
Uma vez aprendida, futuros projetos nessa framework serão, com certeza, mais rápidos e fáceis
de completar. O conceito de uma framework pressupõe uma solução “one-size-fits-all"
5.8 - O que são frameworks de frontend? 74
Frameworks do lado do servidor desenhadas para tornar as tarefas mais fáceis para
desenvolvedores. Fornecem ferramentas, bibliotecas e outros componentes que ajudam os
developers a criar o backend para uma aplicação ou website. Podem automatizar alguns aspetos
de web dev, tornando-o mais rápido e simples
- Django - Python
- ExpressJS - NodeJS
- Laravel - PHP
- Flask - Python
- Ruby on Rails - Ruby
- CakePHP - PHP
Serve como blueprint para um sistema. Fornece uma abstração para gerir a complexidade do
sistema e estabelecer a comunicação e o mecanismos de coordenação entre componentes.
Define a solução estruturada para ir de encontro aos requisitos técnicos e operacionais, enquanto
otimiza os atributos de qualidade comuns como a performance e a segurança
Este fornece um plano que descreve os elementos de um sistema, como é que eles encaixam e
trabalham juntos para atingir os requisitos do sistema.
Esta vem antes do design detalhado, código, integração e teste e depois da análise de domínio,
análise de requisitos e análise de risco
O principal é identificar os requisitos que afetam a estrutura da aplicação. Uma arquitetura bem
apresentada reduz os riscos de negócio associados na construção de uma solução técnica e
constrói uma ponte entre requisitos de negócio e técnicos.
Outros objetivos:
- Expor a arquitetura do sistema, mas esconder os detalhes de implementação
- Realizar todos os casos-uso e cenários
- Tentar endereçar requisitos a todas as partes interessadas
- Lidar com os requisitos funcionais e de qualidade
- Reduzir o goal of ownership e melhorar a posição da organização no mercado
- Melhorar a qualidade e funcionalidade oferecidas pelo sistema
- Melhorar a confiança exterior na organização ou sistema
1. Layered Pattern
2. Client-server pattern
3. Master-slave pattern
4. Pipe-filter pattern
5. Broker pattern
6. Peer-to-peer pattern
7. Event-bus pattern
8. Model-view-controller pattern
9. Microservices
10. Model-view-view model
Consiste em duas partes: Master e Slaves. O componente master distribui trabalho entre os
componentes idênticos de Slave, e calcula o resultado final com os resultados que os slaves
trazem.
Uso:
- Database replication - a master database é considerada como a fonte autoritária e as slaves
databases estão sincronizadas a ela.
- Periféricos conectados a um bus num sistema computacional
Usado para estruturar sistemas distribuídos com componentes dissociados. Estes componentes
podem interagir uns com os outros pela invocação remota de serviços. O componente broker é
responsável pela coordenação de comunicação entre componentes.
Os servidores publicam os seus recursos (serviços e características) a um broker. O cliente pede
um serviço do broker e o broker redireciona o cliente para o serviço mais adequado do seu registo.
Uso:
- Software de message broker como o Apache ActiveMQ, Apache Kafka, RabbitMQ e JBoss
Messaging
Este pattern lida com eventos e tem 4 principais componentes: event source, event listener,
channel e event bus. Sources publicam mensagens para channels particulares num event bus.
Listeners subscrevem a um channel particular. Listeners são notificados de mensagens que são
publicadas num canal ao qual eles subscreveram antes.
Uso:
- Android development
- Notification services
É uma abordagem estruturada para desenvolver software para um sistema ou projeto, às vezes
chamado Software Development Life Cycle (SDLC)
A abordagem Incremental Development forma a base para o desenvolvimento de software dentro
do nivel de Evolutionary Acquisition (EA) em sistemas maiores.
O processo de desenvolvimento de software é uma maneira de melhorar o design e gestão de
produto, dividindo o trabalho de desenvolvimento em pequenos passos ou subprocessos que
podem ser feitos em paralelo ou numa ordem
1 - Planning
2 - Implementing
3 - Testing
4 - Deployment and Maintenance
Análise de requisitos - clientes têm tipicamente uma ideia abstrata do que querem como resultado
final, mas não o que o software deve fazer.
Engenheiros experientes e qualificados reconhecem os requisitos incompletos, ambíguos ou
mesmo contratitórios, neste ponto.
Mostrar código ao vivo pode ajudar a reduzir o risco dos requisitos estarem incorretos.
Uma vez recolhidos os requisitos gerais, deverá ser feita uma análise do escopo, de forma clara e
determinante. Isto é comumente chamado de SOO (Statement of Objectives) ou SOW (Statement
of Work)
Esta parte do processo assegura que os defeitos são reconhecidos assim que possível. Pode
também fornecer um objetivo, independentemente da visão do software, permitindo aos
utilizadores apreciar e compreender os riscos do desenvolvimento de software. Os testes podem
ser vistos como um processo de validação e verificação do programa/aplicação/produto.
Deployment começa assim que o produto acaba de ser testado e é aprovado para release,
vendido e distribuído para um ambiente de produção. Isto pode envolver instalação, customização,
testes e possivelmente um período de avaliação.
Passagens de conhecimento e suporte são importantes, para que o software seja corretamente
usado, de forma eficiente.
Manutenção e melhorias ao software que lidem com falhas ou novos requisitos podem durar algum
tempo e esforço, uma vez que requisitos em falha podem forçar a um redesign do software
- Waterfall
- Incremental
- Spiral
- Agile e Scrum
Este processo de desenvolvimento de software (agile) e o seu método mais popular (scrum) usam
uma maneira dinâmica e iterativa para desenvolver software. As equipas funcionam em sprints de
uma semana ou alguns meses para construir e entregar software que os clientes possam usar e
dar feedback.
Agile é sobre “mover” rápido, entregar versões mais frequentemente, e responder ao que os
utilizadores realmente precisam, mesmo que isso vá contra o que estava inicialmente planeado.
Isto significa não precisa de uma lista completa de requisitos ou uma SOW completa antes de
começar. Ao invés disso, move-se numa direção com a ideia de que podemos mudar de direção
durante o caminho.
Os stakeholders são os principais patrocinadores do projeto. Eles é que têm a última palavra no
que deverá ser incluído no scope do projeto.
Depois são identificados os utilizadores finais do produto. Uma vez que o produto deve satisfazer
as suas necessidades, a sua participação é igualmente importante.
Uma vez categorizados, é necessário determinar que requisitos são atingíveis e documentar cada
um.
Algumas técnicas neste ponto:
- Definir requisitos de modo preciso - assegurar que os requisitos são corretamente nomeados,
suficientemente detalhados e relacionados com as necessidades de negócio
- Prioritizar requisitos - prioritizar requistos e listá-los baseado nos mais críticos e nos que são
“bons de ter”
- Fazer uma análise de impacto - para ter a certeza que foram completamente entendidas as
consequências dos requisitos
- Resolver conflitos - marcar reuniões com os stakeholders e resolver requisitos conflituosos.
Pode-se também encenar uma análise de cenário para explorar como o(s) requisito(s) poderão
trabalhar em possíveis cenários.
- Analisar viabilidade - fazer uma análise detalhada do produto, baseada nos requisitos recolhidos
para determinar a sua confiabilidade e identificar problemas maiores.
Depois de todos os requisitos estarem analisador, criar um documento detalhado e partilhá-lo com
os stakeholders, end-users e equipas de desenvolvimento
Uma vez tomada a última decisão sobre os requisitos, ter a certeza que existe um acordo assinado
pela parte dos stakeholders. Isto é feito para assegurar que não há mudanças nem crescimento
incontrolado do scope do projeto
É uma parte importante no desenvolvimento, uma vez que ajuda a organização a encontrar
requisitos específicos dos clientes. Baseado na resposta do cliente, o protótipo é alterado até
atingir o máximo de satisfação do cliente.
O protótipo permite ao cliente imaginar o sistema a ser criado e entender os seus requisitos.
Se os desenvolvedores e end-users precisarem de alcançar algum aspeto do sistema, o protótipo
ou réplica ajuda-os a finalizar esses elementos.
O protótipo é criado mais rapidamente e a um custo mais acessível, mas vem com algumas
limitações e não é aceite na análise final
Este estágio envolve criar modelos de requisitos que permitam aos stakeholders e clientes
imaginar o produto a ser feito. Várias funções, tabelas de dados, elementos externos, e as
relações entre si, representadas em gráficos. Uma visão gráfica ajuda a encontrar falhas nos
requisitos. Isto permite aos desenvolvedores a ver se há inconsistências, elementos em falta,
errados ou não necessários adicionadas ao sistema. Estes modelos de requisitos podem ser
divididos em categorias.
- Diagramas de fluxo de dados - uma preparação gráfica que usa símbolos e notações para
mostrar como é que um negócio opera através do movimento de dados
- Diagram entidade-relação - um gráfico de fluxo que descreve coisas como pessoas, conceitos ou
objetos relacionados dentro de um sistema.
- Dicionários de dados - estes contém diferentes definições, nomes e outras formas de elementos
de dados utilizados num projeto
- Diagrama de state-transition - representam as mudanças que podem ocorrer dentro do sistema
BPMN é usado para criar gráficos que simplificam o entendimento do processo de negócio. É uma
técnica popular usada pelos analistas de negócio para coordenar a sequência de mensagens entre
diferentes participantes num conjunto de atividades relacionadas.
Estes gráficos fornecem uma representação visual das tarefas juntamente com as timelines
programadas. Isto ajuda um analista de negócio a visualizar todas as tarefas de um projeto do
início ao fim.