• Nenhum resultado encontrado

O uso de computadores se disseminou em praticamente toda a sociedade e está presente em diversos setores da economia, além de áreas como a educação, governo e no entretenimento, gerando uma grande demanda por programas de computadores. “Como resultado, bilhões de dólares são empregados no desenvolvimento de software, e a vida e trabalho da maioria das pessoas depende da eficiência e qualidade deste desenvolvimento” (ACM; IEEE, 2004, p. 05).

O desenvolvimento e a manutenção de sistemas de software confiáveis, eficientes, com custos razoáveis tanto para o desenvolvimento como para a manutenção e que satisfaça todos os requisitos desejados pelos usuários são preocupações da engenharia de

software (ACM; AIS; IEEE, 2005). A engenharia de software começou

a ser discutida como disciplina em 1968 (ACM; IEEE, 2004), atualmente faz parte do currículo dos cursos de ciências da computação, engenharia da computação e sistemas da informação, sendo que mais recentemente, com o aumento dos conteúdos relacionados a esta área, algumas universidades passaram a criar cursos de graduação específicos para engenharia de software (no Brasil, temos como exemplos a UFG e UFRN).

Diversas definições já foram apresentadas para a engenharia de

software, a ACM e IEEE (2004) destacam algumas: (i) é o

estabelecimento e uso de princípios (métodos) com o objetivo de obter

software economicamente viável, confiável e que funciona em

máquinas reais (BAUER, 1972); (ii) é a forma de engenharia que aplica princípios da ciência da computação e matemática para alcançar soluções para problemas de software dentro de custos viáveis (CMU/SEI, 1990); (iii) é a aplicação de uma abordagem sistemática, disciplinada e quantificável para o desenvolvimento, operação e manutenção de software (IEEE CS, 1990).

Portanto, a engenharia de software vai além dos códigos dos programas, procura disciplinar o desenvolvimento e traz para a criação de software princípios, técnicas e conhecimentos para tratar questões de qualidade, prazos e fatores econômicos (IEEE, 2004). Busca o desenvolvimento de software de alta qualidade, de maneira sistemática, controlada e eficiente.

O trabalho dos engenheiros de software envolve, segundo Hadjerrouit (2005), dois grupos de competências. O primeiro grupo está relacionado com tarefas chave no ciclo de vida de um software e envolve: análise (para representação de problemas e requisitos de usuários), projeto (conhecimentos sobre arquitetura de software e componentes), reuso (capacidade de reconhecer similaridades e diferenças entre problemas para procurar reaproveitar softwares existentes em novos projetos), codificação (programar, testar e corrigir erros) e pensamento crítico (avaliar, explicar e justificar soluções de engenharia de software).

O segundo grupo aponta outras competências necessárias nas situações de trabalho típicas do engenheiro de software, como boa capacidade de leitura e escrita (necessários para análise crítica e elaboração de documentos técnicos) e habilidades de comunicação (importantes para o trabalho em equipe e relacionamento com clientes).

Além disso, Lethbridge (2000) aborda a necessidade por habilidades de gerenciamento e negociação, e IEEE (2004) enfatiza a demanda por conhecimentos de padrões ligados a software, qualidade, capacidade de inovação, criatividade e habilidades interpessoais.

Segundo as recomendações curriculares para a ES, ao terminarem a graduação os profissionais que atuarem como engenheiros de software devem ser capazes de (ACM; IEEE, 2004):

1) dominar os conhecimentos e habilidades que fazem parte da

área de engenharia de software;

2) trabalhar individualmente ou como parte de uma equipe para

desenvolver artefatos de software com qualidade;

3) conciliar objetivos de projeto conflitantes, alcançando

equilíbrio em relação a limitações de custo, tempo,

conhecimentos, sistemas existentes e questões

organizacionais;

4) projetar soluções utilizando abordagens apropriadas de

engenharia de software que integrem questões éticas, sociais, legais e econômicas;

5) demonstrar entendimento e saber aplicar teorias, modelos e técnicas correntes que forneçam uma base para identificação de problemas e análise, projeto de software, desenvolvimento, implementação, verificação e documentação;

6) demonstrar entendimento e apreciação para a importância de

negociação, hábitos de trabalho eficientes, liderança, e boa comunicação com stakeholders em um ambiente de desenvolvimento de software;

7) aprender novos modelos, técnicas e tecnologias conforme elas

surjam, e apreciar a necessidade por um desenvolvimento profissional contínuo.

São muitas, portanto, as competências exigidas dos engenheiros de software. Alguns estudos com profissionais da área dão indicativos de que vários tópicos da engenharia de software não estão sendo aprendidos suficientemente nas universidades (LETHBRIDGE, 2000; KITCHENHAM et al., 2005; GRESSE VON WANGENHEIM; SILVA, 2009). Mead et al. (1997) comentam que os tópicos de ES normalmente são abordados de forma superficial e em poucas disciplinas dos cursos de graduação, questão que se agravou nos últimos anos pelo fato do currículo da área envolver um corpo de conhecimento cada vez mais extenso (IEEE, 2004).

A qualidade da educação é um dos fatores importantes que influencia na qualidade dos profissionais (BECKMAN et al., 1997), e uma das maneiras de se aumentar a qualidade do ensino é aperfeiçoar a didática e estratégias dos processos de ensino e aprendizagem. Uma concentração em aulas teóricas tradicionais, poucos exercícios e projetos muito simplificados em sala de aula, como já comentado no capítulo 1, são práticas correntes (HUANG; DISTANTE, 2006; NAUMAN; UZAIR, 2007; SANTOS et. al, 2008) que podem ser considerados como pontos fracos no atual ensino da ES.

O ensino com grande concentração de aulas tradicionais pode não ser suficiente para suprir as necessidades de aprendizagem dos alunos (GRILLO, 2002), e nesse ponto, as próprias diretrizes curriculares da ACM (Association for Computing Machinery) e IEEE (Institute of Electrical and Electronics Engineers) para a área de ES indicam a necessidade por aulas que contemplem estratégias de aprendizagem que vão além das aulas expositivas (ACM; IEEE, 2004; ACM; IEEE, 2008).

A ES tem sua utilidade reconhecida em grandes projetos, com grandes equipes e orçamentos. Assim, a aprendizagem da área não pode ficar limitada a pequenos projetos irreais, exageradamente simplificados (BAKER; NAVARRO; VAN DER HOEK, 2003), que ignoram questões de confiabilidade de funcionamento, segurança, custos, prazos e outros requisitos importantes (GRESSE VON WANGENHEIM, 2008).

Mas algumas abordagens alternativas vem sendo adotadas por professores de algumas instituições, que promovem maior participação dos alunos nas aulas de ES (PRIKLADNICKI et al., 2009), com estratégias que trocam aulas expositivas por discussões de casos práticos (GNATZ et al, 2003), abordagens construtivistas centradas nos estudantes (HADJERROUIT, 2005), dinâmicas de grupo e jogos e simuladores educacionais (GRESSE VON WANGENHEIM; SHULL, 2009; FERNANDES; WERNER, 2009) e capstone projects (onde os alunos devem desenvolver um projeto do início ao fim, muitas vezes envolvendo um cliente real).

Estes métodos mais focados no aluno e que promovem uma participação mais ativa nas aulas têm potencial para aumentar o interesse dos alunos, motivá-los e melhorar a aprendizagem no nível de aplicação dos conceitos (JUNIOR; SAUAIA, 2008). Uma preocupação atual é entender como usar essas abordagens eficazmente para contribuir com a formação e aumento da competência dos engenheiros de software.