2.4 Resolução de Problemas no Contexto de Programação
2.4.3 Pólya e o Processo de Desenvolvimento de Software
Como descrevemos na Seção 2.3, o modelo de resolução de problemas de Pólya é composto de quatro fases: (1) entender o problema; (2) estabelecer um plano; (3) executar o plano; e, (4) examinar a solução obtida.
Nós observamos uma relação entre estas fases do modelo de Pólya e o processo de desenvolvi- mento de software. De modo geral, podemos compreender o processo de desenvolvimento de soft- ware como sendo composto da definição dos requisitos, projeto de software, implementação, testes e manutenção [IEEE 2004].
Definir os requisitos que um projeto de software deve atender é a etapa inicial do processo de desenvolvimento de software e é uma fase significativa para o entendimento do problema. Nesta fase são realizadas a definição do escopo e objetivo do problema, assim como a definição dos requisitos que o software deve atender. Há, portanto, uma correspondência entre a definição dos requisitos e a primeira fase do modelo de Pólya – entender o problema.
2.4 Resolução de Problemas no Contexto de Programação 24
O projeto de software diz respeito ao processo de definir a arquitetura, os componentes, interfaces e outras característica do sistema. O projeto de software tem correspondência com a segunda fase do modelo de Pólya que é estabelecer um plano para alcançar a solução.
A implementação diz respeito a construção do software por meio da utilização de uma combi- nação de recursos de desenvolvimento, tais como, linguagem e ambiente de programação, sistemas de controle de versões, entre outros. A implementação corresponde à fase de execução do plano, no modelo de Pólya.
Os testes permitem aferir a qualidade do software. A manutenção refere-se a modificações no software para corrigir defeitos, melhorar sua performance ou outros atributos que se façam necessários. Testes e manutenção têm correspondência com a última fase do modelo de Pólya, que é a de examinar a solução obtida.
No Quadro 2.8, nós apresentamos uma síntese das relações entre o modelo de Pólya e o processo de desenvolvimento de software. É importante destacarmos que essas fases são iterativas e não se- qüenciais. Isto significa que as atividades em cada fase podem ser refinadas até que o objetivo seja alcançado.
Embora tenhamos feito uma descrição evidenciando todas as fases, nosso trabalho tem como ênfase a fase de entendimento do problema (segundo o modelo de Pólya) ou a definição de requisitos (se considerarmos o processo de desenvolvimento de software).
Quadro 2.8: Relação entre o modelo de Pólya e o processo de desenvolvimento de software.
Pólya Processo de Desenvolvimento de Software
Entender o Problema: identificar os dados relevan-
tes do problema.
Definição de Requisitos: identificar e definir os re-
quisitos que o software deve atender.
Estabelecer um Plano: decompor o problema em
partes e produzir estratégias para alcançar uma solução.
Projeto de software: definir a arquitetura, os compo-
nentes, interfaces e outras característica do sistema.
Executar o Plano: construir uma solução. Implementação: construir o software.
Examinar a Solução: avaliar a solução obtida. Testes e Manutenção: aferir a qualidade do software
Capítulo 3
Programação Orientada ao Problema
Programação Orientada ao Problema (POP) é uma metodologia de ensino que contempla um con-
junto de atividades a serem inseridas em disciplinas introdutórias de programação a fim de auxiliar os estudantes da especificação dos requisitos ao programa.
Da perspectiva do ensino, POP combina atividades de Engenharia de Software e Programação; possibilita a realização de atividades em grupos e individuais; e pode ser utilizada desde a resolução de problemas simples até problemas mais complexos.
Da perspectiva da aprendizagem, POP proporciona aos estudantes uma visão mais realista do processo de desenvolvimento de software, permitindo-lhes conhecer e exercitar, em conjunto com a programação, outras atividades de Engenharia de Software, tais como, elicitação e especificação de requisitos e testes. Além da prática dessas atividades, os estudantes desenvolvem habilidades de diálogo, negociação e escrita.
Neste capítulo, nós descrevemos os princípios que fundamentam POP, seus participantes e pa- péis, e atividades desenvolvidas pelos estudantes para a resolução de problemas. Para orientarmos os docentes na aplicação de POP, nós disponibilizamos no Apêndice A os guidelines e material de su- porte. Esses materiais também encontram-se disponíveis no site http://sites.google.com/ site/joinpop/.
3.1
Princípios Pedagógicos e Técnicos
Os princípios pedagógicos e técnicos que fundamentam POP são:
• Assumir Programação como parte da Engenharia de Software;
3.1 Princípios Pedagógicos e Técnicos 26
• Adotar um ciclo1 de resolução de problemas que vai da especificação dos requisitos ao pro-
grama;
• Produzir, como resultado do ciclo de resolução de problemas, especificação, programa e testes,
ao invés de um único artefato – o programa;
• Adotar problemas mal definidos como parte integrante dos problemas propostos em disciplinas
de programação;
• Adotar testes desde o início da disciplina, tanto para descobrir e/ou confirmar requisitos, quanto
para aferir a qualidade do programa.
Como enfatizamos no Capítulo 1, programação resulta em um produto de software e, como tal, produz artefatos que devem atender necessidades de um cliente e cuja qualidade precisa ser aferida. Não há, portanto, como dissociá-la da própria Engenharia de Software.
Por concebermos programação como descrito acima, acreditamos que a forma de resolver pro- blemas na disciplina introdutória de programação deve ser a mais realista possível, permitindo que os estudantes tenham uma compreensão de como os problemas são resolvidos no contexto de de- senvolvimento de software. Neste contexto, os problemas são mal definidos e, para solucioná-los, os desenvolvedores precisam ir da especificação dos requisitos ao programa. Esta experiência de
desenvolvedor deve ser vivenciada pelos estudantes de programação.
Os princípios de POP são apoiados pelas diretrizes curriculares para a área de Computação e Informática, as quais recomendam que o ensino de programação enfatize outras habilidades além do raciocínio lógico e da construção de programas. No Brasil, as diretrizes curriculares sugeridas pela Secretária de Educação Superior [MEC/SESU 1999] definem programação de computadores como sendo “uma atividade voltada à resolução de problemas. Nesse sentido ela está relacionada
com uma variada gama de outras atividades como especificação, projeto, validação, modelagem e estruturação de programas e dados, utilizando-se das linguagens de programação propriamente ditas, como ferramentas” [MEC/SESU 1999, p. 5].
A Joint Task Force on Computing Curricula [IEEE/ACM 2001], ao tratar especificamente sobre cursos introdutórios de programação, afirma que “estes cursos freqüentemente simplificam o pro-
cesso de programação para torná-los mais acessíveis aos estudantes iniciantes, dando pouco peso
1Ciclo é definido como um conjunto de fatos ou ações que se sucedem no tempo, marcando uma diferença
entre o estágio inicial e o estágio conclusivo. Esta definição foi extraída do dicionário Houaiss da Língua Portuguesa, disponível em http://houaiss.uol.com.br/ e acessada em outubro de 2010.