Sistemas de software têm desempenhado um papel cada vez mais preponderante no dia-a-dia das pessoas, e em muitas situações o funcionamento correto ou incorreto desses sistemas pode ser a diferença entre a vida e a morte. Entretanto, a construção de sistemas é complexa, pois deve lidar com requisitos intransigentes, restrições de integridade e a necessidade de um vasto conhecimento sobre a aplicação para que as interações esperadas entre o software e o ambiente possam ser adequadamente descritos. Quando os requisitos não são totalmente compreendidos, registrados e comunicados para a equipe de desenvolvimento, muito provavelmente, haverá discrepância entre o que o sistema construído faz e o que ele deveria fazer.

Hoje em dia o software assume um duplo papel. Ele é o produto e ao mesmo tempo o veículo para entrega do produto. Como produto ele disponibiliza o potencial de computação presente em computador, ou mais amplamente numa rede de computadores acessível pelo hardware local. Quer resida em um telefone celular, quer opere em um computador de grande porte (Mainframes) o software é transformador de informações – produzindo, gerando, adquirindo, modificando, exibindo, ou transmitindo informação, que pode ser tão simples como um bit ou tão complexa como uma apresentação multimídia. Como veículo usado para a entrega do produto, o software age como base para controle do computador – sistemas operacionais – para a comunicação da informação e para a criação e o controle de outros programas.

Atualmente, o desenvolvimento de software não ocorre como no passado, o programador solitário foi substituído por uma equipe de especialistas com cada um se concentrando numa parte da tecnologia necessária para produzir uma aplicação. No entanto, os mesmos questionamentos feitos ao programador solitário estão sendo feitos nos dias atuais:

  • 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 aos clientes?
  • Por que continuamos a ter dificuldades em avaliar o progresso enquanto o software é desenvolvido?

Há alguns anos tem-se discutido maneiras de contornar a complexidade do software, visto que a cada dia novas áreas de aplicação têm surgido e exigido mais confiabilidade e precisão dos softwares já existentes e dos que ainda virão a ser construídos. Não há consenso sobre qual a melhor prática para o desenvolvimento de sistemas de software, mais existe um esforço em encontrar soluções para reduzir as dificuldades oriundas da própria natureza do software, da sua complexidade, de necessidades de cumprir seus objetivos e da rapidez com que sofre alterações. A Engenharia de software propõe a adoção da disciplina para lidar com essas dificuldades, tentando reduzir ao máximo a influência delas no processo de desenvolvimento de software.

Engenharia de software

A Engenharia de software é uma disciplina que reúne metodologias, métodos e ferramentas a ser utilizadas, desde a percepção do problema até o momento em que o sistema desenvolvido deixa de ser operacional, visando resolver problemas inerentes ao processo de desenvolvimento e ao produto de software.

O objetivo da Engenharia de software é auxiliar no processo de produção de software, de forma que o processo de origem a produtos de alta qualidade, produzidos mais rapidamente e a um custo cada vez menor. A Engenharia de software segue o conceito de disciplina na produção de software, fundamentado nas metodologias, que por sua vez seguem métodos que utilizam de ferramentas automáticas para englobar as principais atividades do processo de produção.

Metodologia de desenvolvimento de software

Já faz alguns anos que o desenvolvimento de software deixou de ser sinônimo apenas de código. Hoje em dia, sabe-se que é necessária a utilização de uma metodologia de trabalho.

Mas o que é necessariamente uma metodologia de software? Entende-se por metodologia, como a maneira – forma – de se utilizar um conjunto coerente e coordenado de métodos para atingir um objetivo, de modo que se evite, tanto quanto possível, a subjetividade na execução do trabalho. Fornecendo um roteiro, um processo dinâmico e interativo para desenvolvimento estruturado de projetos, sistemas ou software, visando à qualidade e produtividade dos projetos.

O dicionário define metodologia como um conjunto de métodos, regras e postulados empregados por uma disciplina: um procedimento particular ou conjuntos de procedimentos.

É objetivo de uma metodologia definir de forma clara “quem” faz “o que”, “quando”, “como”, e até mesmo “onde”, para todos os que estejam envolvidos diretamente ou não com o desenvolvimento de software. Deve definir também qual o papel dos técnicos, dos usuários, e o da administração da empresa no processo de desenvolvimento. Com isso, evita-se a situação a qual o conhecimento sobre o sistema é de poucos, comumente apelidados, de “os donos do sistema”. Além disso, deve instruir um conjunto de padrões preestabelecidos, de modo a ser evitar a subjetividade na abordagem, a fim de garantir fácil integração entre os sistemas desenvolvidos. Com isso, o uso de uma metodologia possibilita:

  • Ao gerente: controlar o projeto de desenvolvimento de software mantendo o rumo do projeto sobre controle para que não haja desvios de planejamentos de custos e prazos, que, se negligenciados ou mal conduzidos, podem por em risco o sucesso do projeto.
  • Ao desenvolvedor: obter a base para produzir de maneira eficiente, software de qualidade que satisfaça os requisitos estabelecidos.

Muitas vezes, o uso de uma metodologia é encarado como cerceamento da criatividade dos técnicos, ou como, acréscimo de burocracia, leia-se documentações, por muitos tidos como desnecessário a construção de software. Uma metodologia não deve limitar a criatividade profissional, mas deve ser um instrumento que determine um planejamento sistemático, que harmonize e coordena as áreas envolvidas. O que limita a criatividade não é a metodologia, mas os requisitos de qualidade e produtividade de um projeto.

Como uma metodologia é um conjunto de métodos, convém definir o que é um método e qual o seu objetivo.

Um método é abordagem técnica passo a passo para realizar uma ou mais tarefas indicadas na metodologia. Ou seja, é (são) o(s) procedimento(s) necessário(s) a ser (em) adotado(s) para atingir um objetivo. Já uma técnica, pode ser compreendida como sendo um modo apropriado de se investigar sistematicamente um universo de interesse ou domínio do problema. Para tanto, utiliza-se de uma notação. Como exemplo de técnica, temos: Análise estruturada, Análise Essencial, Projeto Estruturado, Análise Orientada a Objetos.

A escolha de uma metodologia a ser utilizada no desenvolvimento, 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.

Conclusões

O uso de metodologia, mesmo que ainda não fortemente sedimentada, no desenvolvimento de software é de extrema importância, para que o sistema construído atenda as necessidades dos interessados, com um mínimo de qualidade.

Saiu na DevMedia!

  • Dê o próximo passo após o HTML/CSS!:
    HTTP (Hypertext Transfer Protocol) é o protocolo base para as aplicações web e clientes (como aplicativos mobile, entre outros) que se conectam a web APIs. Ele permite a comunicação entre clientes e servidores através da internet.
  • Você sabe o que é requisição e resposta?:
    Descubra o que acontece quando o navegador dispara uma requisição e, do outro lado, como um servidor web responde a isso. Essa é a hora de falar sobre um dos fundamentos da internet, o protocolo HTTP.
  • API REST + Cliente web React + Mobile:
    É hora de por em prática o que você sabe criando um projeto completo! Na série de hoje vamos analisar requisitos, codificar uma API RESTful, um cliente mobile multiplataforma, um site e uma aplicação web de moderação.

Saiba mais sobre Engenharia de software ;)

  • Guias de Engenharia de Software:
    Encontre aqui os Guias de estudo sobre os principais temas da Engenharia de Software. De metodologias ágeis a testes, de requisitos a gestão de projetos!
  • Engenharia de Software para programadores:
    Ter boas noções sobre engenharia de Software pode alavancar muito sua carreira e a sua forma de programar. Descubra nesse guia tudo o que um programador precisa saber sobre a ciência que existe por trás dos códigos.
  • Guia de Scrum:
    Com o aumento das exigências dos clientes e prazos cada vez mais curtos, encontrar opções para possibilitar o projeto, implementação e implantação de um sistema com mais qualidade e em menos tempo é fundamental. Veja a Guia Completa sobre Scrum!

Links

  • POMPILHO, S. Analise Essencial: guia prático de análise de sistemas. Rio de Janeiro, Ciência Moderna, 2002.
  • REZENDE, Denis Alcides. Engenharia de Software e Sistemas de Informação. 2. ed. Rio de Janeiro, Brasport, 2002.
  • WEBSTERS Ninth Neiv Collegiate Dictionary. 1998.