Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 2 de 80 
 TEMAS DE CONTROLE DE VERSÃO 
 
Professor, o que seria um Sistema de Controle de Versão? É um sistema que 
registra as mudanças feitas em rquivo u um onjunto e rquivos ao o go 
do t mpo e rma que ja possível recuperar rsões específicas. Eu, por 
exemplo, uso um sistema de controle de versão para guardar todas as versões das 
aulas que eu faço – já pensou se eu perco isso?  
 
Galera, se um sistema desses é importante para que eu controle as versões das 
minhas aulas, imaginem para quem gerencia um projeto de software – muitas 
vezes com 800 módulos e 400.000 linhas de código! O desenvolvedor deve poder 
conseguir erenciar as diferentes versões de digo-fonte, documentação, etc do 
software que ele está desenvolvendo. Vamos ver um pouquinho de história... 
 
No ano de 1972, foi criado o primeiro Sistema de Controle de Versões – Source 
Code Control System (SCCS). Passados dez anos, foi desenvolvido o Revision 
Control System (RCS), utilizando técnicas mais avançadas e já mantido pelo GNU 
Project. No entanto, uma e s esvantagens era que ele só permitia gerenciar 
versões de rquivo dividualmente. 
 
Dessa forma, em 1986, foi iniciado o projeto de criação do Concurrent Versions 
System (CVS) – esse, sim, era capaz de gerenciar projetos inteiros. Em 2000, foi 
lançada rimeira rsão o Subversion SVN) m a roposta e lhorar s 
funcionalidades do VS. Ele bombou, popularizou e fez muito sucesso – tanto que 
é utilizado até hoje! 
 
Paralelamente ao desenvolvimento e surgimento de novas ferramentas de 
controle de versão, que trabalhavam de forma centralizada, a Sun Microsystems – 
criadora do Java – começou a desenvolver o TeamWare, um software para 
controlar projetos internos da empresa. Ele trabalhava e orma istribuída 
posteriormente passou a ão ser utilizado. Por que, professor? 
 
Porque a comunidade de desenvolvedores optou por softwares que já 
trabalhavam com o mesmo conceito de distribuição, mas com funcionalidades 
mais modernas, como o Mercurial. Dos sistemas de controle de ersão que 
trabalhavam de orma istribuída, dois tiveram bastante ceitação o ado: 
Mercurial, criado por Matt Mackall; e o Git, criado por Linus Torvalds (aquele cara 
do Linux). 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 5 de 80 
 
E se ele sobrescrever arquivos indevidamente sem intenção? Pois é, para esolver 
esse problema ram desenvolvidos os Sistemas de C ntrole de V são Locais! 
Eles armazenam todas as alterações dos arquivos sob controle de revisão. Como 
assim? Ora, basta salvar o arquivo e ele é gravado no diretório com cada uma de 
suas versões. No entanto, há um probleminha... 
 
 
 
Para uma pessoa apenas, é uma abordagem razoável. Imaginem agora dez 
desenvolvedores trabalhando com tecnologias diferentes e armazenando suas 
versões cada um em seu computador! Ora, como eles podem trabalhar em 
conjunto integrando seus componentes? Para dar com esse problema, foi criado 
o t ma de C ntrole de V são C ntralizado! 
 
Eles possuem um servidor ou repositório central único e várias cópias de trabalho, 
que contêm todos os arquivos versionados. As operações de commit e update 
ocorrem entre Cliente e Servidor. Uma vantagem é ue s desenvolvedores têm 
uma ão geral sobre projeto. Uma desvantagem é que, se o servidor falhar, 
todos param de trabalhar; e se o armazenamento for corrompido, já era! 
 
A rotina básica de um desenvolvedor que trabalha com um sistema de controle de 
versões centralizado começa pela execução do comando checkout, em que é 
carregada uma cópia de trabalho no local especificado por ele. Para t zer s 
alterações do epositório para a rea e abalho, o esenvolvedor eve 
executar o omando update. 
 
Após realizar s modificações desejadas, o desenvolvedor xecuta omando 
commit, que esponsável por nviar essas modificações ao epositório. Entre a 
execução dos comandos commit e update, podem ocorrer conflitos entre os arquivos 
manipulados por essas operações e para sanar tal problema deve-se utilizar o 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 7 de 80 
 
 
 
Apesar de os Sistemas de Controle de Versão Distribuídos terem surgido mais 
recentemente já com grande aceitação do mercado, em muitos casos, ainda é 
melhor e mais viável o uso de sistemas que trabalham com o modelo centralizado. 
O uso esses sistemas tem se opularizado, devido o aixo c sto e 
implantação, o rande mero e rramentas gratuitas e a asta ocumentação 
disponível. 
 
 
 
 
 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 11 de 80 
O Subversion gerencia rquivos e iretórios, e s modificações feitas neles o 
longo o empo. Isto permite que você recupere versões antigas de seus dados, 
ou que examine o histórico de suas alterações. Devido a isso, muitas pessoas 
tratam-no como uma espécie de “máquina do tempo”. Ele pode funcionar em 
rede, o que lhe possibilita ser usado por pessoas em diferentes computadores. 
 
Em certo nível, a capacidade de várias pessoas modificarem e gerenciarem o 
mesmo conjunto de dados de seus próprios locais (podem estar em cidades, 
países, continentes diferentes) é o que fomenta a colaboração. Progressos podem 
ocorrer ito mais rapidamente quando ã há um argalo único por nde todas 
as modificações devam acontecer. 
 
Sua portabilidade é bacana! Cliente e Servidor podem trabalhar com Windows, 
Unix, etc – facilitando o trabalho de desenvolvedores que precisam interagir com 
diferentes sistemas operacionais. Os criadores do SVN se esforçaram em sanar 
problemas causados por diferenças entre esses sistemas, de odo que s 
comandos em linha e ódigo jam os mesmos, independentemente o O! 
 
Outro ponto forte é a interoperabilidade! Existem dezenas de plug-ins para 
diversas IDEs (Ex: Subclipse/Subversive para Eclipse; VisualSVN para Visual Studio; 
etc). O próprio Netbeans já possui funcionalidades nativas para t abalhar m 
SVN. Um ponto fraco: implantação! Como ele não está disponível em um pacote 
completo, existe um certo grau de dificuldade em instalar os componentes do 
servidor. 
 
A ferramenta permite, além do desenvolvimento colaborativo, o merge de 
conteúdo, armazenamento de logs e geração de estatísticas diversas. E mais: ele 
permite comentar as revisões, com o objetivo de facilitar o entendimento das 
alterações realizadas. Coloca-se o iretório trunk o ódigo ronto ara ser 
compilado e colocado em produção. 
 
E como alho stá rsionado, você precisa r edo de que s u 
trabalho perca qualidade or o ter essa a ica para dificações. É muito 
simples: se os dados sofrerem alguma modificação indevida, apenas desfaça tal 
modificação. Alguns Sistemas de Controle de Versão também são Sistema de 
Gerenciamento de Configuração (GC). 
 
Estes sistemas são especificamente desenvolvimento para gerenciar árvores de 
código-fonte, e possuem muitos recursos específicos para o desenvolvimento de 
software – como identificação nativa de linguagens de programação, ou 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 17 de 80 
que o usuário navegue através da árvore e das várias revisões dos arquivos, além 
de possibilitar a execução de diffs, o trabalho com o formato rss, a execução de 
checkouts, entre outras funcionalidades. 
 
São exemplos declientes de interface web para o SVN: ViewVC, WebSVN, 
ViewSVN, Trac, SVN Browser, Insurrection, etc. Existem também muitos clientes 
que trabalham em modo gráfico para o SVN. Esta u a terística portante 
na valiação e rramentas de ntrole de rsões, pois muitos desenvolvedores 
não gostam de abalhar m linhas de omando (Ex: RapidSVN, TortoiseSVN, 
JSVN, etc). 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 22 de 80 
 CONCURRENT VERSIONS TEM (CVS) 
 
 
 
Concurrent Version System (ou CVS) é um Sistema de Controle de Versão! E ele 
serve para quê? Ele gerencia várias versões de documentos, além de permitir que 
várias pessoas possam trabalhar no mesmo arquivo, organizado em um diretório 
local ou remoto. Ele é open source, bastante lizado em ambientes de ftware e 
pode r xecutado por quipes distribuídas. 
 
Possibilita rmazenar o rico dos arquivos-fonte m conomia e spaço, 
através do armazenamento somente as diferenças entre as versões. Ele utiliza 
uma arquitetura cliente-servidor em que o servidor armazena as versões atuais do 
projeto e seu histórico, e os clientes se conectam a esse servidor para obter uma 
cópia completa do projeto. 
 
Ele foi desenhado para ntrolar digos-fonte, no ntanto pode r ut ado 
com qualquer arquivo aseado m xtos. Seu sistema estabelece um repositório 
simples; mantém todas as versões de um arquivo em um arquivo único ao 
armazenar apenas as diferenças; e protege contra mudanças simultâneas a um 
arquivo ao estabelecer diferentes diretórios para cada desenvolvedor. 
 
Galera, sabe quando você está com o código funcionando, aí você decide tentar 
fazer uma implementação específica de uma maneira diferente e dá tudo errado? 
Pois é, bugs podem aparecer quando o software é modificado, e pode demorar 
um bom tempo após a modificação do software para conseguir encontrar o erro. 
O CVS permite ecuperar rsões antigas em que ão a sse rro! Bacana? 
 
Professor, mas eu não preciso de um programa para isso! Basta eu salvar cada 
versão do meu software. Bem, além de isso ser extremamente trabalhoso, pode 
ocupar bastante espaço dependendo do tamanho e complexidade do arquivo. Já 
imaginou que, em um único dia, você pode criar centenas de versões? Pois é, o 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 23 de 80 
nosso t ma de ntrole de rsões t za a bordagem incremental para 
salvar s arquivos. 
 
Ademais, já imaginaram se houver mais de uma pessoa trabalhando no mesmo 
projeto? Pode contecer e ocê brescrever rquivo ue não i salvo 
anteriormente. O CVS resolve esse problema ao isolar diferentes desenvolvedores 
um do outro, i.e., cada desenvolvedor trabalha em seu próprio diretório e o CVS 
funde esses dois diretórios posteriormente. 
 
Cabe lientar que le não t ta e istema e build, ., le não vai 
compilar da. Ademais, não é um substituto para gerenciamento, i.e., não há 
cronogramas, marcos, datas de release, nem nada disso – ele não faz 
gerenciamento. Ele também não é um substituto para a comunicação entre 
desenvolvedores, i.e., eles devem se comunicar por outro meio de contato. 
 
Por fim, é bom enfatizar que ele não se trata de um sistema de gerenciamento de 
configuração, visto que não possui rastreamento de dependências, rastreamento 
de bugs, procedimentos de testes, entre outras características de um verdadeiro 
sistema de gerenciamento de configuração. Bacana? Agora mos ver lguns 
conceitos básicos bre le! 
 
CVS armazena todos os arquivos em um repositório centralizado: um diretório (tal 
como /usr/local/cvsroot) que é populado com uma hierarquia de arquivos e 
diretórios. Os arquivos no repositório são organizados em módulos – cada um é 
composto de um ou mais arquivos, e podem ser incluídos a partir de diversos 
diretórios. Um uso ípico é definir ódulo por projeto. 
 
Cada versão de um arquivo possui um Número de Revisão (Tag) único (Ex: 1.1, 
1.2.1.4, etc). Por definição, a revisão inicial é a 1.1! Cada commit altera o número 
de revisão. 
 
 
 
Observem pela gura abaixo ue VS não é imitada ao esenvolvimento inear! A 
Árvore de Revisão pode ser dividida em branches (ou galhos). 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 24 de 80 
 
 
O CVS possui algumas limitações: os arquivos em epositório não podem ser 
renomeados evem r xplicitamente emovidos e eadicionados. Ademais, o 
protocolo não permite que os diretórios sejam movidos ou renomeados. Cada 
arquivo do subdiretório em questão deve ser individualmente removido e 
readicionado. Bacana? 
 
Outros conceitos importantes: o epositório é a pia stre onde rvidor 
mantém o s órico de evisões. Cada projeto contém exatamente um repositório. 
Já uma Cópia de Trabalho (ou Cópia Local) é a cópia em que se faz as alterações 
nos arquivos do projeto. Podem existir diversas cópias em um mesmo arquivo do 
projeto. Em geral, cada desenvolvedor possui a sua. 
 
Checkout é o ato de pedir uma cópia par ao repositório; Commit é o ato de enviar 
alterações da cópia local para o repositório (alguns chamam de Checkin); 
Mensagens de Log são arquivos que armazenam informações sobre alterações; e 
Update to e t azer lterações feitas no epositório para pia al, i.e., 
seria o rso o Commit. 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 25 de 80 
Pessoal, eventualmente pode ocorrer de dois desenvolvedores tentarem comitar 
mudanças em uma mesma região do arquivo. O CVS não resolve o conflito, 
apenas avisa aos desenvolvedores. O CVS está cada vez mais em desuso, por 
contado do Subversion (SVN). Não i ainda porque bram em alguns editais, no 
entanto há porque reocupar: há ouquíssimas questões, logo não é 
comum cair. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 31 de 80 
A grande vantagem da implantação do GIT é o fato de existirem pacotes 
completos para a sua instalação. No inux stalação pode er eita través de 
seu sistema t vo e erenciamento e pacotes. Para o Windows, está disponível 
o pacote msysgit, que possui diferentes versões, desde um instalador portátil até um 
instalador com todo o código fonte do GIT e um compilador em C. 
 
A instalação m plataformas Unix m ambiente a também é t al. Ele 
permite também trabalhar com diversos protocolos de ede. Similar ao SVN, a 
operação commit é atômica, i.e., se uma operação é interrompida, ela é 
desconsiderada e o repositório não fica em um estado inconsistente. Por ser 
descentralizado, clonar um repositório é comum e trivial. 
 
 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 32 de 80 
O GIT permite definir ermissões tanto ara epositório como t do uanto 
para iretórios e rquivos. O controle dessas permissões pode ser feito de várias 
maneiras, como – por exemplo – através do protocolo SSH, que permite criar 
chaves para controle de autenticação ou através do protocolo HTTP, que permite 
definir permissões de leitura e escrita para cada arquivo ou diretório. 
 
O histórico do G T registra as revisões, quem realizou s alterações e quando ssas 
alterações foram realizadas em um rquivo udiretório. Os desenvolvedores do 
GIT consideram a palavra changeset inadequada para a ferramenta, pois alegam que 
o GIT não grava alterações, mas estados. É possível mover arquivos e diretórios, 
porém ele não oferece suporte à operação de rename como acontece no 
Subversion. 
 
Para falar a verdade, essa funcionalidade está disponível através do comando git 
mv, que ao invés de renomear o arquivo, o apaga, fazendo em seguida uma 
réplica idêntica à apagada, com o nome desejado. No so de um merge com u 
arquivo enomeado, é ar o bversion, i.e., ele não consegue reconhecer o 
arquivo e copia o arquivo de origem para o local destinado, apagando o arquivo 
de destino. 
 
A operação de cópia não é suportada. Todo commit pode ser acompanhado de 
uma mensagem de log, i.e., o usuário pode descrever todas as alterações relativas 
aquele commit em uma mensagem, que fica gravada no repositório. Ele ambém 
permite apenas uma nsagem de para t do njunto de danças, não 
permitindo ue c da rquivo ossua a nsagem de o particular. 
 
Diferente o , le oferece o uário a pção de ealizar checkout 
parcial, ou ja, realizar checkout m apenas um diretório por xemplo. O GIT 
não possui tantos clientes baseados em interface web como o Subversion, porém 
sua distribuição já possui um cliente, o Gitweb, que foi desenvolvido na linguagem 
Perl e permite navegar pelos diretórios através de revisões desejadas. 
 
Existem bons clientes de modo gráfico disponíveis para a ferramenta. O cliente 
Gitk já acompanha a distribuição do GIT! Há também o QGIT, GIT-GUI e 
TortoiseGIT. Mesmo com uma boa documentação disponível, a curva de 
aprendizagem do GIT um pouco íngreme, logo ele é ecomendado para ários 
que j ossuam algum grau de conhecimento em controle de versões. 
 
A maior diferença entre GIT e outras ferramentas está na forma que ele trata os 
dados. Conceitualmente, a maior parte dos outros sistemas armazena informação 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 33 de 80 
como uma lista de mudanças por arquivo. Esses sistemas tratam a ormação que 
mantém como onjunto e rquivos e s mudanças feitas a ada rquivo o 
longo o t mpo, conforme stra a agem: 
 
 
 
GIT não armazena sua informação assim. Em vez disso, ele considera que os 
dados são como um conjunto de snapshots (captura de algo em um determinado 
instante, como em uma foto) de um mini-sistema de arquivos. Cada z que cê 
salva ou consolida (commit) estado do eu projeto, é omo e ele tirasse a 
foto de t dos os seus arquivos naquele momento rmazenasse a eferência 
para ptura. 
 
Para ser eficiente, se nenhum arquivo foi alterado, a informação não é 
armazenada novamente - apenas um k para rquivo dêntico nterior que 
foi armazenado. Vejam na imagem abaixo que quando não há alterações, 
continua o mesmo arquivo, com o mesmo nome, mas pontilhado para indicar que 
se trata de um link para o arquivo original. 
 
 
 
Tudo no GIT tem seu checksum (valor para verificação de integridade) calculado 
antes que seja armazenado e então passa a ser referenciado pelo checksum. Isso 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 36 de 80 
• Se uma versão particular de um arquivo está no Diretório GIT, então é 
considerada consolidada (ou inalterada). 
 
• Caso seja modificada, mas foi adicionada à Área de Preparação, então está 
preparada (ou selecionada). 
 
• E se foi alterada desde que foi obtida, no entanto não foi preparada, está 
modificada (ou alterada). 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 40 de 80 
 NÁLISE TÁTICA DE CÓDIGO-FONTE 
 
A Análise Estática e digo-Fonte a a o rocesso e etecção de rros código 
sem, de to, executá-lo pode er onsiderado rocesso de evisão 
automática e digo3! Em geral, é utilizada para encontrar bugs ou garantir 
conformidade com boas práticas de programação. Querem um exemplo comum? 
Um compilador! Ele é capaz de encontrar erros léxicos, sintáticos e, até mesmo, 
semânticos. 
 
Sommerville define como: “Técnica automatizada de análise de programa na qual 
o programa é analisado detalhadamente para encontrar condições 
potencialmente errôneas”. Inspeções são uma forma de análise estática, em que se 
examina um programa sem executá-lo. As inspeções são frequentemente dirigidas 
por ecklists de rros e eurísticas que dentificam erros comuns em diferentes 
linguagens. 
 
Para alguns erros e heurísticas, é possível automatizar o processo de verificação de 
programas em relação a essa lista, o que resultou no desenvolvimento de 
analisadores estáticos automatizados para diferentes linguagens de programação. 
Analisadores estáticos ferramentas de software ue em o ódigo-fonte de 
um rograma e etectam possíveis defeitos e nomalias. 
 
Eles analisam o código e, assim, reconhecem os tipos de declarações no 
programa. Podem portanto detectar se as declarações estão bem formuladas, 
fazer inferências sobre o fluxo de controle do programa e, em muitos casos, 
computam o conjunto de todos os valores possíveis para os dados de programa. 
Eles omplementam os recursos de detecção de rros providos pelo compilador 
da inguagem. 
 
Podem ser usados como parte do processo de inspeção ou como uma atividade 
separada do processo de verificação e validação. A intenção da análise estática 
automática é chamar a atenção do inspetor para anomalias do programa, como 
variáveis usadas sem serem iniciadas, variáveis não usadas ou dados cujos valores 
poderiam ficar fora de extensão. 
 
 
3 Na maioria das vezes, a análise é executada em alguma versão do código-fonte, e em outros casos é 
executada no código-objeto (i.e., código de máquina ou de montagem). 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 42 de 80 
Inconsistências entre as interfaces dos módulos e componentes. 
 
Variáveis que nunca são usadas ou impropriamente declaradas. 
 
Código morto. 
 
Falta de lógica ou lógica errada (loops infinitos). 
 
Construções excessivamente complicadas. 
 
Violação de padrões de programação. 
 
Vulnerabilidade na segurança. 
 
Violação de sintaxe e de modelos. 
 
 
Os estágios envolvidos na análise estática incluem: 
 
▪ Análise de uxo de ntrole: identifica e enfatiza os loops com vários pontos 
de saída ou de entrada e código inacessível. Código inacessível é aquele 
código cercado por declarações incondicionais 'goto' ou em uma ramificação 
de uma declaração condicional na qual a condição de guarda nunca pode ser 
verdadeira, portanto nunca é acessada. 
 
▪ Análise de U o de Da os: enfatiza como as variáveis do programa são usadas. 
Detecta variáveis usadas sem prévia iniciação, variáveis escritas duas vezes sem 
uma tarefa de impedimento e variáveis declaradas mas que nunca são usadas. 
A análise de uso de dados também descobre testes não eficientes nos quais a 
condição do teste é redundante. 
 
▪ Análise de nterface: verifica a consistência das declarações de rotina e de 
procedimento e seus usos. Ela é desnecessária se uma linguagem com tipagem 
forte for usada, uma vez que o compilador realiza essas verificações. Detecta 
erros de tipo em linguagens com tipagem fraca; funções e procedimentos 
declarados e nunca chamados; ou resultados de funções que nunca são 
usados. 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólonwww.estrategiaconcursos.com.br Pág. 43 de 80 
▪ Análise de uxo de nformações: identifica as dependências entre variáveis de 
entrada e de saída. Embora não detecte anomalias, mostra como o valor de 
cada variável é derivada de outros valores de variáveis. Com essas informações, 
a inspeção de código deve ser capaz de encontrar valores que foram 
erroneamente computados. 
 
▪ Análise de C minho: identifica todos os caminhos possíveis por meio do qual o 
fluxo de um programa pode passar durante sua execução e estabelece as 
declarações executadas naquele caminho. Essencialmente, ela elucida o 
controle do programa e permite que cada predicado possível seja analisado 
individualmente. 
 
Analisadores estáticos s o particularmente valiosos quando uma nguagem de 
programação, como C for da. A linguagem C não possui regras de tipagem 
estritas e a verificação que o compilador C pode executar é limitada. Portanto, é 
fácil para programadores cometerem erros e a ferramenta de análise estática pode 
descobrir automaticamente alguns dos defeitos de programa resultantes. 
 
Isso é particularmente importante quando C (e, em menor extensão, C++) for 
usada para o desenvolvimento de sistemas críticos. Nesse caso, a análise estática 
pode descobrir um grande número de erros potenciais e reduzir significativamente 
os custos de teste. No ntanto, os projetistas de inguagens de rogramação 
modernas, como ava4, têm removido lgumas características propensas a erro. 
 
Todas as variáveis devem ser iniciadas, não há declarações 'goto'; assim, os 
códigos inacessíveis são menos prováveis de serem criados acidentalmente e o 
gerenciamento de armazenamento é automático. Essa bordagem de prevenção 
de rros m z de detecção de rros é ais eficiente aprimoramento a 
confiabilidade e programa. 
 
Voltando um pouco na história, a Revisão de Código é um dos métodos mais 
antigos e seguros para detecção de defeitos. Em geral, trata-se a a 
atenciosa do ódigo e ecomendações de omo elhorá-lo. Um programador 
geralmente não revisa seu próprio código, visto que é mais fácil encontrar erros 
nos códigos alheios do que em seu próprio código – entretanto, esse é um 
processo caro. 
 
 
4 Embora analisadores estáticos para Java estejam disponíveis, eles não são amplamente usados. 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 44 de 80 
Já imaginaram alocar diversos programadores regularmente para revisar códigos, 
e eventualmente re-revisar após receber recomendações de melhoria? Pois é, 
pode se tornar um processo inviável! Logo, pode-se fazer uso de ferramentas 
automáticas de análise de código5, que farão recomendações ao programador
Apesar de substituir um programador experiência, é barato 
viável. 
 
As questões que podem ser resolvidas por ferramentas de análise de estática de 
código-fonte podem ser divididas em três categorias: detecção de erros em 
programas; recomendações de formatação de código; e cálculo de métricas. 
Existem dezenas de rramentas de nálise estática e ódigo-fonte om suporte 
a iversas linguagens de programação (C, C++, C#, Java, Ada, Fortran, Perl, etc). 
 
Deve ser ficar cristalino que essa técnica possui seus pontos fortes e pontos fracos. 
Nenhum todo de ste e ftware deal iferentes todos produzirão 
diferentes resultados para diferentes classes de ftware. Apenas com a 
combinação de vários métodos, será possível alcançar o mais alto nível de 
qualidade de um software. Captaram a mensagem? 
 
A grande vantagem da análise estática de código-fonte é que ela permite que 
você reduza enormemente o preço de eliminação de defeitos em um software, 
visto que quanto mais cedo se detecta um erro, menor será o preço para 
consertá-lo. De acordo com Steve cConnell, consertar erro a a e de estes 
custa dez vezes mais do que ase e plementação. 
 
 
CUSTO MÉDIO DE CONSERTO DE DEFEITOS DEPENDENDO DO MOMENTO EM QUE FORAM FEITOS E DETECTADOS. 
 
5 O termo Análise Estática, em geral, refere-se a ferramentas automáticas. O termo Revisão de Código, em 
geral, refere-se à análise feita por programadores. 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 45 de 80 
 
Por fim, é importante citar – com relação às práticas ágeis na análise estática de 
código-fonte – que a evisão por pares apresenta similaridades ao processo 
proposto pela programação m pares (pair programming) as práticas ágeis. 
Quanto à automatização da análise estática, não há menção nem mesmo 
recomendação entre as práticas ágeis para essa técnica automatizada. 
 
Dessa rma, pode-se izer que s processos de nálise stática nas práticas ágeis 
são ontemplados parcialmente. Consequentemente, sob a ótica de que há 
necessidade de se realizarem técnicas de análise estática de código juntamente 
com análise dinâmica (testes), as práticas ágeis não podem ser consideradas 
completas e eficientes. Bacana? Isso já foi tema de discursiva! 
 
 
 
 
 
 
 
 
 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 50 de 80 
 
O SonarQube é bacana por conta disso! Ele consegue oferecer uma porrada de 
métricas sobre o código-fonte de um sistema. Dessa rma, o programador pode 
ter a ão struturada bre plicação que stá ndo desenvolvida pode 
controlar qualidade. Gente, uma pancada de empresas competentíssimas 
utiliza o SonarQube, como IBM, EBay, HP, Nike, Cisco, PayPal, etc. 
 
 
 
Em suma, podemos dizer que le propõe r ntral de qualidade o u 
código-fonte, possibilitando ntrole sobre rande n mero de tricas de 
software, e inda apontando u a série de ossíveis bugs. Tudo gerado através de 
uma análise completa do código-fonte, e apresentado por meio de uma interface 
web, em forma de dashboards e gráficos, como é mostrado acima. 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 51 de 80 
 
A Arquitetura do SonarQube é composta de três componentes: 
 
▪ Banco e D dos: 
 
Deve haver apenas um! Ele mantém os resultados da análise, os projetos e 
configuração global, mas também mantém uma análise histórica. 
 
▪ Servidor Web: 
 
Deve haver apenas um! Ele é responsável por fornecer aos usuários diversos 
painéis de qualidade de código-fonte e por configurar a instância do SonarQube. 
 
▪ Analisadores: 
 
Um conjunto de analisadores de código-fonte que são agrupados e acionados por 
demanda – eles utilizam a configuração armazenada no banco de dados. 
 
Por ele suporta iversas linguagens de rogramação; pode r izado ara 
análise de desenvolvimento bile; fornece um histórico de métricas e gráficos de 
evolução (chamado Time Machine) e diferentes views; integra bem com Maven, 
Ant, Grandle, Jenkings, Hudson, etc; integra bem com Eclipse, Mantis, LDAP; é 
bastante extensível por meio de plug-ins; entre outras funcionalidades. 
 
 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 55 de 80 
 
Já imaginaram fazer cada passo desse por vez ‘na mão’? Com um nte de 
passos assim, você provavelmente precisaria de cklist. Ora, por que não 
fazer desse checklist um script de build e utilizar uma ferramenta para rodá-lo? 
Isso reduz erros e proporciona uma maior consistência e padronização. Professor, 
e quanto à Integração Contínua? 
 
Ora, na minha opinião omter , mas le não é stritamente cessário. Ele 
ajuda a dentificar os problemas de construção is cedo. Se você tiver vários 
desenvolvedores fazer check-in do código o dia inteiro e, talvez, não 
sincronizando seus workspaces constantemente, há um risco de que as mudanças 
interfiram uma na outra. Um Servidor de Integração Contínua pode ajudar a 
mitigar esse risco. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 58 de 80 
 
 P CHE MAVEN 
 
 
 
Maven é uma palavra de origem iídiche que significa acumulador de 
conhecimento! Trata-se de uma ferramenta de automação de builds, responsável 
por gerenciar dependências, controlar versões de artefatos, gerar relatórios de 
produtividade, garantir a execução de testes, manter o nível de qualidade do 
código, dentre outros. Entendido? Ele é lar o mas utiliza c nvenções no 
processo e mpilação. 
 
Pessoal, um dos principais problemas no desenvolvimento e mas é m 
que oda equipe construa o rtefato final da esma forma, i.e., com as 
bibliotecas e configurações corretas. É possível contornar esse problema por meio 
de ferramentas que entendam uma linguagem de script e copie as dependências e 
configurações para os lugares corretos, gerando um pacote com a aplicação. 
 
Por exemplo: o nt permite escrever ipts de uild ara piar ibliotecas de 
lugares específicos, arquivos de c nfiguração e qualquer utro po e ecursos 
para rtefato da plicação. Dessa forma, garante-se que qualquer 
desenvolvedor consiga gerar o artefato da aplicação localmente, sabendo que 
este artefato gerado é o mesmo que o resto da equipe irá utilizar. 
 
No entanto, onde devemos guardar as bibliotecas externas ao nosso projeto? A 
solução mais comum é guardá-las no repositório junto com o código fonte, assim 
todos os desenvolvedores compartilharão as mesmas dependências, e os 
caminhos das pastas são mantidos. Esse t po e rganização é ito dotada 
funciona ito bem para rojetos pequenos e m equipes bem pequenas. 
 
Quando começamos a prolongar a vida do projeto, percebemos que o overhead 
de manutenção começa a interferir no desenvolvimento. Isso porque o número de 
dependências começa a aumentar e com o tempo vão saindo versões novas de 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 59 de 80 
algumas dependências antigas. Se t das as dependências estão a sma pasta, 
fica ito difícil fazer ntrole de ersão e e ansitividade as mesmas. 
 
Portanto a rramenta de t gração e projetos que vita a 
necessidade de eplicar rmações em repositórios ara r dependências. 
Para tal, ele utiliza outra abordagem! Ele isola as bibliotecas utilizadas no projeto 
em um repositório compartilhado pela equipe. Assim, não há necessidade de se 
preocupar com duplicidade de dependências entre módulos do projeto. 
 
Já rsão das dependências fica centralizadas em arquivos de nfiguração dos 
projetos em rquivos POM! Assim, é possível realizar substituições de bibliotecas e 
identificar falhas de dependências. Por fim, ele permite a utilização de diversos 
plug-ins, tanto para geração de código quanto para integração com plataformas 
de teste ou suporte a famosas IDEs do mercado. 
 
Ele é utilizado para definir como um arquivo .java deve ser compilado para um 
arquivo .class; empacotá-los em um arquivo .jar (ou .war ou .ear); (pré/pós) 
processar com ferramentas; gerenciar o CLASSPATH; e outras atividades 
requeridas para compilar um projeto. Vamos ver agora alguns detalhes especiais! 
Ele é baseado nceito de PO (Project Object Model)! O quê, professor? 
 
 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 64 de 80 
 KINS 
 
 
 
Galera, o enkins é ma rramenta de t gração ntínua desenvolvida m Java 
e e ódigo berto! Ele fornece versões (builds) para os mais diferentes tipos de 
projetos possíveis. 
 
Como vimos, a integração contínua é uma das práticas mais populares no 
desenvolvimento de sistemas nos últimos tempos. Os desenvolvedores integram 
correção de bugs, novas funcionalidades ou mesmo alterações nas 
funcionalidades existentes. A ferramenta e t gração ntínua rifica 
processo de tegração m versões de uild utomatizadas m testes que 
detectam problemas no digo r t grado. 
 
O Jenkins é uma ferramenta simples, extensível, bastante amigável que provê 
serviços de integração contínua para desenvolvimento de sistemas. Ele suporta 
ferramentas de ntrole de rsão como t am, Subversion, CVS, Git, AccuRev, 
dentre outros. Jenkins pode mpilar criar rsões) de rojetos baseados no 
Freestyle, Apache n e pache aven. 
 
Pessoal, o Jenkins tem uma característica bem interessante que a possibilidade de 
estender suas funcionalidades a partir de plugins. Alguns exemplos de plugins 
disponíveis são de gerenciamento e código-fonte, controladores escravos, 
triggers para iação de uilds, notificação de uilds, relatórios e uilds, 
integração com sites externos, plugins de rface ráfica, de os de 
autenticação, desenvolvimento d id, iOS, .NET, Ruby e itos mais... ufa! 
 
O Jenkins define interfaces ou classes abstratas que modelam um build de um 
sistema. Elas são usadas para definir um contrato que determina o que precisa ser 
implementado e o Jenkins usa os plugins para estender essas implementações. 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 65 de 80 
Algumas características que tornaram o Jenkins muito popular são: 
 
• Fácil instalação em diferentes sistemas operacionais 
• Atualizações de versão (do Jenkins) fácil de instalar 
• Interface simples e fácil de usar 
• Facilmente extensível com mais de 400 plugins (até o fechamento dessa 
edição :P) 
• Fácil configuração do ambiente a partir da interface do usuário 
• Arquitetura mestre-escravo que permite a criação de builds de forma 
distribuída, reduzindo a carga no servidor de integração contínua 
• Possuis os testes baseados no famoso e bem suportado JUnit, apresentando 
resultados de forma gráfica e também tabular 
• Agendamento de builds usando expressões do cron, muito usado em 
ambientes Linux (http://en.wikipedia.org/wiki/Cron). 
• Notificações específicas para cada status de build (sucesso, falha, etc). 
 
Galerinha, somente para ver a carinha do Jenkins e mostrar como é fácil de 
instalar, vamos mostrar alguns detalhes! Os passos para instalação do Jenkins são: 
 
• Fazer o download do arquivo Java Web Archive do Jenkins (.war) no site 
http://jenkins-ci.org/. 
 
 
 
• Copiar o arquivo jenkins.war no sistema de arquivos 
• Abrir o prompt de comando (Windows, Linux, MacOs) e executar “java –jar 
Jenkins.war”. 
• Verificar se a instalação funcionou abrindo no navegador web o endereço 
http://localhost:8080 (ou onde você instalou o Jenkins) 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 66 de 80 
• Buscar a senha para desbloquear a instalação (imagem abaixo) 
 
 
 
 
Pronto!! Ele já está rodando, pronto para criar um projeto de integração 
contínua, ou, na linguagem do Jenkins, um novo Job. 
 
 
 
Esses são os tipos de Jobs que o Jenkins permite criar: 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 67 de 80 
 
 
Para iar u mbiente e gração contínua o z ro, o ais comumé 
selecionar a rimeira opção, que permite onstruir egras do ero. Outra opção 
interessante uscar digo-fonte ma conta de G thub. Para termos uma 
noção de como podemos gerar os builds, seguem as opções disponíveis na 
criação de um job: 
 
 
 
Legal, não acham?? Ele é bem flexível e permite criar vários passos como os 
mostrados acima para gerar os builds da sua aplicação. Depois de gerado o build, 
existem outras tantas opções disponíveis: 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 68 de 80 
 
 
 
Galerinha, esse é o Jenkins, uma ferramenta bem interessante para uso de 
integração de contínua bastante utilizado. Se encontrarem questões sobre o 
assunto, mande pra gente! 
 
 
 
 
Curso de Desenvolvimento de Software para Concursos 
Profs. Diego Carvalho e Leon Sólon – Aula 11 
 
Profs. Diego Carvalho e Leon Sólon www.estrategiaconcursos.com.br Pág. 72 de 80 
_______ é uma ramificação no desenvolvimento, usada para descrever o 
processo de divisão dos arquivos de um projeto em linhas de desenvolvimento 
independentes. 
 
Assinale a alternativa que preencha corretamente, de cima para baixo, as 
lacunas dos trechos acima: 
 
a) Checkout – Release – Branch. 
b) Commit – Revision – Branch. 
c) Update – Revision – Merge. 
d) Commit – Checkin – Hijack. 
e) Update – Checkin – Merge.

Mais conteúdos dessa disciplina