Engenharia de Software em Age of Mythology

Age of Mythology (também conhecido como AoM), é um jogo de computador de estratégia em tempo real baseado em mitologia produzido pela Ensemble Studios e distribuído pela Microsoft Game Studios. De forma geral, envolve administrar recursos e guerrear, uma estrutura bem parecida com a franquia Age of Empires. Mas e ai, onde entra a Engenharia de Software?

Engenharia de Software é uma área da engenharia e da computação voltada à especificação, desenvolvimento, manutenção e criação de software, com a aplicação de tecnologias e práticas de gerência de projetos e outras disciplinas, visando organização, produtividade e qualidade. Uma das frentes nessa área, é o teste de software, que busca fornecer informações sobre sua qualidade em relação ao contexto em que ele deve operar, se relaciona com o conceito de verificação e validação. Isso inclui o processo de utilizar o produto para encontrar seus defeitos. Nesse sentido, vamos para a seguinte narrativa:

Estava eu jogando enquanto aguardava minha civilização avançar da Idade Heróica para a Idade Mítica, a evolução trazia um custo para a civilização (1000 pontos de comida e 1000 pontos de ouro) o qual foi pago de antemão ao início do processo.

Quase para ocorrer a evolução, eu me arrependi de uma decisão e corri para interrompê-la, mas já era tarde, seu progresso estava em 100%, mesmo assim cliquei para interromper e então minha civilização evoluiu para a Idade Mitológica, e eu recebi o estorno da evolução (ação que ocorre quando você a interrompe).

Na confusão da partida reparei que meus pontos de comida e de ouro aumentaram em 1000 cada um, porém não era possível refletir muito sobre isso (literalmente estávamos em meio a uma guerra).

Após o término da partida fui refletir sobre o que ocorreu, agora pensando como o sistema foi programado (é ai que entra a Engenharia de Software):

  1. Quando você coloca para evoluir, o código do jogo deve subtrair dos seus recursos o custo da evolução (nesse caso 1000 pontos de comida e 1000 pontos de ouro), e manter em “caixa” até que a evolução termine;
  2. Se a qualquer momento você interromper a evolução esse valor de caixa volta para você;
  3. Contudo, após a evolução ser concluída, esse valor de caixa é descartado;
  4. Embora isso devesse ocorrer junto com a evolução, quem programou o código pode ter criado uma espécie de gatilho, que após completar a evolução, envia uma mensagem avisando para remover a opção de cancelar a evolução e para eliminar o valor em “caixa”;
  5. Assim, o gatilho dessa mensagem só ocorreria após a evolução, isso significa que primeiro a evolução acontece, para então se impedir que ela seja interrompida e o valor estornado;
  6. Então, se no intervalo entre a evolução e o envio da mensagem para cancelar a possibilidade de interromper a evolução, você ativar a interrupção da evolução, então o jogo interromperá algo que já ocorreu e te estornaria o valor que estava em caixa.

Claro, isso até então era minha teoria baseada em como eu imaginava ter ocorrido aquele erro. Hora de testar:

Minha civilização criada em um ambiente controlado, atualmente na Idade Heróica com 1584 pontos de comida e 1062 pontos de ouro.
Processo de evolução para a Idade Mítica em 99% de conclusão, minha civilização tem 584 pontos de comida e 62 pontos de ouro.
Quando a evolução da civilização não é interrompida no intervalo das mensagens do código-fonte.
Quando a evolução da civilização é interrompida no intervalo das mensagens do código-fonte.

Testei em diversas evoluções também, e de fato o sistema parece funcionar com esse gatilho, possibilitando que o bug ocorra. Embora, interromper a evolução nesse intervalo seja muito difícil, pois mesmo em ambiente controlado, conseguia realizar o bug mais ou menos uma vez a cada dez tentativas. Ou seja, em termos de jogo esse bug é inviável de se usar e até mesmo prejudicial a quem tenta, podendo tomar mais tempo (cancelando a evolução antes que ela ocorra de fato) ou não render nenhum benefício (cancelando a evolução após o valor de caixa ser descartado).

Em Engenharia de Software, vemos algumas técnicas para “balançar” um programa na tentativa de que ele apresente alguns bugs em pontos tidos como críticos para quem programou. No caso do Age of Mythology, esse bug se encontrava no tempo de comunicação entre duas partes do código-fonte.

Créditos da imagem de capa a Free-Photos por Pixabay


Como referenciar este conteúdo em formato ABNT (baseado na norma NBR 6023/2018):

SILVA, Marcos Henrique de Paula Dias da. Engenharia de Software em Age of Mythology. In: UNIVERSIDADE ESTADUAL DE CAMPINAS. Zero – Blog de Ciência da Unicamp. Volume 5. Ed. 1. 1º semestre de 2021. Campinas, 23 fev. 2021. Disponível em: https://www.blogs.unicamp.br/zero/2659/. Acesso em: <data-de-hoje>.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *