[MÚSICA] [MÚSICA] Meu nome é Eduardo Guerra e estamos no curso de Orientação a Objetos com Java. Hoje eu estou aqui para falar para você se é importante testar software. Talvez vocês estejam estranhando "Que é que num curso de Orientação a Objetos ele veio falar para a gente de teste?" Teste é uma coisa extremamente importante, espero que com essa aula eu consigo mostrar para vocês, que vocês compreendam a importância de testes, que vamos aprender logo agora nas primeiras semanas do curso a fazer testes automatizados de software e eu quero antes de ensinar isso para vocês que vocês reconheçam e entendam a importância de fazer testes. Vamos começar aqui com situação: imagina que alguém peça a você para alimentar aí crocodilo. A pergunta que você vai fazer é "Será que alguém já fez isso antes? Será que alguém testou isso?". Se nos, se a gente testasse mais as coisas antes de realmente ir lá e fazer, talvez menos coisas dessem errado. Já partindo aí para o mundo dos softwares, a Nasa ela teve prejuízo de 125 milhões num caso que ficou bem famoso, numa sonda que ela tinha erro de conversão de unidades e aí ela acabou indo para lado que não deveria ir. É o típico do erro que, com, se fosse testado, não é, facilmente seria detectado esse problema. Então a gente vê que a falta de testes ela pode gerar grandes prejuízos, nesse caso aí financeiro, mas muitas vezes até a própria imagem da empresa a ideia que os clientes têm do seu produto e muitas vezes esses danos eles podem acabar sendo irreparáveis ou muito difíceis de serem consertados. Não só o erro do software si, mas as consequências desse erro, elas podem ser muito sérias. Então eu vou contar aqui para vocês pouco da minha experiência com testes, não é? Nos primeiros locais que eu trabalhei o teste era meio que como se fosse patinho feio, no desenvolvimento de software. Era aquela coisa que era meio deixada de lado, ninguém dava muita importância, está? Vou falar pouquinho para vocês dessa experiência e como que o teste é enxergado hoje. O que é que acontecia? O teste ele era deixado para ser feito por último não é, ou seja, tinha todo aquele processo de desenvolvimento, muitas vezes o desenvolvimento si atrasava e aí só se desse tempo, quando desse tempo que ia ter lá uma equipa dedicada para os testes que iria testar o software. Ou seja era aquela coisa assim sem importância que só era feita se desse tempo, está? Outra coisa, eu percebia que o teste ele era feito por aquelas pessoas iniciantes, ou seja a pessoa está chegando " não consegue programar, não sabe fazer tal coisa, então manda para o teste" como se testar fosse uma coisa extremamente trivial e não é. E muitas vezes as pessoas que estavam no teste, independente de serem iniciantes ou não, muitas vezes elas não tinham o treinamento, não tinha preparo para fazer testes, elas simplesmente ficavam usando o software sem nenhuma técnica, sem nenhum método e verificando ali quais eram os problemas que elas estavam encontrando ali. E para piorar, toda a vez que dava algum problema adivinha perto de quem que a bomba estourava? Do nosso patinho feio, está? Então sempre a culpa de alguma coisa ter dado errado " mas como que o teste não encontrou esse problema?" "Como que isso aí não foi detectado antes?" Então realmente era uma coisa muito ruim fazer parte do teste, não é, porque você não tinha treinamento, não tinha condições, não tinha tempo suficiente e se desse algum problema a culpa ainda ia ser sua, não é? Então chega, pára com esse negócio! Teste não é isso, teste é extremamente importante. Bom, felizmente os métodos ágeis eles começaram a dar foco muito grande para teste, está, e hoje dia eu vejo que no mercado as empresas não enxergam mais a pessoa que faz teste como profissional de segunda linha mas muito pelo contrário, ele deixou de ser aquele patinho feio e passou a ser o patinho ali dos ovos de ouro, não é? Antes que você bote alguma coisa algum comentário aí, eu sei que na história é ganso, está, mas vamos seguir com a minha metáfora aqui do pato. [RISOS] Então agora o teste ele é aquele, quem faz o teste é aquele que coloca os ovos de ouro ali dentro da equipa e na verdade a gente vai ver que nos métodos ágeis não tem mais só uma pessoa testando e nem o teste é feito só no final. Na verdade toda a equipe ela é responsável por fazer testes, não é, então os patinhos eles estão por toda a parte da equipe, não é, toda a equipe agora é responsável por fazer teste. A gente tem o cara que vai lá e cria uma classe ele vai lá e vai testar aquela classe, quem está pegando aquela classe e juntando com outras para fazer componente ou para criar uma funcionalidade, ele vai fazer teste de integração, aquela pessoa que está olhando para o software como todo, vai teste funcional, quem trabalha com a arquitetura vai testar atributos não funcionais como segurança, desempenho, então o teste ele é extremamente importante e ele é extremamente importante também para dar o feedback para a equipa, não é, para saber se aquilo que ela está fazendo está de acordo ou não está. Inclusive a cobertura de testes, saber o quanto do seu código está coberto pelos testes é de extrema importância para você ter uma ideia da qualidade daquele código, do quanto daquele código realmente está sendo testado. E falando manutibilidade de sistemas, os testes eles também dão uma segurança muito grande, na hora de você fazer qualquer modificação, principalmente se esses testes estiverem automatizados, certo? Então por exemplo imagina só você vai lá, não é, modifica o software e aí fica aquela tensão não é, eu já tive essa experiência, não é? Muitas vezes você está trabalhando com pedaço de código e aí até você conseguir mudar tudo para fazer aquele código rodar o aplicativo inteiro, não é, você passa às vezes 2 ou 3 dias naquela tensão, toda a hora você olha o código de novo para ver se está certo, se não está e às vezes na hora que você roda é aquele problema não é? Quando você tem testes principalmente automatizados como eu disse, você pode fazer uma alteração, rodar esses testes para saber se o software modificou ou não a partir daquilo ali. Se você tem que por exemplo fazer uma alteração que vai realmente mudar o software você pode ir lá mudar o teste para como você quer que seja e utilizar aquilo ali como uma base para saber como você está andando. Inclusive uma das principais técnicas de design utilizados nos métodos ágeis que é o TDD, Test Driven Development ou Desenvolvimento Guiado por Testes, está, ele se baseia na criação dos testes automatizados antes do próprio código. Isso que eu vou falar agora pode parecer muito drástico mas é a forma que eu enxergo, não é? Hoje com todas as técnicas, todas as ferramentas de teste que a gente tem, você criar software sem testes hoje é uma coisa inaceitável, está? Para mim estaria no mesmo nível por exemplo de médico que vai lá e vai operar paciente sem estar monitorando os sinais vitais dele, certo? Porque se o médico está no meio da operação e dá algum problema ele sabe na hora que o paciente está com problema e de repente ele tem tempo para ir lá, ele sabe onde que ele mexeu, ele sabe o que está acontecendo para saber o que aconteceu. Imagina se a cada 5 minutos vai o médico lá escutar o coração do paciente. Às vezes vai olhar e já morreu faz tempo " estava morto aí às uns 3 minutos atrás" de repente se ele tivesse visto na hora ele poderia salvar não é? Com o software, digamos assim, o nosso monitor desses sinais vitais são os testes, não é, se a gente modifica alguma coisa e isso faz com que o nosso teste falhe a gente sabe que aquela modificação é, está alterando o comportamento do software, certo? Então hoje dia com todos os recursos e técnicas que tem não é mais aceitável desenvolvedor profissional fazer o seu software sem testes. Pode parecer pouco drástico mas dá uma pensada nisso e vê se o que eu estou falando não faz sentido, está? Eu espero que com essa aula você tenha entendido a importância de testar o software, entendido num contexto geral do desenvolvimento a importância que isso tem e fique ligado nas próximas aulas que vamos aprender como criar testes automatizados. Muito obrigado. [MÚSICA]