Metodologias de Desenvolvimento de Software
O software têm um papel cada vez mais importante no dia-a-dia das pessoas, e e seu funcionamento correto pode ser a diferença entre o sucesso e o fracasso deste no mercado. O desenvolvimento de sistemas é uma tarefa complexa, pois lida com requisitos intransigentes e mutáveis ao longo do tempo, restrições de integridade e de que podem gerar ônus e dividendos às partes envolvidas, por isso requer um vasto conhecimento sobre a aplicação, as interações esperadas entre o software e os usuários, o ambiente onde este está sendo executado e uma infinidade de particularidades que precisam ser adequadamente descritos. Quando estes requisitos não são totalmente compreendidos, registrados e comunicados entre toda a equipe de desenvolvimento, haverá discrepância entre o que o sistema faz e o que ele deveria fazer. Para mitigar estes problemas, dezenas de autores e desenvolvedores passaram a desenvolver e aperfeiçoar técnicas e métodos de levantamento dessas informações e documentação fazendo com que todos os envolvidos assumam suas responsabilidades e produzam softwares com muito mais qualidade. Isso é o que vamos discutir um pouco neste artigo.
Na atualidade o software desenvolve um papel primordial na vida de uma organização ou mesmo da sociedade, pois é através dele que o potencial computacional pode ser explorado seja através de um telefone celular ou de uma rede de computadores trabalhando em conjunto para a solução de um problema, ele é o transformador das informações, através dele é que os sistemas eletrônicos dos computadores produzem os resultados, gerando, adquirindo, modificando, exibindo, ou transmitindo as informações, ele age como base para o controle do computador.
Atualmente, o software passa a ter muito mais recursos e por este motivo não pode mais ser desenvolvido por uma única pessoa, devido a complexidade envolvida, e sim por uma equipe onde cada membro é especialista em um dos aspectos envolvidos, e em uma parte da tecnologia necessária para produzir a aplicação como um todo, produzindo resultados mais coesos com as necessidades dos usuários, porém, indiferente da complexidade ou do tamanho do software algumas questões são importantes e precisam ser respondidas pela equipe envolvida afim de gerar resultados dentro dos orçamentos disponíveis e dentro das necessidades, sem que nenhum membro seja explorado ou prejudicado. Essas questões podem ser resumidas, mais não limitadas a:
Por que leva tanto tempo para concluir o software? Por que os custos de desenvolvimentos são tão altos? Por que não podemos achar todos os erros antes da entrega do software ao cliente?
Por que continuamos a ter dificuldades em avaliar o progresso enquanto o software é desenvolvido?
Para responder essas e outras questões inerentes ao projeto e desenvolvimento de software, é que surgiram as diferentes metodologias de desenvolvimento, e cada uma visa um conjunto de regras e de métodos para fazer os levantamentos e mensurar o andamento do desenvolvimento, agregando valor e recursos realmente funcionais não só para a equipe de desenvolvimento como também para os usuários. Uma metodologia perfeita visa desenvolver um software sem erros, em um menor tempo de desenvolvimento, com baixo custo de produção, escalabilidade de recursos e requisitos, que tenha uma interface agradável a todos os usuários, rodando no menor hardware necessário. Até o momento, não há um consenso sobre a melhor prática, mais existe um esforço em encontrar soluções para reduzir as dificuldades oriundas da sua complexidade, e das necessidades de cumprir seus objetivos com rapidez em que as alterações sejam necessárias.
Engenharia de software e as Metodologias
A Engenharia de software é a disciplina dentro da área de tecnologia e informática, que reúne metodologias, métodos e ferramentas a serem utilizadas, para a produção de software e que abrange desde a percepção do problema até o momento em que o sistema desenvolvido deixa de ser operacional, ou seja, não envolve somente a produção, e sim o levantamento dos requisitos necessários, o estudo de viabilidade e custos de desenvolvimento, levantamento dos requisitos operacionais e humanos para o desenvolvimento, custos e necessidades para manter o software operacional durante sua existência, custos e requisitos para escalabilidade e atualização para manter o software durante seu ciclo de vida.
Ou seja, o engenheiro de software é o responsável por toda a vida do software desde a ideia inicial até a concepção e manutenção durante sua existência. O objetivo da Engenharia de software é auxiliar no processo de produção de software, de forma a dar origem a produtos de alta qualidade, produzidos mais rapidamente e a um custo cada vez menor. Usando uma disciplina na produção, fundamentado em metodologias para englobar as principais atividades envolvidas durante todo o processo.
Já faz anos que o desenvolvimento de software deixou de ser sinônimo apenas de produzir código, hoje em dia, sabe-se que é necessária a utilização de uma série de ferramentas de maneira coerente e coordenado para atingir um objetivo alvo, de modo que se evite, a subjetividade na execução dos trabalhos. As metodologias fornecem um roteiro dinâmico e interativo para desenvolvimento estruturado de projetos, sistemas ou softwares, visando à qualidade e produtividade.
A metodologia define de forma clara quem faz o que, quando faz, e como, e onde, cada processo envolvido será executado, determinando não só os envolvidos mais as responsabilidades. Deve definir também o papel dos técnicos, dos usuários, e da administração e de outros envolvidos no processo, como por exemplo entidades regulamentadoras, leis, governos e influencias externas e temporais. Com isso, evita-se a situação de determinar quem é o responsável ou apontar um culpado seja por um sucesso ou por um fracasso. Além disso, deve instruir os envolvidos a usarem um conjunto de padrões preestabelecidos, de modo a se evitar a subjetividade na abordagem, garantindo fácil integração entre os diversos sistemas desenvolvidos, e os membros de cada equipe envolvida.
Por este motivo as metodologias não podem ser rígidas, e devem permitir uma adequação a realidade de cada equipe, não existe uma metodologia única que resolva todos os problemas, portanto cabe a cada engenheiro ou coordenador definir as melhores ferramentas e o conjunto de regras que mais se adequa a realidade da equipe e ao nível de conhecimento de cada um, não atribuindo responsabilidades ou criando mais burocracia que o necessário, os papéis dos membros devem ser claros e definidos, bem como suas responsabilidades.
Cabe ao gerente controlar o projeto de desenvolvimento, mantendo-o sobre controle para que não haja desvios de planejamentos de custos e de prazos, que, se negligenciados ou mal conduzidos, podem por em risco o sucesso do projeto. Pelo lado dos desenvolvedores, estes devem obter a base técnica para produzir de maneira eficiente um software de qualidade e que satisfaça os requisitos estabelecidos no projeto. Os desenvolvedores não são somente os programadores, e sim a equipe técnica cada qual com seu conhecimento e sua área de atuação, ou seja, são a base técnica do projeto. Os usuários, são os responsáveis pelo levantamento dos requisitos e das necessidades e devem fornece-las de maneira clara e objetiva, muitas metodologias possuem diversas técnicas e ferramentas para melhorar a iteração entre a equipe técnica e a equipe de usuários. Os administradores são os responsáveis pelo andamento financeiro e fornecimento dos recursos humanos e tecnológicos para o perfeito funcionamento. Uma entidade que muitas vezes é negligenciada são os fatores externos, que podem impactar diretamente na produção do software, como mudanças em leis e determinações legais, aspectos sociais, e muitos outros fatores externos a equipe.
Muitas vezes, o uso de uma metodologia é encarado como um cerceamento da criatividade dos técnicos, ou como, acréscimo de burocracia, pelo uso de documentações e regras, que por muitas vezes são tidos como desnecessários. Ela realmente não deve limitar a criatividade profissional, mas deve ser um instrumento que determine um planejamento sistemático, que harmonize e coordene as atividades e as áreas envolvidas limitando aos requisitos de qualidade e produtividade do projeto.
O que é um método e qual o seu objetivo?
Um método é a abordagem técnica passo a passo para realizar as tarefas indicadas, ou seja, são os procedimentos necessários a serem adotados para atingir o objetivo. Já uma técnica, pode ser compreendida como um modo apropriado de investigar um universo de interesse ou o domínio do problema, utilizando-se de uma notação, como por exemplo a Análise estruturada, Análise Essencial, Projeto Estruturado, Análise Orientada a Objetos, Desenvolvimento Funcional e uma infinidade de outras técnicas.
A escolha de uma metodologia, deve ser realizada com base na natureza do projeto e do produto a ser desenvolvido, dos métodos e ferramentas a serem utilizadas e dos controles e produtos intermediários desejados. O uso destas é de extrema importância, para que o sistema construído atenda as necessidades dos interessados, com um mínimo de qualidade e dentro dos prazos e valores, servindo também como base para mensuração de custos de desenvolvimento e de manutenções.