Lançado o MentaBean - Persistencia simples via configuração programática

Apesar de acompanhar a discussão desde o início eu estou pouco me importando apra o framework, apenas gostaria de esclarecer um ponto aqui antes que estas página sfiquem registradas no Google e quando alguém procurar sobre OO saia com cocneitos deturpados.

Isso não é verdade. Em linguagens como Java onde não existe uma forma explícita de garantir um contrato (pré e pós condições) não há nenhuma garantia de que ao estender uma classe ou implementar uma interface você obedece ao contrato dela.

Eu posso implementar a interface Map lançando exceções aleatóriasde tipos completamente inesperados, quebrando o contrato da classe, que nenhum compilador vai me barrar. O que se precisa é de testes unitários para garantir compatibilidade. Mesmo em uma linguagem com DBC embutido como Eiffel não é difícil quebrar contratos, tudo depende do programador.

E quanto à ausência de testes em geral, testes não são a única forma de aumentar a qualidade do seu código mas são o meio mais prático que eu conheço. Se um sistema não usa testes é bom ele ter alguma alternativa a isso que consiga o mesmo efeito, especialmente para realizar regressões. Quanto do código do sistema é testado a cada lançamento de nova versão? Se não se tem uma métrica de test coverage eu fico realmente curioso sobre como se sabe que nada foi quebrado. Boas práticas, um design consistente, OO, etc. cria código que tende a dar menos problemas mas não serve para este tipo de verificação. Basta olhar a opinião dos papas do design sobre testes e seu papel na qualidade de software.

E notem que os testes diretamente não dizem muito para o usuário final, leigo. Já vi sistemas com centenas de testes que não testam nada, mas estavam lá, se o usuário tomar isso como métrica ele vai se dar mal.

Testes garantem a qualidade para quem desenvolve o sistema, o usuário apenas vincula a presença de testes e, mais que isso, de uma estratégia de qualidade, como algo que aumenta a credibilidade de um artefato de software.

Acreditar que consegue assegurar que uma mudança não quebrou uma base de centenas ou milhares de linhas de código sem qualquer mecanismo de inspeção automatizado não é arrogância para mim, é ingenuidade.

Nao Renato, a sun da o TCK para essas empresas. E é JUSTO disso a noticia do Kung, que tavam reclamando que pras open source ela nao tava dando.[/quote]

E como a Sun sabe se os JDKs/JVMs passaram nos testes??? Mandando os dados pela net à Sun?

Eu não entendi Paulo! Existem outros JDK que não o da SUN?

Sim, BEA, IBM. Para alguns casos são até melhores. Mas o source da API é o mesmo em todas.

]['s

O JForum não tem testes? Você já viu o código fonte do JForum alguma vez na sua vida?

Provavelmente nunca.

https://jforum.dev.java.net/source/browse/jforum/tests/

Dá uma olhadinha, talvez você ache alguns testes fantasmas por lá.
[/quote]

Dá uma olhadinha no que o Rafael Steil disse: (Dito neste mesmo tópico)

[quote=Rafael Steil]OPA OPA OPA

Nao me use como exemplo aqui. Voce da a entender que eu nao apoio o uso de test cases, o que NAO eh verdade.

O falta de testes no JForum atual é uma falha monstruosa, que sempre me causou problemas. Nao ha desculpas para nao ter test cases.

O JForum 3 (atual versao em desenvolvimento) tem unit testing para tudo. Tudo.

Voce pode nao gostar de fazer testes, mas defender que eles sao ruins, ja eh pegar pesado. Ao meu ver, a sua postura esta errada.

Rafael[/quote]

A versão em produção não tem teste! A versão em desenvolvimento tem teste!

[quote=Paulo Silveira][quote=brunohansen]

Então vcs recriminam o uso JForum também certo? Pois ele não possuiu teste também!
[/quote]

Como ja disseram anteriormente, o JForum é uma aplicacao. A API dele é menos importante que suas funcionalidades finais, que é medida pelo usuario. BEM diferente de um framework ou biblioteca. O JForum 3 possui testes sim.
[/quote]

A versão em produção não tem teste! A versão em desenvolvimento tem teste!

Se vc também é extremista a ponto de dizer como o fmeyer ou o CV

[quote=fmeyer]
Codigo sem teste unitario eh codigo inutil.

ps. isso vai ser engracado … [/quote]

[quote=cv]

E nao tem uma mencao sequer as palavras ‘test’, ‘unit’ ou ate mesmo ‘run’. Como voce espera que eu confie no seu codigo? Lendo a porra toda?[/quote]

… Quem é extremista assim deve concordar que a versão em produção do JForum é inutil! Não que eu a ache!

Se os extremistas concordarem tudo bem os ataques não são pessoal! Ou eles não são tão extremistas assim a ponto de abrir mão de não recriminar o JForum em produção que não tem teste!

Minha pergunta ainda continua: Mauricio e Paulo se vcs protegem tanto os testes pq vcs não criticam tambem a versão em produção do JForum que não tem teste?

[quote=brunohansen]
Galera me parece que esses ataques são muito mais pessoal do que outra coisa!

Então uma pergunta para galera que recrimina o uso de qualquer coisa que não possui teste. Para aqueles que dizem que uma classe não existe se não tiver um teste para ela.

Então vcs recriminam o uso JForum também certo? Pois ele não possuiu teste também!

Se vcs não recriminam, pq com o JForum é diferente?

CV e os demais?[/quote]

Sim, BEA, IBM. Para alguns casos são até melhores. Mas o source da API é o mesmo em todas.

]['s

[/quote]

Os APP Servers deles não usam a VM e JDK da Sun não?

Se as pessoas são livres para implementar uma VM ou JDK, por que não se tem acesso livre ao TCK, ainda mais agora sendo open-source?

Sim, por default elas usam JVM e JDK “proprios”. a BEA, por exemplo, recomenda a JRockit, que é a VM+JDK da BEA. A Sun testou a implementacao deles no MESMO TCK que foi enviado a elas, e confirmou que eles haviam passado.

[quote=renato3110]
Se as pessoas são livres para implementar uma VM ou JDK, por que não se tem acesso livre ao TCK, ainda mais agora sendo open-source?[/quote]

Renato, como eu ja disse, é exatamente essa questao que o Fabio fez
http://guj.com.br/posts/list/56795.java

Fala Fabio!

Boa pergunta. Isso mostra que vc olhou bem o MentaBeans. Obrigado por perguntar coisas técnicas sem dizer que não usa testes, o nome é um lixo e que eu sou insano. Obrigado.

Se vc quer setar um campo para NULL, vc precisa fazer o load primeiro, mudar o campo para null e fazer o update. Não dá para fazer sem fazer load, pois não temos como saber se o campo já era null ou foi setado null. Acho que teria que fazer algum esquema de PROXY para o método setName(null). Não sei se tem como (acho que não). Com calma depois avaliaremos se há alguma outra maneira de resolver isso, mas por enquanto a solução oficial disso é: faça load, mude para null o campo e faça o update, que apenas esse campo sofrerá update para NULL.

[quote=Paulo Silveira][quote=renato3110]
Os APP Servers deles não usam a VM e JDK da Sun não?
[/quote]

Sim, por default elas usam JVM e JDK “proprios”. a BEA, por exemplo, recomenda a JRockit, que é a VM+JDK da BEA. A Sun testou a implementacao deles no MESMO TCK que foi enviado a elas, e confirmou que eles haviam passado.[/quote]

Mas como sem os fontes? :?

[quote=Paulo Silveira][quote=renato3110]
Se as pessoas são livres para implementar uma VM ou JDK, por que não se tem acesso livre ao TCK, ainda mais agora sendo open-source?[/quote]

Renato, como eu ja disse, é exatamente essa questao que o Fabio fez
http://guj.com.br/posts/list/56795.java
[/quote]

Ah tá!! Eu hein, isso não tem sentido nenhum esconder o TCK! A não ser uma certa coisa…

Calma, Paulo. Baixei os sources e procurei bem procurado e não achei. Eu não sabia da existência desse TCK, e pelo jeito outras pessoas aqui também não sabiam. Me desculpe, ok?

Estranho a Sun liberar o código fonte sem isso, já que é tão importante.

Vc já ouviu falar da interface org.mentawai.core.Filter, com a qual vc pode criar qualquer filtro que vai pegar o input/output da action e transformar em qualquer outra coisa que vc quiser antes e depois de chegar na action ???

Não há como prever tudo, por isso que existe interfaces e sistemas estensíveis. Não precisa abrir chamado no Jira não. Basta vc mesmo implementar o seu próprio filtro e ser feliz. Acho que eu dei um exemplo no fórum e inclusive o CollectionFilter já está disponível na versão 1.9.

Acho que vc se confundiu aqui, Edufa. Vc não vai mexer em framework nenhum. Vai criar um Filtro implementando uma interface. Um framework não tem como gerar testes para as aplicações que serão escritas no futuro pelos seus usuários. Isso é tarefa sua, se assim desejar. (Ou um framework tem que dinamicamente testar o código de uma aplicação web?)

Acho que essa discussão sobre testes já deu o que tinha que dar. Se acharem que o Mentawai é um lixo, inútil, uma merda, como alguns falaram aqui porque não possui testes unitários, então não usem. Usem Struts2 que possui testes unitários ou qualquer outra coisa. Exercite o seu livre arbítrio!

Eu uso o menta em vários projetos meus, não tenho nada contra o projeto apesar de q eu sinto falta de testes e isso me inibe de mexer no fonte, por não ter como garantir compatibilidade (isso eu vejo como algo negativo).

Posso ter me confundido, mas pelo q me lembro em varios lugares era usado List ao invés de Collection.

É um exemplo simples, é fácil converter para List, poderia converter, usar filters, etc, mas ilustra o ponto q eu queria mostrar, vc detem o conhecimento do framework, vc sabe os contratos , conhece a estrutura, etc, tudo isso. Se amanhã o projeto por interrompido por algum motivo, ou alguem por contar querem muda-lo (seja fazendo uma limples mudança como esta q comentei de List para Collection, ou migrar o código para java 1.5, ou amanhã, 1.7, 1.9, 2.5, etc) sem testes alguem de fora irá suar muito. os testes diminuem a possibilidade de alguem mexer e ter certeza q está certo. Pq não dá para garantir q todos conhecem tanto qto vc.

[quote=saoj]
Acho que essa discussão sobre testes já deu o que tinha que dar. Se acharem que o Mentawai é um lixo, inútil, uma merda, como alguns falaram aqui porque não possui testes unitários, então não usem. Usem Struts2 que possui testes unitários ou qualquer outra coisa. Exercite o seu livre arbítrio![/quote]

Eu acho importante a discussão sobre os testes, talvez o melhor lugar para ela não seja aqui, ams mesmo assim é importante temos aqui duas visões antagonicas sobre testes, é bom ver os argumentos de ambos os lados para quem está começando agora possa se decidir sobre qual caminho escolher. uma pena os ataques, mas parece q já ficaram para trás.

Se é pra dar exemplo de uma coisa sem testes que todo mundo confia não precisa ser o JDK, pode ser o Linux que é muito pior! rsss

Pior que não ter testes é ser escrito em C!

Tem razao aqui!!! Ponto pra vc! :slight_smile:

Uma “história da vida real” sobre testes:

No sistema onde trabalho há uma classe chamada ByteUtils.java. Basicamente ela faz todo o tipo de operação binária da forma mais optimizada possível. Foi escrita pelo chefe.

Basicamente TUDO depende e usa essa classe. Vc faz um Call Hierarchy no eclipse e aparece 10,000 métodos em todos os lugares diferentes.

Se vc introduzir um bug aí e colocar essa classe em produção, produzindo uma situação catastrófica, o mínimo que vai acontecer com vc (e se só acontecer isso vc vai ficar muito feliz) é ser sumariamente demitido.

Um dia precisei alterar essa classe. O que eu fiz?

Primeiro pensei: Vou mandar um email para o chefe e “solicitar” que ele faça isso.

Depois pensei: putz o cara ocupadão e vai ficar super feliz em saber que tem um funcionário mala como eu que delega as responsabilidades pra ele.

O que eu fiz: copiei o código do método para dentro de um novo método, mudei o nome do método, mexi naquela implementação ali, com bastante cuidado, e utilizei o método no meu módulo.

Alguns vão falar: traidor das regras de boa prática, DUPLICADOR DE CÓDIGO, pagão, merece ser queimado na fogueira da inquisição de tecnologia.

Outros vão falar: se tivesse testes vc não precisaria ter feito isso.

Bom, só sei que conservei meu emprego, o chefe ficou feliz (pois fiz a coisa sem incomodar ele), e digo mais: se tivesse testes eu teria feito a mesma coisa, mesmo que fosse Deus (o chefe) que tivesse feito aquele teste, a não ser que ele ordenasse o contrário. Nunca perguntei, mas acho que ele faria o mesmo também…

saoj,

parabens pelo seu framework.

Penso do mesmo jeito que vc: resultado final pra mim conta mais ( e contou muito nos ultimos meses ) do que teoria…

Saoj, e como vc testou isso depois? Executando à mão todos os 10.000 métodos dependentes? :smiley:

E voce acha que nao levo esporro por causa disso? :wink:

Deveria ter feito testes desde o inicio? sim. Fiz? Nao. E o resultado é a necessidade de testar tudo no braco, e contar com a ajuda da lua ou marte para tudo funcionar.

Em dado momento da tua carreira (geralmente quanto esta iniciando), aceitar e compreender corretamente a necessidade e importancia de testes é desafiador, principalmente pq faz parte da natureza do ser humano tomar atitude somente quanto a agua bate na bunda.

Porem, uma coisa eh nao compreender e nao usar pelos motivos citados, MAS utilizar (“antes tarde do que nunca”), e outra coisa é defender o ponto de que testes sao ruins e negar-se a adotar tal pratica.

Rafael

Olha para tras e perceber que faziamos coisas que hoje achamos ruim, é sinal de evolução. Parabens Rafael.

Eu ainda vou blogar sobre isso, mas lembro da epoca que o Villela falava de testes unitarios e eu achava tudo isso ridiculo. Depois de um tempo, quando voce comeca a sofrer com alteracoes do core de algum sistema, comeca a pensar. E depois os testes passam a ser parte da diversao!

Algo que impede o pessoal a adotar testes é que o sistema ja comecou sem testes, ai é praticamente impossivel adotar TDD, porque o codigo ja esta naturalmente dificil de ser testado e muito acoplado!

Vc não entendeu. Eu criei um novo método. O método antigo continou lá intacto. A única coisa que poderia quebrar ali era o módulo que eu estava fazendo no momento, pois só ele estava usando o meu novo método, ou seja, criei esse método a fim de preservar o outro crítico, pois alterá-lo seria muito arriscado. Programação defensiva!

Vc não entendeu. Eu criei um novo método. O método antigo continou lá intacto. A única coisa que poderia quebrar ali era o módulo que eu estava fazendo no momento, pois só ele estava usando o meu novo método, ou seja, criei esse método a fim de preservar o outro crítico, pois alterá-lo seria muito arriscado. Programação defensiva!
[/quote]

E se um dia seu chefe alterasse o metodo criado por ele? Ele teria que se lembrar de alterar o seu também? Como se você nem se quer avisou a ele? Será que isso é uma boa pratica? Isso me parece mais POG.

Falar a verdade eu gosto do mentawai, usei em alguns projetos da universidade, mas coisa simples, gostei, achei divertido trabalhar com ele.
Mas tive muitos problemas, quando era versão ainda 1.2, 2 bugs que eu descobrir e reportei lá, sendo que eram coisas bobas no voFilter e no filter do Hibernate, algo se tivesse testes não ia para produção com aquelas falhas.

Não acho o framework inutil, mas acho que você se livraria de diversos bugs reportados se estivesse feito rotinas de testes e obvio rodassem elas.

E o bug no vo filter foi algo como já discutido aqui, em uma versão anterior que ele estava funcionando redondo, na outra versão ele já estava dando bug.

Creio que se você juntamente com sua equipe, ao invés de gastar tempo com o mentaBean, poderia realizar as rotinas de testes, assim muitas pessoas que “não confiam” pensariam em adotar o uso framework. Quem sabe depois você voltaria a tentar no mentaBean, isso se você achar viavél.

Isso nao eh programacao defensiva. Em nenhuma das definicoes de programacao defensiva que eu consegui encontrar, “copiar codigo critico e fazer alteracoes na copia para evitar mudancas no design” nao esta la. Como o thiagoaos citou, isso eh mais tipico de uma gambiarra do que de um trabalho bem-feito, por trazer as consequencias citadas aqui:

Alias, se vc tiver um tempinho pra ler, isso aqui ajuda bastante:

Vc não entendeu. Eu criei um novo método. O método antigo continou lá intacto. A única coisa que poderia quebrar ali era o módulo que eu estava fazendo no momento, pois só ele estava usando o meu novo método, ou seja, criei esse método a fim de preservar o outro crítico, pois alterá-lo seria muito arriscado. Programação defensiva!
[/quote]

Programação defensiva é a única saída que se tem quando não se tem testes, isso é óbvio.

A questão é, isso é bom? Digo, tenho certeza de que você é alguém competente, mas todo mundo que trabalha, trabalhou ou trabalhará com você é tão competente? Muitas vezes não, né? E como assegurar a confiabilidade nesses casos?

Os testes mostram sua vantagem no longo prazo, de forma que você pode assegurar que, se um bug que aparece hoje é testado, ele não reaparecerá amanhã quando alguém fizer uma alteração em um método.

Sergio, não encare isso como um ataque pessoal, mas acredito que você ganharia bastante se revisse sua posição sobre testes.

Sobre o MentaBean, ainda não o olhei em detalhes. Depois eu emito uma opinião sobre o próprio.

Aos usuários: por favor, vamos nos respeitar mais, sem transformar isso aqui numa guerra de egos. Eu fico triste em ver egolatria em um forum técnico. :frowning: