O que são testes do sistema?

Dois colegas trabalhando juntos em um computador, concentrando-se no monitor à frente deles.

O que são testes do sistema?

Testes do sistema são testes de software baseados em desempenho, de ponta a ponta, de um sistema inteiro. Esse testes de ponta a ponta incluem aspectos de functional testing, non-functional testing, testes de interface, testes de estresse e testes de recuperação.

Imagine que você está olhando para um sistema de software sob um microscópio, começando do nível mais extremo de ampliação, com a unidade. Esse é o bloco de construção básico do sistema de software. Em seguida, a visão se expande para fora para incluir o próximo nível de ampliação: os módulos criados por essas unidades individuais. Por fim, reduzindo totalmente o zoom, você chega ao nível do sistema. Nesse nível de ampliação, você pode ver tudo dentro do sistema e como todos os componentes criados por esses módulos funcionam juntos.

De certa forma, os testes do sistema são como essa visão microscópica, mas com uma diferença fundamental. Os testes do sistema são uma forma de testes de caixa-preta, o que significa que os testadores estão menos interessados na visão dos componentes envolvidos em sua montagem do que na funcionalidade geral do sistema. Sob esse tipo de perspectiva de "aprovação/reprovação", o comportamento do sistema só é notável nesse contexto no que diz respeito ao desempenho do sistema. (Os testes de caixa-branca permitem mais visibilidade sobre a natureza dos componentes em um sistema.)

Os testes do sistema geralmente envolvem a análise de vários sistemas de software separados que podem ou não funcionar em uníssono dentro de um determinado sistema de software.

As mais recentes notícias de tecnologia, corroboradas por insights de especialistas.

Mantenha-se atualizado sobre as tendências mais importantes (e intrigantes) do setor em IA, automação, dados e muito mais com o boletim informativo Think. Consulte a Declaração de privacidade da IBM.

Agradecemos sua inscrição!

Sua assinatura será entregue em inglês. Você pode encontrar um link para cancelar a assinatura em todos os boletins informativos. Você pode gerenciar suas inscrições ou cancelar a inscrição aqui. Consulte nossa Declaração de privacidade da IBM para obter mais informações.

O software do seu sistema está pronto para o lançamento?

Considere a contagem regressiva que precede os lançamentos no espaço. Enquanto todos se lembram da dramática contagem regressiva de 10 segundos antes da ignição e da decolagem, poucos se lembram das inúmeras verificações departamentais que são solicitadas pelo chefe de voo e respondidas afirmativamente como uma “autorização de partida”. Em um lançamento espacial típico, os chefes de departamento são consultados sobre operações planejadas, segurança da missão, sistemas de veículos e condições meteorológicas esperadas, entre vários outros assuntos. Cada departamento é consultado, e cada chefe de departamento responde por sua vez.

Da mesma forma, o teste do sistema pode ser considerado a lista de verificação final que precede o lançamento de um novo sistema de software. A última rodada de limpeza de quaisquer bugs de software conhecidos foi concluída. E assim como as listas de verificação históricas que os pioneiros do espaço criaram, tudo se resume a uma última tentativa de cada "departamento" incluído no teste do sistema.

Cada consulta é sombreada em termos de funcionalidade do sistema:

  • Cada componente está funcionando conforme o esperado?
  • Os componentes estão funcionando em coordenação adequada entre si?
Desenvolvimento de aplicações

Venha conosco: desenvolvimento de aplicações para empresas na nuvem

Neste vídeo, o Dr. Peter Haumer explica como é o desenvolvimento atual das aplicações empresariais modernas na nuvem híbrida, demonstrando diferentes componentes e práticas, incluindo o IBM® Z Open Editor, o IBM Wazi e o Zowe. 

O que está envolvido nos testes do sistema?

Ao discutir os testes do sistema, naturalmente encontraremos o tópico das dependências, que são relacionamentos que existem dentro dos casos de teste. Nessas situações, o resultado de um caso de teste pode depender parcial ou totalmente dos resultados de outros casos de teste. As dependências também podem envolver funcionalidade, ambientes de teste ou políticas de segurança e podem até afetar todo o processo de teste que uma organização mantém.

As metodologias de testes do sistema não fornecem uma visão profunda de seu funcionamento interno (lembre-se, essa é uma forma de teste de caixa-preta), mas permitem saber se uma aplicação específica funciona. A ideia é que os testes do sistema ajudem a localizar lacunas, erros ou requisitos ausentes, pois isso determina a funcionalidade geral da aplicação de software.

Os testes do sistema geralmente são realizados após integration testing , mas antes dos testes de aceitação, garantindo assim que todos os componentes funcionem juntos corretamente. Como veremos, ela geralmente engloba tanto os aspectos funcionais quanto não funcionais do sistema. Por ser baseado tanto em áreas estritamente funcionais quanto em áreas amplamente não funcionais, ele aborda aspectos tão distantes quanto usabilidade, segurança e desempenho.

Um dos principais propósitos do teste de sistema é permitir que você verifique se a linguagem de programação de um software pode ser traduzida em um programa utilizável. No entanto, o objetivo principal do teste de sistema é garantir que o software que está sendo avaliado é compatível com os requisitos de negócios dos usuários que dependerão dele.

O processo de teste destina-se a refletir o mesmo ambiente de produção que será usado, para garantir que o software funcione conforme necessário, apesar das mudanças nas condições do mundo real. Da mesma forma, os dados de teste são criados para imitar dados e situações do mundo real. Depois que os casos de teste são conduzidos, os defeitos no software podem ser localizados e corrigidos.

Tipos funcionais de testes de sistema

Os testes do sistema podem ser classificados de acordo com um dos três grupos principais. O primeiro, functional testing, se preocupa com o desempenho do sistema, mas não busca uma resposta mais profunda além de aprender, se o software funciona como prometido. Aqui estão alguns dos principais tipos de functional testing:

  • Testes de aceitação: o teste de aceitação do usuário busca incorporar testes de desempenho conduzidos pelas pessoas que representam o grupo demográfico pretendido com o software que está sendo produzido. Esses usuários trazem realismo adicional ao processo de teste, testando o software em condições do mundo real.
  • Integration testing: uma área criticamente importante de functional testing estuda quão bem diferentes módulos ou componentes "se encaixam" quando forçados a trabalhar em conjunto. Isso é integration testing do sistema. Um sistema totalmente integrado fornece aos testadores os recursos para avaliar as principais interações.
  • Teste de fumaça: o teste de fumaça fornece um meio de verificar se a funcionalidade geral foi mantida após um desenvolvedor fazer algum tipo de alteração no código. A mudança foi feita e o teste de fumaça permite que você veja rapidamente se há algum efeito adverso resultante dessa mudança de código.
  • Testes de unidade: nos testes de unidade, uma seção limitada de código é verificada dentro de um ambiente de teste isolado. Se a unidade em questão falhar no teste (conforme visto a partir de uma comparação de dados de teste e metas de funcionalidade), geralmente são necessários mais testes de componentes ou módulos individuais em um nível de todo o sistema.

Tipos não funcionais de testes do sistema

Embora o functional testing forneça informações extremamente importantes, esses dados são basicamente limitados a um voto positivo ou negativo, com base estritamente no desempenho do sistema como deveria. Isso omite um grande número de variáveis pertinentes, como segurança do sistema, UX e aspectos de desempenho.

Os teste de sistema não funcional fornece um meio de avaliar como o sistema opera. A diferença essencial entre functional testing e non-functional testing pode ser resumida à seguinte comparação simples:

  • Functional testing: o sistema funciona?
  • Non-functional testing: o sistema funciona bem?

Com isso em mente, aqui estão algumas das principais formas de non-functional testing do sistema:

  • Teste de acessibilidade: o conteúdo digital apresentado é acessível a todos, incluindo pessoas com várias deficiências? O teste de acessibilidade investiga essa questão e trabalha para garantir que o conteúdo seja comunicado a todos os possíveis usuários, de forma que abranja deficiências físicas e mentais e garanta a consistência com as normas de inclusão estabelecidas pela Americans with Disabilities Act (ADA).
  • Testes de compatibilidade: quando você considera a ampla distribuição das aplicações, e quantas jornadas entre plataformas os aplicativos têm que fazer, fica fácil entender a necessidade dos testes de compatibilidade, que medem o quão bem esses aplicativos funcionam, independentemente de quantas redes, navegadores, sistemas operacionais e configurações de hardware pelos quais precisam viajar.
  • Teste de carga: Em uma subdisciplina que lida com a física singular apresentada pela noção de carga e como ela afeta a capacidade de um sistema de processar solicitações, o teste de carga se concentra no que acontece quando a escalabilidade ocorre em grande escala. Pressupomos que o sistema não terá problemas para processar uma única solicitação do sistema, mas e quando essa carga é multiplicada por milhares de solicitações — ou até mesmo significativamente mais?
  • Testes de localização: esta é uma economia global com a participação de mais países e culturas do que nunca. Os testes de localização consistem em garantir que o conteúdo do software que está sendo exportado para vários locais no mundo seja apropriado para aquela área específica, de acordo com as regras gerais relacionadas à UX.
  • Testes de desempenho: esse tipo de non-functional testing presta atenção especial aos problemas de desempenho. Por exemplo, é essencial para um bom desempenho que um sistema responda às solicitações com rapidez e tranquilidade. O plano de teste nos testes de desempenho avalia quanto tempo os usuários devem esperar para que as solicitações sejam processadas.
  • Testes de segurança: não é segredo que, atualmente, a segurança de dados é de suma importância. Portanto, faz sentido que uma forma de teste atenda especificamente à segurança. Os métodos de testes de segurança são selecionados de acordo com o tipo de ameaças potenciais recebidas pela empresa.
  • Testes de estresse: assim como um teste de estresse médico busca entender o funcionamento do coração de uma pessoa sob coação de atividade, o teste de estresse de software verifica o quanto um sistema pode permanecer operacionalmente resiliente quando impulsionado além de sua capacidade normal de detectar gargalos e vulnerabilidades.
  • Testes de usabilidade: esse tipo de non-functional testing trata completamente da qualidade da experiência do usuário (UX). O teste de usabilidade é um processo de teste manual que é mais usado na prática em pequena escala. No entanto, ele provavelmente deve ser aplicado com frequência — especialmente ao executar moves complicadas, como localizar aplicações.

Outros tipos de testes do sistema

Ainda outros tipos de testes de sistema são úteis, apesar de não se enquadrarem nas categorias de testes de funcionamento ou testes não funcionais. Aqui estão algumas das metodologias mais notáveis:

  • Testes de APIs: as interfaces de programação de aplicativos (APIs) são extremamente importantes, permitindo o desenvolvimento de software ao ajudar na conexão de diferentes aplicativos ou sistemas. Os testes de APIs garantem que os pontos de conexão de APIs operem conforme o esperado. Também fornece supervisão sobre as permissões do usuário e a maneira como os dados são gerenciados por meio de APIs.
  • Testes automatizados: como seu nome implica, testes automatizados (também chamados de automação de testes) colocam o poder da automação para trabalhar em testar aplicações de software. Isso é feito por meio da criação e do uso de scripts de teste projetados para realizar casos de teste em aplicativos de software, o que é feito em grande escala, sem intervenção humana. Conjuntos estruturados de diretrizes, ferramentas e práticas que ajudam a automatizar o processo de teste são chamados de framework.
  • Testes manuais: em oposição direta aos testes automatizados, os testes manuais dependem de testes humanos para experimentar o software que está sendo avaliado, conforme orientado por vários cenários de teste e scripts de teste. Os testadores são incentivados a realmente colocar o software à prova para identificar problemas que precisam de remediação.
  • Testes de migração: os testes de migração são necessários para as organizações envolvidas em atualizar ou transformar sua cultura digital corporativa. Quando as empresas estão envolvidas nesses esforços transformadores, elas precisam de validação de que os dados e o software mais importantes estão sendo transferidos adequadamente de um sistema de saída para um sistema de entrada.
  • Testes de regressão: embora as alterações de código tenham como objetivo melhorar o software ou aprimorar seus recursos, elas podem inadvertidamente introduzir dificuldades se o erro humano de alguma forma for adicionado à mistura. Os testes de regressão permitem que os testadores confirmem o funcionamento estável e correto, reexecutando os testes conforme necessário.

Desafios no uso de testes do sistema

Embora o processo de testes do sistema forneça o teste de desempenho de caixa-preta mais abrangente disponível, realizar testes de sistema pode apresentar problemas:

Requisitos em constante mudança

Os requisitos que os testes do sistema devem satisfazer são numerosos - sejam eles requisitos comerciais endêmicos dessa organização, requisitos funcionais exclusivos desse software ou requisitos especificados que podem se aplicar à sua operação. Na verdade, parece que nunca há uma escassez de requisitos de sistema que os sistemas operacionais precisam absorver. Requisitos que mudam com frequência podem atrapalhar um sistema e deixá-lo com um lote incompleto de casos de teste.

Pressões de prazos

Não deveria ser novidade para ninguém que os prazos podem causar estragos em um ambiente de negócios. Os prazos são lendários por criar impactos severos à medida que os cronogramas de trabalho colidem com as expectativas orientadas pelo calendário. A pressão dos prazos se manifesta no desenvolvimento de software quando os testes do sistema adequados e amplos geralmente são insuficientes, sendo conduzidos de forma incompleta ou completamente ignorados. Isso geralmente requer retestes mais tarde no ciclo de vida de desenvolvimento de software.

Limitações de recursos

Os testes do sistema não ocorrem no vácuo ou sem esforço. Exige o trabalho qualificado das equipes de testes, ferramentas de teste para auxiliar esse trabalho e orçamento adequado para viabilizá-lo em primeiro lugar. Sem esses componentes, é fácil implementar atalhos em seu lugar, levando a testes incompletos. E se qualquer parte dessa equação for alterada ou negada, isso possivelmente exercerá um impacto negativo na cobertura dos testes que resulta dos testes de sistema dessa aplicação ou produto de software.

Instabilidade ambiental

Muitas vulnerabilidades potenciais podem ser avaliadas durante o processo de testes, mas a equipe de engenharia de software só poderá fazer essas avaliações se tiver suporte e controle do ambiente de teste em que está trabalhando. Quando os testadores não estão trabalhando em ambientes estáveis, fica mais fácil para eles deixarem passar possíveis defeitos no software. E se os testadores em ambientes instáveis encontrarem bugs de software que precisam de reparo, eles geralmente têm mais dificuldade de reproduzir esses bugs mais tarde.

Falhas de comunicação

Quando sua tarefa envolve a garantia da qualidade do software, avaliar linhas de código de computador é um trabalho meticuloso que pode se tornar tedioso e demorado. O que pode tornar esse trabalho ainda mais desagradável é quando ocorrem falhas de comunicação entre testadores, desenvolvedores e outros stakeholders. Como em qualquer empreendimento de negócios, problemas de comunicação geram mal-entendidos e criam um ambiente de produção no qual os defeitos podem escapar da detecção e criar raízes nos sistemas operacionais.

Gerenciamento das complexidades dos dados de teste

As técnicas de teste variam, e os resultados dos testes vêm em todos os tipos, desde dados de teste simplesmente compreendidos até conjuntos de dados vastos e complexos que exigem um gerenciamento mais sério durante e após a fase de testes. O nível de complexidade do projeto aumenta ainda mais quando os ambientes de teste não espelham totalmente seus equivalentes de produção. A estratégia de teste implementada durante o processo de desenvolvimento de software precisa considerar a melhor forma de lidar com esses problemas.

Soluções relacionadas
IBM Enterprise Application Service for Java

Um serviço de locatário único, totalmente gerenciado, para desenvolver e entregar aplicações Java.

Explore os aplicativos em Java
Soluções de DevOps

Utilize softwares e ferramentas de DevOps para desenvolver, implementar e gerenciar aplicações nativas da nuvem em diversos dispositivos e ambientes.

Explore as soluções de DevOps
Serviços de desenvolvimento de aplicações empresariais

Com o desenvolvimento de aplicações na nuvem você só constrói uma única vez, itera rapidamente e implementa em qualquer lugar.

Serviços de desenvolvimento de aplicações
Dê o próximo passo

Os serviços de consultoria de desenvolvimento de aplicações da IBM® Cloud oferecem orientação de especialistas e soluções inovadoras para simplificar sua estratégia em relação à nuvem. Trabalhe com os especialistas em nuvem e desenvolvimento da IBM para modernizar, escalar e acelerar suas aplicações, trazendo resultados transformadores para os seus negócios.

Explore os serviços de desenvolvimento de aplicações Comece a criar com a IBM® Cloud sem custo