Sou eu que estou fora de contexto e errado ou estou vendo algo que faz sentido?Muita gente, talvez ate a maioria aqui no Brasil, ve os sistemas de gestao de qualidade como um fim em si mesmos e nao como meios para se obter software de qualidade.Nao deixo de me surpreender com este foco que vejo sendo dado para sistemas de gestao de qualidade tanto em empresas quanto em publicacoes da area. Parece que pouquissimos veem estes sistemas como tecnicas para obter de forma (mais ou menos) consistente um software com baixos indices de erros, e com custo e prazo aceitaveis, que sao as dimensoes basicas de qualidade.Eu vejo os sistemas de qualidade por esta otica, de ferramenta e nao de fim em si. Sera que estou errado? Lembre-se sempre de que programas de computador existem para facilitar a execucao de um trabalho. Ou seja, para tornar a vida do usuario mais simples. O que isto significa do ponto de vista de um programador? Significa que, ao tomar decisoes de projeto, voce deve pauta-las considerando o que vai tornar mais simples a vida do usuario, mesmo que isto implique em tornar a sua vida mais complicada. Resumindo: sempre optar pelo que da menos trabalho para o usuario, mesmo que isto implique em mais trabalho para o programador. Prezados, codigo auto-documentado e diferente de colocar comentarios no codigo explicando o que ele faz ou de colocar documentacao doxygen ou afins.Codigo auto-documentado e codigo escrito de forma clara, com nomes descritivos nas entidades (variaveis, funcoes, constantes, etc) e com uma estruturacao logica que facilita o entendimento. Levando a um exemplo extremo, a secao abaixo nao e codigo auto-documentado:/* Function f(string s1, string s2)This function prints a name on the screen, formatting as "surname, name". s1 is the name and s2 is the surname.*/f(string s1, string s2){ ...} Nem que o comentario fosse no padrao doxygen, isto nao seria codigo auto-documentado!Agora um exemplo de auto-documentado://----------------------------------------------// This function prints a name on the screen, formatting // as "surname, name".printAsSurnameCommaName(string name, string surname){...} Noto uma grande tendencia a usarem o default do switch para economizar digitacao.Por exemplo:O cara tem 8 possiveis valores e tem de fazer o mesmo processamento para 6 deles; entao coloca 2 cases e cobre os 6 comuns com um default. enum {V1, V2, V3, V4, V5, V6, V7, V8} v;... switch (v){case V1: processV1(); case V2: processV2(); default: process3to8();}Funciona no dia em que e implementado. Mas e um pesadelo para manutencao. No dia que alguem incluir novos valores na enumeracao, o novo valor vai ser "automagicamente" considerado como devendo ter o mesmo comportamento que o V3 a V8 tinham. O que pode estar errado. Coisas que acontecem automagicamente nao sao boas em programacao. Por isso e uma boa pratica se colocar os valores explicitamente e usar o default para logar erro indicando um valor inesperado (e, de preferencia, abortar o programa imediatamente):enum {V1, V2, V3, V4, V5, V6, V7, V8} v;...switch (v){case V1: processV1(); case V2: processV2(); case V3:case V4:case V5:case V6:case V7:case V8: process3to8(); default: /* Logar uma mensagem indicando que um