Ações que podem promover melhoria na qualidade do software Brasileiro

Ao tentar responder a questão: “Quem pode mudar o mercado brasileiro no setor produtivo de software” (vide o texto anterior) recebi questões, críticas e sugestões de alguns colegas, algumas delas, a meu ver, merecem destaque:

1. Por onde começar a mudança?
2. Boas práticas não são bem aceitas, principalmente, entre os profissionais da área.
3. Os profissionais não estão atentos as questões de melhorias e sempre fazem tudo para ontem.
4. Não adianta que o recém formado saiba qualidade profundamente, ele não será um gerente de projeto. O aluno precisa conhecer JAVA, .NET, Oracle para encontrar um emprego.
5. Os conceitos de qualidade devem ser empregados em programas de pós-graduação.

Antes de apresentar um conjunto de ações para iniciar o processo de mudança no setor produtivo de software e desenvolver as considerações relativas às questões, críticas e sugestões, vamos recordar que o desafio da mudança está ligado, diretamente, aos alunos, professores, profissionais do mercado, empresas e universidades – não isentamos o governo, lembre-se disto. (vide texto: Quem pode mudar o mercado brasileiro no setor produtivo de software?)

Para iniciar o processo de mudança, podemos estabelecer um conjunto de ações nos primeiros anos da graduação, os professores que trabalham com as disciplinas de programação poderiam cobrar de seus alunos uma padronização do código, existem diversos modelos disponíveis, sugestão: o Java Code Convention (http://java.sun.com/docs/codeconv/). Para aqueles que não trabalham com Java, existe a possibilidade de propor uma padronização de código, independentemente, da linguagem.

O checklist de teste também pode ser aplicado aos alunos das séries iniciais. Veja só uma proposta, extremamente simples:

• Teste de consistência: Campo deve possuir somente entrada M ou F, entre com outra letra.
• Teste de dígito verificador: CGC, CPF, etc.
• Teste de limite de campo: Uma variável ou um campo qualquer é definido como inteiro, entre com o valor que supere o limite do campo.
• Teste de número negativo: Entre com um valor negativo para o campo idade.
• Teste de zero ou Branco: Digite zero para o código e branco para o nome.

Nota: Utilizei o checklist apresentado com várias pessoas em vários ambientes: empresas, sala de aula (formandos), cursos de pós-graduação. Cerca 95% dos programas desenvolvidos não passaram no teste.

Ao passar uma lista de exercício, desenvolva o cronograma de entrega junto ao aluno, utilize algum software que proveja este recurso. Sugestão: Gantt Project disponível em http://ganttproject.biz/download.php. Force o aluno a controlar e corrigir o cronograma proposto durante a execução da lista de exercícios. Compare o orçado ao realizado.

Apresente algumas listas de exercícios na língua inglesa para os seus alunos, colabore com o professor da disciplina de Inglês Técnico.

Apresente ao aluno das séries iniciais softwares de controle de versão, temos vários disponíveis: cvs (http://www.tortoisecvs.org/download.shtml), subversion (http://subversion.tigris.org/). Lembre-se que o aluno pode controlar as versões do programa em desenvolvimento.

Dê noções de rastreabilidade de requisitos, lembre-se que a implementação de um programa depende de um enunciado em uma lista de exercício, de um projeto de algoritmo apresentado em fluxograma (ou portugol) e, por fim, o programa será melhorado, constantemente, até chegar a um produto que agrade ao cliente, que neste caso é o professor. Tudo isto está interligado e pode ser rastreado.

Desenvolva junto ao aluno um diário de bordo, faça-o anotar em um caderno a data e o tempo de desenvolvimento de um determinado algoritmo ou programa.

Apresentei algumas “boas práticas”, se assim os senhores me permitirem delineá-las para a área de produção de software, que podem ser aplicadas nas séries iniciais. Fique a vontade para apresentar sugestões para as séries intermediárias e finais.

É importante ressaltar que se as boas práticas foram tratadas durante todo o tempo que o aluno permanece na universidade com certeza elas serão melhores aceitas ou incorporadas pelas empresas no futuro. Se os alunos souberem a sua capacidade de produção, não teremos tantos projetos atrasados (faça a seguinte experiência: pergunte ao aluno ou aos profissionais de mercado qual a sua capacidade de produção?). Lembre-se que os alunos de hoje são os profissionais de amanhã.

Concordo que o recém formado, não será contratado, na maioria das vezes, como um gerente de projeto, concordo também que ele deve saber todas as tecnologias citadas no item 4 (vide o início deste texto). Porém, acredito que a tecnologia não é o foco mais importante dentro da nossa área, lembre-se que uma base teórica sólida provê ao aluno a capacidade de aprender qualquer tecnologia. A tecnologia é instável e os paradigmas são estáveis (não é trivial quebrar ou propor um novo paradigma, vide Thomas Kuhn). Questiono: O que é mais importante, conhecer o paradigma orientado a objetos ou os comandos de uma linguagem de programação orientada o objetos? Álgebra relacional ou a interface de trabalho de um banco de dados?

Ressalto, também, que não podemos transferir a responsabilidade das práticas de qualidade para os programas de pós-graduação, devemos sim apresentá-las aos nossos alunos em todos os momentos. Desenvolver a cultura da qualidade é muito mais fácil nas séries iniciais dos cursos de graduação, neste momento o aluno não possui vícios. A boa educação é um exemplo disto.

Enfim, me limitei a vislumbrar algumas ações de melhorias que podem ser aplicadas dentro das universidades, deixo o convite para os profissionais da área, empresas enriquecerem esta discussão.

Saudações.

Prof. Dr. José Augusto Fabri.
Faculdade de Tecnologia de Ourinhos.
Fundação Educacional do Município de Assis.

4 Responses to “Ações que podem promover melhoria na qualidade do software Brasileiro”

  1. É muito bom verificar que há pessoas que saem do campo dos desejos para o da realização. A preocupação com a qualidade deve nortear os currículos de todos os cursos e de todas as disciplinas de uma Instituição que tenha como meta a excelência dos serviços prestados. Suas recomendações são tão oportunas que vou tomar a liberdade de transferi-las para o Projeto Pedagógico Institucional da FATEC Ourinhos. Após debates e consenso sobre as práticas docentes, esses procedimentos poderão permanecer como princípios norteadores da Unidade, independente do professor responsável pela disciplina.

  2. É realmente maravilhoso ver professores com as propostas acima. Como podemos observar, as propostas são simples e tem um efeito enorme! Obviamente como citado pelo autor, são somente algumas propostas, muito mais idéias simples podem somar-se a elas.

    Algo simples, e ótimo para empresas/faculdade/alunos, é a aproximação dos três, seja na contrução de projetos, PIC, co-orientação em TCC, etc.

    Uma questão, curiosidade minha mesmo, é: os professores das instituições estão aptos a praticarem tais propostas? Seja tecnicamente, teoricamente, ou ainda, tem vontade para isso? (falando genéricamente)

    Quanto ao questionamento do autor: “O que é mais importante, conhecer o paradigma orientado a objetos ou os comandos de uma linguagem de programação orientada o objetos?”
    Em meu ponto de vista é importântíssimo conhecer os paradigmas, mas é tão importante quanto conhecer o paradigma, saber como aplica-los em tecnologias utilizadas comercialmente. O ideal é juntar os dois.

    Coincidentemente, eu ministro a matéria de “Paradigmas de Linguagem de programação” para duas turmas (Engenharia e Ciências da Computação). São turmas de 3 ano e 4 ano. Tive uma imensa surpresa (e triste) no primeiro dia de aula ao checar que os alunos nem sequer conhecem a história de nossa área! Então minha prosposta foi ensinar história primeiro, depois partir para os paradigmas. Ao ensinar os paradigmas, eu foco totalmente na prática, mostrando as diferenças do paradigma funcional e OO por exemplo, e mostrando “código real” para os alunos.

    Assim, acredito que é possivel unir a teoria e prática, ja que ambos são importantes em igual teor.

    Vejo muita gente falando: “ensine Orientação a Objetos a um aluno e ele aprenderá Java”. Redondamente errado. Não só Java como .NET, etc, são tecnologias imensas. As linguagens deixarem de ser “somente linguagens” e se tornaram um enorme contexto. Hoje em dia não basta saber escrever um programinha que o aluno ja vai estar apto a trabalhar profissionalmente. Mas.. isso é um outro tópico para discutirmos! :-)

    Guto, parabéns pelas iniciativas no sentido de melhorar a qualidade da produção de software nacional! Conte conosco no que precisar!

    Abraços,

    Juliano

  3. Guilherme Orlandini Says:

    Parabéns Guto.

    Estas dicas são realmente muito válidas.Com certeza, algumas destas dicas, levarei para sala de aula.Quem sabe até possa aplicar isto, e divulgar o resultado aqui posteriormente…:-)
    Algumas destas práticas eu já aplico nas aulas, mais têm algumas outras que achei bem interessante, como a idéia de propor alguns problemas em inglês.Já propus também a idéia do “diário de bordo”, mais de maneira que eles fossem registrando todos os problemas encontrados e também a solução que eles implementaram.Dessa maneira, quando se depararem com um problema parecido, não precisarão ficar tentando lembrar como resolveram tal problema, pois já está tudo documentado.

    Agora, como professor, posso dizer que estou bastante otimista com relação a esta nova “safra” de profissionais de desenvolvimento de software que está surgindo.Sem querer defender tecnologia, muitos alunos que estão aprendendo Java como primeira linguagem, já estão aprendendo deste cedo o que é um “código padronizado e organizado”.

    É isso aí Guto.Este artigo já está na minha pasta de favoritos!!…..:-)
    Abraço.

  4. Elenildes de Almeida Says:

    O conjunto de ações proposto no texto é de total importância, como o autor, acredito que uma base bem construída e sólida com a inserção de práticas de padronização no início de uma formação acadêmica , levará a boa qualificação de futuros profissionais
    Atualmente, qualidade de software é uma realidade a ser encarada por todas as organizações de software no sentido de se tornem mais competitivas. Qualidade de software está diretamente relacionada a um gerenciamento rigoroso de requisitos, uma gerência efetiva de projetos e em um processo de desenvolvimento bem definido, gerenciado e em melhoria contínua, com isso acredito que na graduação devem ser inseridas nas disciplinas as práticas acima.
    Como profissional da área de qualidade de software, trabalho com a implementação e implantação de um modelo de qualidade de software denominado MPS. BR, onde existe resistência inicial pelos profissionais da área quanto à utilização do processo padrão estabelecido, por entenderem que demanda tempo de suas atividades diárias, mas em contrapartida quando utilizado e observado os resultados de sua utilização nos projetos se conscientizam da importância da garantia da qualidade e produtividade.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: