Independente do sistema a ser desenvolvido, é muito importante atentar aos princípios de Engenharia de Software. Seja um Sistema Operacional, um ERP, uma aplicação web ou qualquer outro projeto baseado em linhas de código, algumas técnicas podem vir a ajudar muito em diversos momentos no desenvolvimento, manutenção, implantação e pós-implantação. Essas técnicas, reunidas em uma área de conhecimento denominada Engernharia de Software, usam-se de tecnologias práticas da ciência da computação, gerência de projetos e outras disciplinas e visam maior organização, produtividade e qualidade. Dentro desse contexto, temos linguagens de programação, bancos de dados, ferramentas, plataformas, bibliotecas, padrões (patterns), processos e a questão da qualidade de software. A Engenharia de Software é uma maneira sistemática, disciplinada e quantificável de abordar o desenvolvimento, operação e manutenção de software. O termo foi popularizado por F.L. Bauer em 1968. Com o uso dela, espera-se ganhar em termos de tempo de desenvolvimento, manutenibilidade, flexibilidade, escalabilidade entre outros. Entre as tendências atuais na Engenharia de Software, podemos citar: orientação à aspectos, desenvolvimento ágil e orientação à modelos. O presente trabalho adota um padrão de arquitetura relativamente antigo, porém bem testada, o MVC. Esse padrão, quando bem implementado, separa a interface do usuário da lógica de negócios, de modo que é possível alterar uma sem afetar a outra. MVC é uma abreviação para Model-View-Controller, onde o Model representa a informação (dados) e as regras de negócio para manipular esses dados, o View representa os elementos da interface de usuário (no nosso caso, as caixas de texto, botões, etc) e o Controller gerencia a comunicação entre os Models e Views. Os MVCs são muito comuns em ambientes web. A escolha da interface web nesse caso, se deve ao fato de favorecer a portabilidade entre sistemas operacionais e facilitar, caso seja necessário, o uso do sistema de maneira remota, sem a necessidade de instalação de outros aplicativos para tal. Com os recursos de um servidor razoavelmente poderoso, é possível garantir estabilidade e performance a um grande número de usuários simultâneos. Retomando a idéia de camadas, para facilitar o interfaceamento entre as diversas partes do programa, utiliza-se um SGDB para garantir que os dados sejam guardados de maneira alheia à aplicação, mantendo-se apenas o padrão de comunicação entre eles. Com isso, mudar o SGDB para a aplicação não exigirá nenhuma modificação de linha de código. A compatibilidade da comunicação se dá, em parte, pelo uso de um framework de desenvolvimento, que faz a abstração para um nível mais alto do código SQL. O framework, além da tarefa citada anteriormente, agiliza o desenvolvimento, por oferecer diversos padrões e templates que não precisam ser reescritos à cada funcionalidade. Juntamente com o ganho de tempo no desenvolvimento existem outras vantagens inerentes ao seu uso. Tem-se melhor manutenibilidade já que, embora existam várias funcionalidades, o esqueleto da aplicação segue um padrão, o que facilita ao programador localizar o erro e corrigí-lo. O projeto fica mais organizado e já conta com diversas otimizações por default. O trabalho em questão será um sistema de avaliação on-line, que usará em nível de aplicação, as características citadas acima. Entre suas vantagens, pode-se adicionar ou alterar suas funcionalidades com pouco trabalho, devido à escolha do modelo de desenvolvimento. Foi utilizado o framework Ruby on Rails. Pelo projeto apresentado, fica nítida a vantagem de implementação do mesmo usando as técnicas de Engenharia de Software. Os detalhes levantados na introdução são facilmente percebidos ao final do trabalho e poucas dúvidas quanto à eficiência e eficácia dos métodos ficam no ar. O tempo que aparentemente seria desperdiçado na elaboração do projeto é compensado rapidamente no momento da implementação, já que ficam poucos caminhos para o desenvolvimento em aberto, o esqueleto do projeto já está constituido e uma linha determinada já está pronta a ser seguida. Além disso o fator manutenibilidade fica muito favorecido, oferecendo uma grande redução de custo e tempo nessa área, deixando mão-de-obra livre para trabalhar em outros projetos ou na melhora do mesmo.