Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
AULA 10
SUMÁRIO PÁGINA
Apresentação 01
- Sistemas Móveis 02
- Android 15
- iOS 30
- Segurança no Desenvolvimento 37
- Compiladores 55
- Interpretadores 63
Lista de Exercícios Comentados 83
Gabarito 99
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).
SISTEMAS MÓVEIS
16712855225
Galera, eu tenho alguns amigos de faculdade que enveredaram para a área de jogos
para dispositivos móveis Pensem em termos de marketing e dinheiro! É bom
comercialmente que um jogo funcione apenas no Galaxy S5, mas não no Galaxy S5
Mini? É bom comercialmente que um jogo não torre a bateria no iPhone 6, mas torre
no iPhone 6S? Evidente que não!
DESENVOLVIMENTO NATIVO
Por falar nisso, através das APIs disponíveis das linguagens utilizadas em cada
plataforma, um aplicativo nativo pode acessar funcionalidades oferecidas p
recursos nativos do sistema operacional, tais como: GPS, SMS, E-Mail, Acelerômetro,
Bússola, Câmera Fotográfica, etc. Esses aplicativos nativos evidentemente podem
ser baixados, instalados e vendidos em lojas de aplicativos.
As diferenças entre as plataformas também são importantes, pois para cada uma há
diferentes ferramentas de desenvolvimento, bibliotecas e equipamentos com
diferentes capacidades. Desenvolver aplicativos nativos para diversos sistemas
operacionais requer uma equipe de trabalho com conhecimento em várias
tecnologias, visto que não há reaproveitamento de código. Vejam alguns exemplos:
Com relação a sua interface, os componentes de um aplicativo nativo são iguais aos
do sistema operacional utilizado pelo sistema operacional do dispositivo, portanto
16712855225
Vamos resumir nosso papo! Se você for criar uma aplicação nativa para Android,
você poderá executá-lo no iOs? Não, e vice-versa! Você terá que criar uma aplicação
para cada plataforma e provavelmente necessitará de duas equipes (cada uma
especializada em uma linguagem). Você terá acesso aos recursos do dispositivo e
poderá instalar em uma loja de aplicativos – obviamente, com mais segurança.
16712855225
DESENVOLVIMENTO CROSS-PLATFORM
Além disso, essas aplicações precisam estar conectadas à internet para funcionar.
Como nem todos os usuários de smartphone possuem conexão à internet, e
algumas vezes essas conexões não são de boa qualidade, pode não ser uma boa
ideia confiar apenas nessas tecnologias. Deve-se avaliar o contexto de utilização e
nos objetivos do aplicativo.
Isso faz com que, em suma, a experiência do usuário que está utilizando a aplicação
em um iOS seja a mesma que um em um Windows Phone, por exemplo, o que é
muito importante em grande parte das aplicações. O aplicativo híbrido funciona
dentro do browser do sistema operacional. O browser implementa uma classe que
é capaz de exibir conteúdo web.
A aplicação híbrida nada mais é que uma aplicação web (HTML5, CSS3, etc)
envelopada em um contêiner nativo. Existem dezenas de ferramentas para gerar
esse contêiner nativo para cada plataforma, tais como Cordova, Sencha Touch, etc.
Para diferenciar todas essas abordagens, eu recomendo que façamos uma
comparação geral. Atenção no quadro abaixo:
Além disso, se você quiser também acesso a plataforma nativa e distribuição segura
em uma loja de aplicativos, vá de Desenvolvimento Híbrido. Por fim, se a alta
capacidade não é seu foco, mas a capacidade de rodar em diversas plataformas,
também exigindo habilidades do desenvolver, atualizações instantâneas e
automáticas e distribuição irrestrita, seu negócio é Desenvolvimento Web (HTML5).
16712855225
Comentários:
Conforme vimos em aula, a questão está perfeita! De modo geral, são essas duas
formas principais – o tipo híbrido é uma combinação dos anteriores.
Gabarito: C
Comentários:
Conforme vimos em aula, a questão está perfeita! Deve haver uma preocupação
com as características de hardware do dispositivo.
Gabarito: C
ACERTEI ERREI
16712855225
ANDROID
continua tendo código aberto, mas com aplicações com software de código
fechado. Galera, quem aí tem um celular com Android? Vocês devem saber que é
possível trocar a ROM! Professor, o que é ROM? É como um firmware personalizado
do sistema operacional – pensem como uma customização do sistema operacional.
Por exemplo: quando eu tinha um Moto X, que eu usava o CyanogenMod. Por que
eu estou falando isso? Para enfatizar que o Google é agora dono do Android, mas
o código continua sendo aberto – permitindo que muitos desenvolvedores criem
personalizações. O Android surgiu a partir da Versão 2.6 do Kernel do Linux e
atualmente se baseia na Versão 3.x.
Professor, o que eu preciso para desenvolver? Você precisa do Android Studio, que
é um kit de ferramentas para desenvolvimento Android; e você precisa do SQLite,
que é uma biblioteca para implementar um banco de dados e armazenar dados.
Uma curiosidade engraçada também é que cada versão do sistema operacional
possui o nome de uma sobremesa – a versão atual é a Marshmallow 6.0.
16712855225
VERSÃO SLOGAN
Android 3.0 Otimizada para tablets, esta versão abre novos horizontes onde quer
Honeycomb que você esteja.
Android 4.0 O Android atinge a maioridade com um design novo e refinado.
IceCream Sandwich Simples, bonito e muito inteligente.
Android 4.1 O Android fica mais rápido, suave e com um visual incrível. Com o
Jelly Bean Google Now, você tem a informação certa na hora certa.
Android 4.4 Inteligente, simples e totalmente seu. Um design mais refinado,
Kitkat melhor desempenho e novos recursos.
Android 5.0 Mais doce novidade do Android. Tenha a elegância do Android em
Lollypop telas grandes e pequenas, com informação certa no momento certo.
Android 6.0 O Android Marshmallow chega para adocicar a experiência do
Marshmellow sistema da Google com diversos retoques em vários aspectos.
O Android roda sobre uma máquina virtual chamada Dalvik VM! Trata-se de uma
máquina virtual otimizada para requerer pouca memória e processamento, e
projetada para permitir que múltiplas instâncias da máquina virtual rodem ao
mesmo tempo, deixando para o sistema operacional o isolamento de processos, o
gerenciamento de memória e o suporte a threading.
Uma máquina virtual é uma aplicação de software que se comporta como se fosse
um dispositivo independente com seu próprio sistema operacional. Quem aí já
instalou VMWare? Vocês sabem, então, que podem rodar uma máquina virtual em
um computador que opera com um sistema operacional completamente diferente
do sistema operacional da máquina física.
16712855225
Eu, por exemplo, tenho um MacBook, no entanto eu instalei uma máquina virtual
que roda Windows! Então é possível rodar um Windows no Macbook? Sim, por meio
de uma máquina virtual. A Dalvik é frequentemente referenciada como uma
Máquina Virtual Java, mas isso não é estritamente exato, porque o bytecode que ela
opera não é o bytecode da JVM.
Em vez disso, uma ferramenta de conversão chamada dx, incluída no SDK Android,
converte os arquivos .class de uma classe compilada por um compilador Java
comum para a JVM em outro formato especifico de classe (.dex). Vejam a imagem
abaixo! Observem que o Android não roda diretamente sobre a JVM! Apesar de ser
escrito em Java, ele roda diretamente sobre o Dalvik VM.
Atividades (Activities):
As atividades representam uma tela única com uma interface do usuário. Por
16712855225
exemplo: um aplicativo de e-mails pode ter uma atividade para mostrar uma lista
de novos e-mails, outra atividade para escrever um e-mail e outra para ler e-mails.
Embora essas atividades funcionem juntas para formar uma experiência de usuário
coesa no aplicativo de e-mails, elas são independentes entre si.
Dessa forma, um outro aplicativo pode iniciar qualquer uma dessas atividades (se o
aplicativo de e-mails permitir). Por exemplo: um aplicativo de câmera pode iniciar a
atividade no aplicativo de e-mail. Vocês já tiraram uma foto no celular e a enviaram
por e-mail? Pois é! Você pode iniciar a atividade de escrita de e-mail lá no aplicativo
da câmera. Bacana?
Intenções (Intents
Uma Intenção (Intent) é uma descrição abstrata de uma operação a ser executada.
Ela pode ser utilizada para iniciar uma Atividade, para ativar um broadcast, para
enviar uma mensagem para uma aplicação que roda em outro processo, entre
outros. Podemos dizer que ele envia uma solicitação para o que Android realize
alguma ação.
Por exemplo: para que o sistema saia de uma atividade para outra, dispara-se uma
intenção. A documentação oficial afirma que seu uso mais significativo ocorre
quando da inicialização de uma Atividade, e que também podemos imaginá-lo
como uma cola entre atividades. É uma estrutura de dados que armazena uma ação
a ser executada. Certinho?
Serviços (Services
Outro componente, como uma atividade, pode iniciar o serviço e deixá-lo executar
ou vincular-se a ele para interagir. Deve-se atentar ao fato de que eles não são um
processo separado. Eles rodam na thread principal do processo corrente e possuem
seu próprio ciclo de vida. Os serviços devem estar declarados no AndroidManifest.xml –
não confundir com o arquivo principal do projeto AndroidManifet.xml.
Comentários:
A imagem acima apresenta três peculiaridades: primeiro, ela infelizmente não mostra
as duas últimas versões: Lollipop e Marshmallow; segundo, a versão Honeycomb foi
lançada, a princípio, para tablets; e terceiro, a partir da versão IceCream Sandwich
4.0, o Android passou-se a se basear no kernel 3.x e, não mais, no kernel 2.6 do Linux.
Vamos agora ver o slogan de cada versão:
Gabarito: E
Comentários:
Conforme vimos em aula, o provedor de conteúdo é como uma base de dados que
provê conteúdo! Ora, se essa é a função dele, não faz sentido dizer que não se
justifica sua utilização para disponibilizar dados para várias atividades ou aplicativos
distintos. Como não? Essa é a função dele!
Gabarito: E
Comentários:
A aplicação híbrida nada mais é que uma aplicação web (HTML5, CSS3, etc)
envelopada em um contêiner nativo. Existem dezenas de ferramentas para gerar esse
contêiner nativo para cada plataforma, tais como Cordova, Sencha Touch, etc. Para
diferenciar todas essas abordagens, eu recomendo que façamos uma comparação
geral. Atenção no quadro abaixo:
Conforme vimos em aula, a aplicação híbrida envelopa uma aplicação web comum
(Ex: HTML5) com o auxílio de uma ferramenta (Ex: Cordova) – simulando uma
aplicação nativa – e, dessa forma, ele se torna capaz de acessar recursos específicos
de cada plataforma. No entanto, o examinador cometeu um vacilo: o início da
questão dá a entender que um tipo híbrido não é um ambiente cross-platform. Bem,
basta ver a imagem hierárquica colocada em aula para perceber que isso não faz
sentido, mas a questão infelizmente não foi anulada.
16712855225
Gabarito: C
Comentários:
O Android roda sobre uma máquina virtual chamada Dalvik VM! Trata-se de uma
máquina virtual otimizada para requerer pouca memória e processamento, e
projetada para permitir que múltiplas instâncias da máquina virtual rodem ao mesmo
tempo, deixando para o sistema operacional o isolamento de processos, o
gerenciamento de memória e o suporte a threading.
Conforme vimos em aula, os aplicativos são escritos em Java, mas rodam em uma
Dalvik VM e, não, Java VM.
Gabarito: E
Comentários:
Uma Intenção (Intent) é uma descrição abstrata de uma operação a ser executada.
Ela pode ser utilizada para iniciar uma Atividade, para ativar um broadcast, para
enviar uma mensagem para uma aplicação que roda em outro processo, entre
outros. Podemos dizer que ele envia uma solicitação para o que Android realize
alguma ação.
16712855225
Conforme vimos em aula, a questão está perfeita! Ela exagerou, colocando código
de programação, mas esse código está apenas criando uma intenção de visualizar
a página http://www.cespe.unb.br.
Gabarito: C
Comentários:
O Android roda sobre uma máquina virtual chamada Dalvik VM! Trata-se de uma
máquina virtual otimizada para requerer pouca memória e processamento, e
projetada para permitir que múltiplas instâncias da máquina virtual rodem ao mesmo
tempo, deixando para o sistema operacional o isolamento de processos, o
gerenciamento de memória e o suporte a threading.
Gabarito: E
a) Unix.
b) Linux.
c) Android.
d) Mac OS X.
e) Windows.
Comentários:
Gabarito: C
Comentários:
Essa era uma questão para ninjas! Deseja-se avaliar na questão se o aluno conhece
os módulos específicos de cada funcionalidade – eu acho ridículo cobrar isso, mas
vamos lá! O Módulo OOM Handling (Out Of Memory) trata do gerenciamento de
Gabarito: E
a) Cupcake
b) Frozen Yogurt
c) Gingerbread.
d) Honeycomb.
e) Ice Cream.
Comentários:
A imagem acima apresenta três peculiaridades: primeiro, ela infelizmente não mostra
as duas últimas versões: Lollipop e Marshmallow; segundo, a versão Honeycomb foi
lançada, a princípio, para tablets; e terceiro, a partir da versão IceCream Sandwich
4.0, o Android passou-se a se basear no kernel 3.x e, não mais, no kernel 2.6 do Linux.
Vamos agora ver o slogan de cada versão:
Gabarito: D
Comentários:
Outro componente, como uma atividade, pode iniciar o serviço e deixá-lo executar
ou vincular-se a ele para interagir. Deve-se atentar ao fato de que eles não são um
processo separado. Eles rodam na thread principal do processo corrente e possuem
seu próprio ciclo de vida. Os serviços devem estar declarados no AndroidManifest.xml –
não confundir com o arquivo principal do projeto AndroidManifet.xml.
Gabarito: E
Comentários:
Gabarito: C
a) V, F, F, V.
b) F, V, F, V.
c) F, V, V, F.
d) V, V, F, F.
Comentários:
Gabarito: D
Comentários:
Gabarito: C
ACERTEI ERREI
iOS
pertencente à Apple! Lançado em 2007, roda no iPhone, iPod, iPad e Apple TV. Ele
é derivado do sistema operacional dos desktops, chamado MacOS X. Novas versões
são lançadas anualmente geralmente em junho. O número de usuários que utiliza
iPhone/iPad tem aumentado bastante.
No mais alto nível, o iOS atua como um intermediário entre o hardware subjacente
e os aplicativos – ora, aplicativos não conversam com o hardware diretamente. Em
vez disso, se comunicam com o hardware através de um conjunto de interfaces bem
definidas. Essas interfaces tornam mais fácil a criação de aplicativos que funcionam
consistentemente em dispositivos com diferentes capacidades de hardware.
OBSERVAÇÃO
O Cocoa Touch define uma arquitetura básica (MVC) para criação de aplicativos:
“MVC is central to a good design for a Cocoa application. The benefits of adopting this pattern
are numerous. Many objects in these applications tend to be more reusable, and their
interfaces tend to be better defined. Applications having an MVC design are also more easily
extensible than other applications. Moreover, many Cocoa technologies and architectures
are based on MVC and require that your custom objects play one of the MVC roles”.
Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 100
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 10
Esses frameworks definem tipos básicos utilizados por todos os aplicativos. Essa
camada também contém tecnologias individuais para suportar características como:
Location, iCloud, Social Media e Networking. Detalhe importante: o Foundation faz
parte da Camada Cocoa Touch e Core Services. Por fim, a Camada Core OS trata de
funcionalidades de mais baixo nível.
Mesmo que você não utilize essas tecnologias diretamente em seus aplicativos,
provavelmente eles estão sendo utilizados por outros frameworks. Nessa camada,
trata-se de gerenciamento de memória, threads, processamento, drivers, entre
outros recursos. Por fim, o iOS não implementa um Garbage Collector, mas o
Objective-C possui um Automatic Reference Counting (ARC) para liberar a memória.
Dessa forma, o programador não tem que ficar preocupado em liberar referências.
Para acabar, o ambiente nativo para desenvolvimento de aplicativos para o iOS é o
XCode! Ele suporta por padrão Objective-C e AppleScript. Além disso, ele possui
ferramentas para criação, design e debug de aplicações iOS. Da mesma forma que
16712855225
é comum usar o Eclipse para o Android, é comum usar o XCode para o iOS.
Comentários:
16712855225
Gabarito: C
Comentários:
Mesmo que você não utilize essas tecnologias diretamente em seus aplicativos,
provavelmente eles estão sendo utilizados por outros frameworks. Nessa camada,
trata-se de gerenciamento de memória, threads, processamento, drivers, entre outros
recursos. Por fim, o iOS não implementa um Garbage Collector, mas o Objective-C
possui um Automatic Reference Counting (ARC) para liberar a memória.
Gabarito: C
a) I, II e III.
b) I e II, apenas.
c) I e III, apenas. 16712855225
d) II e III, apenas.
Comentários:
Dessa forma, o programador não tem que ficar preocupado em liberar referências.
Para acabar, o ambiente nativo para desenvolvimento de aplicativos para o iOS é o
XCode! Ele suporta por padrão Objective-C e AppleScript. Além disso, ele possui
ferramentas para criação, design e debug de aplicações iOS. Da mesma forma que é
comum usar o Eclipse para o Android, é comum usar o XCode para o iOS.
Gabarito: A
Comentários:
Dessa forma, o programador não tem que ficar preocupado em liberar referências.
Para acabar, o ambiente nativo para desenvolvimento de aplicativos para o iOS é o
XCode! Ele suporta por padrão Objective-C e AppleScript. Além disso, ele possui
ferramentas para criação, design e debug de aplicações iOS. Da mesma forma que é
comum usar o Eclipse para o Android, é comum usar o XCode para o iOS.
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: C
ACERTEI ERREI
SEGURANÇA NO DESENVOLVIMENTO
A Microsoft usa o acrônimo STRIDE para classificar os efeitos que podem ser
provocados em decorrência de falhas de segurança em uma aplicação, sendo:
Esses efeitos podem produzir impactos de baixo a alto valor, dependendo do tipo
de aplicação ou sistema computacional no qual o software está executando. Podem
gerar incidentes simples (Ex: Reinstalar um aplicativo em uma máquina de uso
pessoal), bem como incidentes que impactam vidas humanas (Ex: Perda de controle
de um sistema de defesa, de transportes, médico-hospitalares, etc).
16712855225
É importante lembrar que cada um desses caminhos representa um risco que pode,
ou não, ser grave o suficiente para justificar a sua atenção. Às vezes, esses caminhos
são triviais para encontrar e explorar, e em outras, são extremamente difíceis. Da
mesma forma, o dano causado pode ter nenhuma consequência, ou pode acabar
com o seu negócio.
Para determinar o risco para a sua organização, você pode avaliar a probabilidade
associada a cada agente de ameaça, vetor de ataque, vulnerabilidade de segurança
e combiná-la com uma estimativa dos impactos técnico e no negócio da sua
empresa. Juntos, esses fatores determinam o risco total! O foco é na identificação
dos riscos mais graves para uma ampla gama de organizações.
RISCO DESCRIÇÃO
16712855225
Falhas XSS ocorrem sempre que uma aplicação recebe dados não
confiáveis e os envia ao navegador sem validação ou filtro adequados.
XSS permite aos atacantes executarem scripts no navegador da vítima
Cross-Site
que podem “sequestrar” sessões do usuário, desfigurar sites, ou
Scripting (XSS)
redirecionar o usuário para sites maliciosos.
O SQL Injection exige um pouco mais da nossa atenção! De acordo com Navathe,
em um ataque de Injeção de SQL, o atacante injeta uma entrada de cadeia de
caracteres pela aplicação, que muda ou manipula a instrução SQL para o proveito
do atacante. Em suma, eles buscam acessar maliciosamente dados sensíveis de
bancos de dados – eles podem destruir tudo!
16712855225
Ela ocorre quando o atacante consegue inserir uma série de Instruções SQL dentro
de uma consulta através da manipulação das entradas de dados e se aproveita de
vulnerabilidades para consultar tabelas do banco de dados para roubar informação
ou inserir código malicioso. Qualquer site que monte páginas com base no
conteúdo de um banco de dados (Ex: gerenciadores de conteúdo) corre esse risco.
Isso porque nem os clientes nem os desenvolvedores estão preparados para tratar
previamente da questão. Satisfazer necessidades de segurança em uma fase tardia
do desenvolvimento produz elevado impacto negativo sobre o projeto, resultando
muitas vezes na produção e implantação de software inseguro, que contém um
significativo número de vulnerabilidades capazes de serem exploradas por hackers.
1
Entidades de software que agem como usuário, como agentes proxies e webservices.
POSITIVA
FALHAR COM SEGURANÇA EXECUTAR COM MENOS PRIVILÉGIOS
O SDL lista uma série de atividades que devem ser realizadas em cada fase do
processo. As fases são: Treinamento, Requisitos, Design, Implementação,
Verificação, Lançamento e Resposta. Ele é um processo de desenvolvimento de
software que ajuda os desenvolvedores na construção de softwares mais seguros e
na conformidade com requisitos de segurança, ao mesmo tempo que reduz custos.
Por fim, cabe salientar que o Secure Development Lifecycle (SDL) apreseta dois
documentos principais! O primeiro é simplesmente uma versão mais resumida do
segundo, que traz conceitos mais aprofundados. Não há qualquer diferença entre
eles, a não ser pela profundidade de seus conteúdos. Ferramentas e técnicas são
aplicáveis a qualquer um dos dois!
16712855225
REVISÃO DE CÓDIGO
Com contexto apropriado, podemos fazer uma estimativa de risco grave, que
representa tanto a probabilidade de ataque quanto o impacto nos negócios de uma
violação. Categorização correta das vulnerabilidades ajuda com prioridade de
remediação e fixa as coisas certas em oposição a perder tempo, que fixa tudo. Bem,
temos uma lista de práticas de revisão de código que podem nos ajudar:
Revise menos que 200-400 linhas por vez – mais que isso, a habilidade de
encontrar defeitos cai drasticamente;
16712855225
Busque uma taxa de inspeção menor que 300-500 Linhas de Código por Hora –
revisar rápido não é revisar bem;
Reserve tempo para uma revisão apropriada e lenta, mas não mais de 60-90
minutos;
Cuidado com o efeito Big Brother – em outras palavras, não fique paranoico
achando que está sendo observado pelos seus pares;
Revise ao menos parte do código, mesmo que não possa fazer tudo, para se
beneficiar do Efeito Ego;
16712855225
CATEGORIAS DE TESTES
TESTE DE GERENCIAMENTO DE TESTE DE LÓGICA DE NEGÓCIO;
CONFIGURAÇÃO;
TESTE DE AUTENTICAÇÃO; TESTE DE AUTORIZAÇÃO;
TESTE DE AJAX; -
Pessoal, não vale a pena estudar os controles! Essa disciplina já cai pouquíssimo –
custo-benefício é baixíssimo! A Categoria de Gerenciamento de Sessão, por
exemplo, possui controles como: Teste de Cookies e Atributos; Teste de Variáveis
de Sessão Expostas; Testes de Esquema de Gerenciamento de Sessão; Testes de
Fixação de Sessão; entre outros.
16712855225
(CESPE - 2014 – TC/DF – Analista de Sistemas) SQL Injection é uma técnica usada
para executar um código no espaço de outro programa, o que, normalmente,
força o programa a carregar a DLL (Dynamic-Link Library), que assume o espaço
de memória do programa em execução.
Comentários:
O SQL Injection exige um pouco mais da nossa atenção! De acordo com Navathe,
em um ataque de Injeção de SQL, o atacante injeta uma entrada de cadeia de
caracteres pela aplicação, que muda ou manipula a instrução SQL para o proveito do
atacante. Em suma, eles buscam acessar maliciosamente dados sensíveis de bancos
de dados – eles podem destruir tudo!
Ela ocorre quando o atacante consegue inserir uma série de Instruções SQL dentro de
uma consulta através da manipulação das entradas de dados e se aproveita de
vulnerabilidades para consultar tabelas do banco de dados para roubar informação
ou inserir código malicioso. Qualquer site que monte páginas com base no conteúdo
de um banco de dados (Ex: gerenciadores de conteúdo) corre esse risco.
Conforme vimos em aula, não é nada disso! Não há nenhuma relação com DLL!
16712855225
Gabarito: E
Comentários:
“As part of the design phase of the SDL, threat modeling allows software architects to identify and mitigate
potential security issues early, when they are relatively easy and cost-effective to resolve. Therefore, it helps
reduce the total cost of development.”
Gabarito: C
Comentários:
Com contexto apropriado, podemos fazer uma estimativa de risco grave, que
representa tanto a probabilidade de ataque quanto o impacto nos negócios de uma
violação. Categorização correta das vulnerabilidades ajuda com prioridade de
remediação e fixa as coisas certas em oposição a perder tempo, que fixa tudo. Bem,
temos uma lista de práticas de revisão de código que podem nos ajudar:
Revise menos que 200-400 linhas por vez – mais que isso, a habilidade de
16712855225
Conforme vimos em aula, é no máximo 400 linhas de código por vez e, não, 1000!
Gabarito: D
Uma das características desse processo é que ele provê dois roteiros, sendo um
com foco no suporte a desenvolvimento de novos sistemas com base em um
processo iterativo, e outro que enfoca a manutenção de sistemas já existentes.
Comentários:
Por fim, cabe salientar que o Secure Development Lifecycle (SDL) apreseta dois
documentos principais! O primeiro é simplesmente uma versão mais resumida do
segundo, que traz conceitos mais aprofundados. Não há qualquer diferença entre
eles, a não ser pela profundidade de seus conteúdos. Ferramentas e técnicas são
aplicáveis a qualquer um dos dois!
Conforme vimos em aula, não existe essa diferença de foco – ambos falam as
mesmas coisas, porém com profundidades distintas.
Gabarito: E
Comentários:
16712855225
Conforme vimos em aula, ele possui uma taxonomia de vulnerabilidades que podem
ocorrer em um código fonte – são seis tipos de problemas identificados.
Gabarito: C
Comentários:
Gabarito: C
ACERTEI ERREI
16712855225
COMPILADORES
PRÉ-PROCESSADOR (PREPROCESSOR)
O uso de pré-processadores tem vindo a ser cada vez menos comum à medida que
as linguagens recentes fornecem características mais abstratas em vez de
características orientadas lexicalmente. Há também linguagens recentes que tem
pouca ou nenhuma funcionalidade, como por exemplo a linguagem Java, que não
possui um pré-processador.
COMPILADOR (COMPILER)
Ex: Eu vou passar nesse concurso! Os tokens obtidos foram: “Eu”; “vou”; “passar”;
“nesse”; “concurso”; “!”.
Ex: string nome = “Diego’; ora, se eu declarar um valor com aspas-duplas, preciso
fechá-lo com aspas duplas e, não, simples.
Ex: int x = “Diego”; ora, eu não posso declarar uma variável do tipo inteiro e
atribuir um valor textual.
MONTADOR (ASSEMBLER)
Existe uma maneira de efetuar tradução de forma mais rápida e simples, por meio
de um Montador. O processo de Montagem traduz um programa escrito em
linguagem de montagem (Ex: Assembly) em um programa equivalente em
linguagem de máquina (0 e 1). Galera, não confundam Assembler, que é um
montador, com Assembly, que é uma linguagem de programação de baixo nível.
3
Essa é a única fase da síntese que é obrigatória; as duas anteriores são opcionais. Além disso, lembrem-se que
o código-objeto é muito parecido com um código de montagem, porém com referências utilizadas pelo Ligador.
16712855225
relocável, que pode ser passado diretamente para um ligador e/ou carregador, i.e.,
já entregam um código-objeto!
CARREGADOR (LOADER)
para execução.
BIBLIOTECAS
4
Atualmente também existem Carregadores que fazem a ligação de partes do programa em tempo de execução.
Estes são chamados Carregadores-Ligadores.
Dessa forma, mesmo quando a biblioteca presente no seu sistema mude, seja
removida ou corrompida, o programa continuará funcionando. Porém além do seu
binário final ocupar mais espaço em disco e memória (já que ele inclui a biblioteca
estática), o seu programa não poderá usufruir de qualquer otimização que venha a
ocorrer nesta biblioteca, a não ser que ele seja recompilado/reinstalado.
disco e na memória.
16712855225
5
Como já foi dito anteriormente, alguns compiladores fazem também o papel de montador e já entregam um
código-objeto.
6
O arquivo-objeto é uma combinação de instruções de linguagem de máquina, dados e informações necessárias
para colocar as instruções corretamente na memória.
INTERPRETADORES
Além disso, o código não precisa ser compilado para serem executados e
consomem menos memória do que um compilador. Por outro lado, é necessário
ler o código-fonte original toda vez que se quiser executar o programa. Exemplos
comuns de linguagens de programação interpretadas são Basic, Prolog e Python,
além do Java, que é uma linguagem híbrida: compilada e interpretada.
16712855225
Comentários:
Voltemos à teoria:
16712855225
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Voltemos à teoria:
16712855225
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Essa questão foi anulada! O item sugere que o arquivo de saída do Ligador seja um
módulo pronto a ser executado, e, em algumas situações, isso não ocorre.
16712855225
Gabarito: X
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
10. (CESPE - 2007 – TSE - Analista de Sistemas – C Para gerar um código objeto,
um compilador precisa fazer a análise sintática e semântica de um programa.
Para isso ser possível, a semântica da linguagem, mas não a sintaxe, é descrita
na notação Backus-Naur Form (BNF).
Comentários:
Gabarito: E
Comentários:
Gabarito: E
12. (CESPE - – FUB - Analista de Sistemas) O compilador pode ser visto como
um tradutor, uma vez que o mesmo transforma um programa de linguagem de
alto nível para linguagem de baixo nível.
Comentários:
Gabarito: C
Comentários:
Como não? Claro que interferem! Entradas e Saídas de dados geralmente são
armazenadas em uma variável.
Gabarito: E
Comentários:
Perfeito, é exatamente isso! Compilador opera sobre uma linguagem de alto nível
(entre outras) para traduzir para uma linguagem de máquina, já o Montador opera
sobre uma linguagem de montagem (Assembly) para traduzir também para uma
linguagem de máquina.
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Assembly é uma linguagem de montagem e, não, de máquina. Além disso, ela não
é compilada, mas montada.
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Não, eles não são usados exclusivamente por linguagens de programação de alto
nível.
Gabarito: E
Comentários:
Não, o erro é detectado na Análise Léxica. Lembrm-se que na Análise Léxica que se
lê o código-fonte, caractere por caractere, e divide o código escrito em símbolos
léxicos chamados tokens, guardados em uma tabela de símbolos. Quando começar
a compilação e for realizada a análise léxica vai separar “int” e “7g”, mas não existe
“7g”. No entanto, esse token não pode existir, uma variável não pode começar com
16712855225
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
a) análise léxica.
b) análise semântica.
c) análise sintática.
d) geração de código executável.
e) verificação de tipos.
16712855225
Comentários:
Gabarito: A
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: C
16712855225
Comentários:
Perfeito. Lembram-se das diretivas de compilação? Elas não são compiladas, são
pré-processadas antes do processo de compilação em si.
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Gabari : C
Comentários:
Gabarito: E
Comentários:
Gabarito: C
Comentários:
Gabarito: E
Comentários:
Claro que não! Elas precisam ser traduzidas, porque computadores só entendem 0
e 1 (0V e 5V).
Gabarito: E
16712855225
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Perfeito, essa é uma questão para decorar! Muito bem escrita e boa para sedimentar
alguns conceitos!
Gabarito: C
Comentários:
Não! O Linker (Ligador) não efetua tradução alguma! Quem faz isso é o Compilador!
Gabarito: E
Comentários:
Gabarito: E
Comentários:
Não, é o Ligador que é responsável por receber como entrada os diversos módulos
e conectá-los, gerando como saída um único módulo de carga.
Gabarito: E
16712855225
Comentário
Gabarito: E
Comentários:
Gabarito: E
ACERTEI ERREI
16712855225
a) debugger.
b) compilador.
c) montador.
d) fortran.
e) otimizador.
Comentários:
16712855225
barito: B
Comentários:
Gabarito: B
Comentários:
Gabarito: B
Comentários:
ACERTEI ERREI
16712855225
16712855225
a) Unix.
b) Linux.
c) Android.
d) Mac OS X.
e) Windows.
a) Cupcake
b) Frozen Yogurt
c) Gingerbread. 16712855225
d) Honeycomb.
e) Ice Cream.
a) V, F, F, V.
b) F, V, F, V.
c) F, V, V, F.
d) V, V, F, F.
a) I, II e III.
b) I e II, apenas.
c) I e III, apenas. 16712855225
d) II e III, apenas.
16712855225
(CESPE - 2014 – TC/DF – Analista de Sistemas) SQL Injection é uma técnica usada
para executar um código no espaço de outro programa, o que, normalmente,
força o programa a carregar a DLL (Dynamic-Link Library), que assume o espaço
de memória do programa em execução.
O processo SDL (Secure Development Lifecycle) tem sido adotado pela Microsoft no desenvolvimento de
alguns de seus produtos, como Windows Server, SQL Server e Exchange Server, reduzindo o número de
vulnerabilidades encontradas nesses produtos em versões desenvolvidas sem o uso do SDL.
16712855225
Uma das características desse processo é que ele provê dois roteiros, sendo um
com foco no suporte a desenvolvimento de novos sistemas com base em um
processo iterativo, e outro que enfoca a manutenção de sistemas já existentes.
16712855225
10. (CESPE - 2007 – TSE - Analista de Sistemas – C Para gerar um código objeto,
um compilador precisa fazer a análise sintática e semântica de um programa.
Para isso ser possível, a semântica da linguagem, mas não a sintaxe, é descrita
na notação Backus-Naur Form (BNF).
12. (CESPE - – FUB - Analista de Sistemas) O compilador pode ser visto como
um tradutor, uma vez que o mesmo transforma um programa de linguagem de
alto nível para linguagem de baixo nível.
a) análise léxica.
b) análise semântica.
c) análise sintática.
d) geração de código executável.
e) verificação de tipos.
programas de usuário.
16712855225
a) debugger.
b) compilador.
c) montador.
d) fortran.
e) otimizador.
16712855225
1 2 3 4 5 6 7 8 9 10
C C
1 2 3 4 5 6 7 8 9 10
E E C E C E C E D E
11 12 13 14 15 16 17 18 19 20
C D C
1 2 3 4 5 6 7 8 9 10
C C A E C C
SEGURANÇA NO DESENVOLVIMENTO
1 2 3 4 5 6 7 8 9 10
E C D E C C
1 2 3 4 5 6 7 8 9 10
E E C C X C E C E E
11 12 13 14 15 16 17 18 19 20
E C E C E E E E E C
21 22 23 24 25 26 27 28 29 30
E E E C E A E E C C
31 32 33 34 35 36 37 38 39 40
C C E C E E E E E C
41 42 43 44 45 46 47 48 49 50
E E E E E
1 2 3 4 5 6 7 8 9 10
B B B D
16712855225