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.