Os processos de desenvolvimento de “ software dirigidos por planos que especificam completamente os requisitos e depois projetam, constroem e testam um sistema não são voltados para o desenvolvimento rápido de software . À medida que os requisitos mudam ou que problemas de requisitos são descobertos, o projeto ou a implementação do sistema precisam ser retrabalhados e testados novamente. Como consequência, um processo convencional em cascata ou baseado em especificação normalmente é demorado e o software final é entregue ao cliente muito depois do prazo originalmente estipulado” (SOMMERVILLE, 2019, p. 58). SOMMERVILLE, I. Engenharia de software . 10. ed. São Paulo: Pearson, 2019. Baseando-se no conceito de desenvolvimento ágil, analise as asserções a seguir e a relação proposta entre elas. I. O sistema é desenvolvido numa série de entregas em que usuários finais e clientes em geral são incluídos em desenvolvimento e avaliação de cada uma. POIS II. As abordagens ágeis de desenvolvimento de software apontam projeto, comunicação e implementação como as principais atividades no processo de software . A respeito dessas asserções, assinale a alternativa correta.
Leia o trecho a seguir, retirado da obra de SOMMERVILLE, chamada Engenharia de Software : “Na prática, a aplicação da Programação Extrema como proposta originalmente se provou mais difícil do que o previsto. Na XP os requisitos são expressos em cenários (chamados de histórias do usuário) implementados diretamente como uma série de tarefas. Os programadores trabalham em pares e desenvolvem testes para cada tarefa antes de escreverem o código. Todos os testes devem ser executados com sucesso quando o novo código é integrado ao sistema, já que há um curto intervalo de tempo entre os lançamentos ( releases ) do sistema.” (SOMMERVILLE, 2019, p. 62) Fonte: SOMMERVILLE, I. Engenharia de software . 10. ed. São Paulo: Pearson, 2019. p. 62. Com base na prática chamada de programação extrema, associe os conceitos a seguir com as respectivas descrições mais adiante. (1) Integração contínua. (2) Programação em pares. (3) Lançamentos pequenos. (4) Refatoração. (5) Propriedade coletiva. I. Os pares de desenvolvedores trabalham em todas as áreas do sistema, de modo que não se desenvolvam “ilhas de conhecimento” e todos assumam a responsabilidade por todo código. II. Assim que o trabalho numa tarefa é completo, é integrado ao sistema completo. Após qualquer integração desse tipo, todos os testes de unidade do sistema devem ter sucesso. III. Esse processo deve ser feito por todos os desenvolvedores no código de forma contínua, logo sejam encontradas possíveis melhorias para ele. Isso mantém o código simples e de fácil manutenção. IV. Forma de trabalho da equipe de desenvolvimento cujo objetivo é realizar a conferência de trabalhos de modo geral entre os próprios membros da equipe, oferecendo apoio para um resultado sempre satisfatório. V. Relacionado à maneira por meio da qual sistemas são disponíveis, a fim de agregar valor ao negócio, desenvolvido em primeiro lugar. É necessária uma frequência que acrescente funcionalidades à primeira versão de forma incremental. A sequência correta, de cima para baixo, da associação entre item e descrição é:
De acordo com Maxim e Pressman (2016), uma metodologia de processo cria a base para um processo de engenharia de software completo, por meio da identificação de um pequeno número de atividades metodológicas aplicáveis a todos os projetos de software , independentemente de tamanho ou complexidade. PRESSMAN, R. S; MAXIM, B. R. Engenharia de software : uma abordagem profissional. 8. ed. Porto Alegre: AMGH, 2016. Avalie as afirmações a seguir, em relação às cinco atividades genéricas de uma metodologia de processo, e as relacione adequadamente aos termos às quais se referem. 1 – Entrega. 2 – Construção. 3 – Modelagem. 4 – Planejamento. 5 – Comunicação. Compreende os objetivos dos envolvidos e define o escopo e os recursos do projeto. Esboça e prototipa, para que todos os envolvidos no projeto entendam melhor as necessidades do software a ser desenvolvido. É avaliada pelo cliente que analisa o que foi apresentado em relação ao escopo definido e acertado entre os envolvidos, sendo que após essa análise, o cliente deve retornar o aceite ou não. Define um mapa que guia a equipe do projeto, descrevendo tarefas, riscos e recursos. Engloba os testes que são realizados pela equipe do projeto antes de apresentar para o cliente. Assinale a alternativa que correlaciona adequadamente os dois grupos de informação:
O papel do gerente de projeto envolve planejamento, monitoramento e controle de pessoas e processos que ocorrem conforme evolui o desenvolvimento do software (produto). Além disso estabelece objetivos do projeto e busca, por meio de ambiente propício e equipe motivada, alcançá-los dentro de prazo e custo previamente estabelecidos. É responsável, ainda, por intermediar a comunicação, buscando sempre proteger a equipe e mantê-la unida, como um verdadeiro time. Considerando o apresentado, avalie as afirmações a seguir. I. O gerente de projeto de software reúne os recursos e desenho relacionado a todo o projeto, onde serão definidos escopo, recursos necessários, cronograma, procedimento para execução etc. II. A pessoa que gerencia projetos de software supervisionará a execução bem-sucedida de cada etapa do projeto, incluindo monitoramento de progresso, realização de check-ins frequentes de equipe e criação de relatórios. III. Os gerentes de projeto podem usar uma variedade de ferramentas e métodos para planejar projetos, desenvolvendo uma compreensão clara dos objetivos do projeto e identificando as etapas para atingi-los. IV. O gerenciamento de projetos de software incentiva o teste constante do produto para descobrir e corrigir erros com antecedência, ajustar o produto final às necessidades do cliente e manter o projeto no alvo. Está correto o que se afirma em:
O estágio de implementação no desenvolvimento de software “é o processo de elaborar um sistema executável para ser entregue ao cliente” (SOMERVILLE, 2019, p. 41). Por vezes envolve diferentes atividades, nomeadamente projeto ( design ) e programação de software . No entanto, “com as metodologias de desenvolvimento ágil, o design e a implementação são intercalados, e nenhuma documentação de design formal é produzida durante o processo. É claro que o software ainda é projetado, mas o design é documentado informalmente em um quadro branco ou em anotações feitas pelos programadores” (SOMERVILLE, 2019, p. 41). SOMMERVILLE, I. Engenharia de software . 10. ed. São Paulo: Pearson, 2019. Considerando o apresentado, avalie as asserções a seguir e a relação proposta entre elas. I. O planejamento do projeto de software é uma tarefa realizada antes do início da produção do software , ajudando na produção de software , mas não envolvendo nenhuma atividade concreta que tenha qualquer ligação direta com a produção de software . POIS II. O planejamento do projeto de software é um conjunto de múltiplos processos (o que facilita a produção de software ) cujas atividades em processos de projeto variam, dependendo do tipo de sistema que está sendo desenvolvido. Com base nas asserções e em sua aplicabilidade no desenvolvimento de software , marque a alternativa correta.
O software é uma sequência de instruções escritas para serem interpretadas por um computador, com o objetivo de executar tarefas específicas. É a parte lógica de sistemas computacionais que utilizam os recursos de hardware por meio de suas instruções. Nas mais variadas situações da vida, os softwares estão lá, como em prontuários eletrônicos que registram a vida clínica de pacientes, ou em um sistema de organização do mapa de localização de produtos em um centro de distribuição logístico. Assinale qual das alternativas abaixo apresenta a composição de um software :
De acordo com Sommerville (2019, p. 31), os modelos genéricos de processos de software “são descrições mais gerais e abstratas dos processos de software , e podem ser utilizados para explicar as diferentes abordagens ao desenvolvimento de software . Você pode encará-los como estruturas de processo que podem ser ampliadas e adaptadas para criar processos de engenharia de software mais específicos”. Fonte: SOMMERVILLE, I. Engenharia de software . 10. ed. São Paulo: Pearson, 2019. Sobre os modelos genéricos, analise as afirmações a seguir. I. O modelo clássico em cascata divide o ciclo de vida num conjunto de fases que considera que cada uma só pode ser iniciada após a conclusão da fase anterior. II. O desenvolvimento incremental interpõe atividades baseadas em especificação, desenvolvimento e avaliação de software , com uma série de versões a serem entregues. III. A metodologia ágil é uma estrutura de gerenciamento de projetos que divide os projetos em várias fases dinâmicas, comumente conhecidas como sprints , concentrando-se na comunicação com o usuário. IV. Integração e configuração representam os requisitos de gerenciamento do software , o ambiente em que será utilizado e o tipo de software que a equipe responsável está desenvolvendo. Está correto o que se afirma em:
Com a chegada do HTML 5, novos tipos de campos foram disponibilizados para certificar que o usuário digite a informação solicitada. Há campos que verificam automaticamente se o valor é uma data, hora, e-mail , número etc. Entretanto nem todos os navegadores os implementam, o que torna necessária uma validação mais específica. Observe um trecho de código: Fonte: Elaborada pelo autor. A partir da análise do código e de suas funcionalidades, julgue as afirmativas a seguir. I. O código não funcionará, pois JavaScript necessita ser carregado através de um arquivo separado com a extensão .js. II. Nesse caso, se o usuário digitar um caractere de espaço e pressionar enter , a chamada será realizada normalmente. III. O código executará com erro caso a página requisitada na expressão action não exista ou esteja em pasta diferente da chamada. IV. O alert será exibido no momento em que o usuário terminar de digitar uma expressão inválida no campo de busca. Está correto que se afirma em:
Conforme Zabot e Matos (2020), o JavaScript e, consequentemente, o jQuery interagem com os elementos HTML por meio de eventos que acontecem em diferentes situações: um click em um botão, o movimento de passar com o mouse sobre um elemento da página, a pressão do dedo sobre a tela de um dispositivo touch e quando o navegador termina de carregar a página web . Sobre o uso de jQuery/JavaScript, analise o código abaixo: 1. $('#box87').on('click', fx) 2. function fx(event){ 3. $('#box87').css('width', 400) 4. } Assinale a alternativa que descreve o resultado CORRETO.
Os eventos são ações realizadas dentro de uma página HTML e, por esse motivo, são vinculados às tags HTML. Dependendo da ação, o evento pode ou não ser chamado. Há eventos realizados com o mouse , outros, com o teclado, e, ainda, outros, vinculados a objetos. Observe a seguinte codificação: Fonte: Elaborada pelo autor. Baseando-se em funcionalidade de eventos, a alternativa que contém a linha com a função ligada a evento e sua descrição correta é:
JavaScript, uma das linguagens mais populares da web , se caracteriza por ter tipagem dinâmica, ser baseada em objetos e orientada a eventos (p. ex., movimentos do mouse , pressionar botão, arrastar e soltar etc.) e realizar avaliação em tempo de execução. Ela é padronizada pela ECMA International (European Computer Manufacturers Association) nas especificações ECMA-2623 e é baseada em ECMA Script. Observe o seguinte código em JavaScript: Fonte: Adaptada de Miletto e Bertagnolli ( 2014, p. 112 ). MILETTO, E. M.; BERTAGNOLLI, S. C. Desenvolvimento de software II : introdução ao desenvolvimento web com HTML, CSS, JavaScript e PHP. Porto Alegre: Bookman, 2014. E-book . De acordo com o código, podemos afirmar que os termos “do” e “endereco” são respectivamente:
É intrínseco às tecnologias computacionais e de desenvolvimento de software evoluírem constantemente, de acordo com as necessidades da sociedade. Mas uma das áreas que certamente mudou drasticamente nos últimos 20 anos foi o desenvolvimento para web , pois no começo era apenas HTML puro, com links e caixas de texto piscantes, e atualmente podemos implementar componentes interativos, jogos e sistemas completos para serem usados na palma das mãos, rodando em navegadores ou aplicativos. Considerando essa grande evolução tecnológica, vários perfis profissionais são necessários para o desenvolvimento das soluções web atualmente, em que podemos afirmar que: I. Um profissional que sabe programar interface responsiva e agradável ao usuário para aplicativos Android e iOS, bem como para rodar diretamente nos navegadores de Internet, ( browser ) é um desenvolvedor full-stack PORQUE II. esse é o perfil de desenvolvedor web que sabe trabalhar tanto com aplicativo quanto site , seja no front-end ou back-end . Por isso, é mais generalista e conhece bem os processos de desenvolvimento de software , sistemas de hospedagem, redes, banco de dados, segurança de dados, UX, entre outros conceitos acerca da completude do desenvolvimento web . Analisando as asserções anteriores, conclui-se que:
Segundo Zabot e Matos (2020), para auxiliar na programação de aplicações web , é necessário conhecer linguagens, bibliotecas, frameworks e ferramentas. Uma linguagem é um método padronizado para se comunicar com o computador. É importante distinguir entre linguagem de _______ (tipo HTML), na qual definimos elementos, e linguagem de _______ (tipo JavaScript), utilizada para definir programas. Já _______ é uma coleção de códigos implementados, empregada para facilitar a escrita do código. E framework é _______ que fornece modelos com diferentes funcionalidades já implementadas, que podem ser utilizadas ou não pelo desenvolvedor. ZABOT, D; MATOS, E. Aplicativos com Bootstrap e Angular : como desenvolver apps responsivos. São Paulo: Érica, 2020. Preencha as lacunas escolhendo a alternativa CORRETA:
Replit é um site que disponibiliza ambiente interativo on-line para linguagens de programação. Pode ser utilizado com diferentes linguagens, como JavaScript, C e Python, sem demandar instalação no próprio computador. É ótimo para testar e praticar uma linguagem de programação e possui suporte para HTML, CSS e JavaScript, contando com as possibilidades de organizar uma pasta de trabalho com subpastas e criar arquivos de tipo diferente. Sobre essa e outras ferramentas relacionadas ao desenvolvimento web , avalie as afirmações a seguir. I. JS Bin é uma ferramenta que mostra em tempo real a renderização do código digitado, que fica automaticamente salvo caso o usuário esteja cadastrado. II. O Replit não demanda “implantar” projetos em nenhum serviço: eles estarão instantaneamente disponíveis a você assim que começar a digitar. III. Focando o desenvolvimento web , a ferramenta Replit não possui suporte a linguagens como Java e Python, limitando-se à tríade HTML, CSS e JavaScript. Está correto que se afirma em:
O Google Collaboratory corresponde a um serviço de armazenamento em nuvem, com o objetivo de criar e executar códigos em Python diretamente em um navegador ( browser ) de Internet. Um dos principais benefícios desse serviço é permitir o desenvolvimento de aplicações sem a necessidade da instalação de softwares na máquina, bastando ter uma conta de usuário Google para acessar o ambiente on-line . Assinale a alternativa que apresenta outras vantagens de uso do Google Colab:
Python é uma linguagem de programação de alto nível e multiparadigma, criada por Guido van Rossum em 1989, que permite o desenvolvimento de algoritmos para resolução de problemas por meio de programas computacionais. Assinale a alternativa que apresenta outras características do Python:
As linguagens de programação podem ser implementadas por três métodos gerais: compilação, interpretação pura ou implementação híbrida. Sobre essas implementações, avalie as seguintes afirmações: I. A implementação híbrida é utilizada pela maioria das linguagens de programação de alto nível, como C, COBOL, C++, C# e PHP, pois esse método tem como principal vantagem a execução rápida dos programas. II. A implementação baseada em compilação consiste em programas que são traduzidos para a linguagem de máquina, que pode ser executada diretamente no computador. III. A interpretação pura é de dez a cem vezes mais rápida que programas compilados, pois a decodificação das sentenças em linguagem de máquina não precisa ser traduzida por um compilador. IV. Na implementação híbrida, os programas de linguagens de alto nível são traduzidos para uma linguagem intermediária que facilita a interpretação. É correto afirmar que:
O código em PHP é interpretado no lado do servidor após a requisição de um documento HTML ao qual ele está embutido ou relacionado. Geralmente o PHP, após interpretado, produz um HTML, portanto um navegador não observa um código PHP. Outras linguagens passaram a ser amplamente utilizadas na programação web e na ciência de dados, como Python. Considerando o apresentado, avalie se são (V) verdadeiras ou (F) falsas as afirmativas a seguir. I. ( ) Sintaticamente o PHP é semelhante a JavaScript em sua aparência, em sua natureza de cadeias e tipagem dinâmica de variáveis, além de combinações de elementos JavaScript e Perl. II. ( ) Python fornece suporte a muitos sistemas de gerenciamento de bancos de dados, sendo linguagem útil para construir programas que precisam de acesso web e a bases consistentes. III. ( ) Python é orientada a eventos, procedural, englobando capacidades de padrões Perl com a tratativa de exceções, usando coleta de lixo e removendo elementos desnecessários da memória. IV. ( ) Python inclui suporte para concorrência com suas linhas de execução ( threads ) e suporte para programação de rede com seus soquetes. Tem também mais suporte para programação funcional que outras linguagens de programação não funcionais. Assinale a alternativa que apresenta a sequência correta.
Considerando a genealogia das linguagens de programação de alto nível da figura abaixo (Sebesta, 2018), percebe-se que diversas delas são influenciadas por suas predecessoras, bem como buscam resolver problemáticas existentes nas linguagens anteriores. Fonte: SEBESTA (2018) Referência completa: SEBESTA, R. W. Conceitos de linguagens de programação . Porto Alegre: Bookman, 2018. A partir do que foi apresentado, analise as afirmativas a seguir: I. A linguagem COBOL originou novos conceitos, sendo alguns deles utilizados em outras linguagens posteriores. Por exemplo, foi a primeira linguagem a consentir nomes realmente conotativos, pois permitia nomes longos (até 30 caracteres) e caracteres conectores de palavras (hifens). II. A linguagem BASIC, assim como o COBOL, foi amplamente utilizada nos meios acadêmicos, mas não se tornou popular no uso para microcomputadores, pela dificuldade de aprendizado para iniciantes. III. A linguagem C++ evoluiu a partir da C, com uma série de modificações para melhorar seus recursos imperativos e adicionar construções para dar suporte à programação orientada a objetos. IV. A linguagem JAVA evoluiu a partir da C++, em que foram removidas algumas construções, outras modificadas e adicionadas. O sucesso dessa linguagem foi sem precedentes, pois os programadores gostaram do projeto e passaram a utilizá-lo em larga escala. Está correto o que se afirma em:
Segundo Booch (1987), a partir da década de 1970, foi desenvolvido o conceito denominado “ciclo de vida de software ”, em que a codificação foi destinada a um papel menor e a manutenção foi reconhecida como parte importante do ciclo de desenvolvimento. A facilidade de manutenção é fortemente determinada pela legibilidade dos códigos, sendo que essa característica passou a ser tomada como muito importante para a avaliação da qualidade dos programas e das linguagens de programação. BOOCH, G. Software Engineering with Ada . 2. ed. Redwood City: Benjamin Cummings, 1987. Considerando esse contexto, assinale a alternativa que descreve, adequadamente, a mudança de paradigma ocorrida:
Uma classe é uma unidade básica da Programação Orientada em Objetos (POO). Ela é responsável por encapsular atributos estáticos e comportamento dinâmicos numa caixa. Sobre os conceitos de classe, analise as afirmativas a seguir. I. A classe é um modelo usado para criar objetos, também chamados de instâncias. II. A comunicação com os objetos é feita pelo uso da interface pública do objeto. III. A complexidade envolvida na realização de uma tarefa fica escondida dentro da classe. Está correto o que se afirma em:
A classe é um modelo usado para criar objetos ou instâncias cuja comunicação ocorre através de interface. Ao usar scanf() para ler a entrada de string , ele para de ler quando encontra espaço em branco, nova linha ou fim de arquivo. Aliás, é usado para ler a entrada de qualquer tipo de dados. Utilizando a linguagem de string , podemos desenvolver vários comandos e observar as respostas que eles nos dão. Assim, pode-se observar que os sinais de % são um comando que permitirá essa leitura. A seguir, observe o comando na linguagem C. #include<stdio.h> int f(int *a, int n) { if(n <= 0) return 0; else if(*a % 2 == 0) return *a + f(a+1, n-1); else return *a - f(a+1, n-1); } int main() { int a[] = {12, 7, 13, 4, 11, 6}; printf("%d", f(a, 2)); getchar(); return 0; } Qual a o tipo da variável a?
Os Tipos Abstratos de Dados (TAD) existem nas linguagens de programação para a criação de tipos de dados que não foram previstos na criação dessa linguagem. São tipos de dados criados no próprio desenvolvimento de alguma aplicação para resolver uma necessidade específica. Os Tipos Abstratos de Dados (_________) são estruturas de dados que representam os ____________ que não foram desenvolvidos no núcleo das(os) _______________ e que, normalmente, são utilizados para alguma necessidade específica no desenvolvimento de aplicações. Preencha as lacunas escolhendo a alternativa CORRETA.
A unidade básica da Programação Orientada a Objetos (POO) é a classe, que encapsula atributos (variáveis) e métodos (funções) em uma camada de abstração . Indique a alternativa que melhor define uma classe:
Na linguagem computacional, uma prática rotineira é a compilação, ela é usada em vários tipos de linguagem para tornar a linguagem real acessível para uma determinada máquina. Quando se usa a compilação em sistema Windows, a extensão utilizada em mapas e objetos tridimensionais é:
Para remover um nó de uma lista linear encadeada, basta reorganizar o encadeamento dos nós anterior e posterior ao nó a ser removido. O nó imediatamente anterior ao nó a ser excluído deve apontar para o nó que seguia o nó excluído na lista. Se o nó removido for o primeiro nó, o endereço do segundo nó deve ser copiado para o ponteiro de início da lista. Se o nó removido for o último nó, o nó anterior deve ter seu campo de elo definido como nulo. Depois de reorganizar o encadeamento dos nós, garantindo assim a continuidade da lista, a posição ocupada pelo nó removido fica livre. Com relação à remoção de elementos para o passo a passo do desenvolvimento do algoritmo, assinale a alternativa CORRETA .
Em uma lista linear em que a ordem lógica dos elementos não é a mesma da ordem física, cada elemento tem um sucessor e um predecessor. Considere a sequência de comandos a seguir. Fonte: Elaborado pelo autor. Após a codificação do código C, aplique a alternativa com os comandos que serão mostrados na tela.
O processo de exclusão de um nó de uma lista linear altera apenas as cadeias de nós antes e depois do nó ser excluído: o nó imediatamente anterior apontará para o próximo nó a ser excluído da lista. Se o nó liberado for o primeiro nó, o endereço do segundo nó deve ser copiado para o rótulo inicial da lista. Se for o último, o campo anterior deve conter um campo de link vazio. Após essa sequência que garante a continuidade da lista encadeada, a posição ocupada pelo nó deletado é liberada. O processo de remoção de um nó da lista encadeada é realizado simplesmente alterando a conexão do nó anterior para o nó posterior, criando, assim, um novo elo, logo o nó anterior ao nó removido irá se vincular para o seguinte nó ao que foi excluído. Fonte: Elaborada pelo autor Com relação à exclusão de listas encadeadas, assinale a alternativa CORRETA
Em uma lista encadeada, ou lista linear, em que a ordem lógica dos elementos não é a mesma da ordem física (elementos espalhados na memória), cada elemento precisa indicar em que endereço seu sucessor pode ser encontrado, de modo a manter a ordem lógica. Assinale a alternativa que apresenta o código correto para inserir elementos em linhas encadeadas.
O jeito mais fácil de desenvolver _____________ é usando diretamente o endereço físico do próximo _________ na lista. Para isso, as linguagens de programação usam variáveis que guardam os endereços físicos, normalmente chamados de ____________. Preencha as lacunas escolhendo a alternativa CORRETA: