Metodologias de programação - Guia rápido

Quando programas são desenvolvidos para resolver problemas da vida real, como gerenciamento de estoque, processamento de folha de pagamento, admissões de alunos, processamento de resultados de exames, etc., eles tendem a ser enormes e complexos. A abordagem para analisar tais problemas complexos, planejar o desenvolvimento de software e controlar o processo de desenvolvimento é chamadaprogramming methodology.

Tipos de metodologias de programação

Existem muitos tipos de metodologias de programação predominantes entre os desenvolvedores de software -

Programação Processual

O problema é dividido em procedimentos ou blocos de código que executam uma tarefa cada. Todos os procedimentos tomados em conjunto formam o programa completo. É adequado apenas para pequenos programas com baixo nível de complexidade.

Example- Para um programa de calculadora que faz adição, subtração, multiplicação, divisão, raiz quadrada e comparação, cada uma dessas operações pode ser desenvolvida como procedimentos separados. No programa principal, cada procedimento seria invocado com base na escolha do usuário.

Programação orientada a objetos

Aqui, a solução gira em torno de entidades ou objetos que fazem parte do problema. A solução trata de como armazenar dados relacionados às entidades, como as entidades se comportam e como elas interagem entre si para fornecer uma solução coesa.

Example - Se tivermos que desenvolver um sistema de gestão da folha de pagamento, teremos entidades como funcionários, estrutura salarial, regras de licença, etc. em torno das quais a solução deve ser construída.

Programação Funcional

Aqui, o problema, ou a solução desejada, é dividido em unidades funcionais. Cada unidade realiza sua própria tarefa e é autossuficiente. Essas unidades são então costuradas para formar a solução completa.

Example - Um processamento de folha de pagamento pode ter unidades funcionais como manutenção de dados de funcionários, cálculo do salário básico, cálculo do salário bruto, processamento de licenças, processamento de reembolso de empréstimos, etc.

Programação Lógica

Aqui, o problema é dividido em unidades lógicas em vez de unidades funcionais. Example:Em um sistema de gestão escolar, os usuários têm funções muito definidas, como professor de turma, professor de disciplina, assistente de laboratório, coordenador, responsável acadêmico, etc. Portanto, o software pode ser dividido em unidades dependendo das funções do usuário. Cada usuário pode ter diferentes interfaces, permissões, etc.

Os desenvolvedores de software podem escolher uma ou uma combinação de mais de uma dessas metodologias para desenvolver um software. Observe que em cada uma das metodologias discutidas, o problema deve ser dividido em unidades menores. Para fazer isso, os desenvolvedores usam qualquer uma das seguintes abordagens -

  • Abordagem de cima para baixo
  • Abordagem de baixo para cima

Abordagem de cima para baixo ou modular

O problema é dividido em unidades menores, que podem ser subdivididas em unidades ainda menores. Cada unidade é chamada demodule. Cada módulo é uma unidade autossuficiente que possui todo o necessário para realizar sua tarefa.

A ilustração a seguir mostra um exemplo de como você pode seguir a abordagem modular para criar diferentes módulos ao desenvolver um programa de processamento de folha de pagamento.

Abordagem de baixo para cima

Na abordagem ascendente, o projeto do sistema começa com o nível mais baixo de componentes, que são interconectados para obter componentes de nível superior. Este processo continua até que uma hierarquia de todos os componentes do sistema seja gerada. No entanto, no cenário da vida real, é muito difícil saber todos os componentes de nível mais baixo desde o início. Portanto, a abordagem de baixo para cima é usada apenas para problemas muito simples.

Vejamos os componentes de um programa de calculadora.

Um processo típico de desenvolvimento de software segue estas etapas -

  • Recolha de requisitos
  • Definição de problema
  • Projeto de sistema
  • Implementation
  • Testing
  • Documentation
  • Treinamento e suporte
  • Maintenance

As duas primeiras etapas ajudam a equipe a entender o problema, a primeira etapa mais importante para obter uma solução. A pessoa responsável por coletar requisitos, definir o problema e projetar o sistema é chamadasystem analyst.

Recolha de requisitos

Normalmente, os clientes ou usuários não são capazes de definir claramente seus problemas ou requisitos. Eles têm uma vaga ideia do que desejam. Portanto, os desenvolvedores de sistema precisam reunir os requisitos do cliente para entender o problema que precisa ser resolvido ou o que precisa ser entregue. A compreensão detalhada do problema só é possível entendendo primeiro a área de negócios para a qual a solução está sendo desenvolvida. Algumas questões-chave que ajudam a compreender um negócio incluem:

  • O que está sendo feito?
  • Como isso está sendo feito?
  • Qual é a frequência de uma tarefa?
  • Qual é o volume de decisões ou transações?
  • Quais são os problemas encontrados?

Algumas técnicas que ajudam na coleta dessas informações são:

  • Interviews
  • Questionnaires
  • Estudo de documentos de sistema existentes
  • Analisando dados de negócios

Os analistas de sistema precisam criar documentos de requisitos claros e concisos, mas completos, a fim de identificar os requisitos SMART - específicos, mensuráveis, acordados, realistas e baseados no tempo. A falha em fazer isso resulta em -

  • Definição de problema incompleta
  • Metas incorretas do programa
  • Retrabalhe para entregar o resultado necessário ao cliente
  • Custos aumentados
  • Entrega Atrasada

Devido à profundidade das informações necessárias, a coleta de requisitos também é conhecida como detailed investigation.

Definição de problema

Depois de reunir os requisitos e analisá-los, a declaração do problema deve ser declarada claramente. A definição do problema deve indicar de forma inequívoca qual problema ou problemas precisam ser resolvidos. É necessário ter uma declaração clara do problema para -

  • Definir o escopo do projeto
  • Mantenha a equipe focada
  • Mantenha o projeto no caminho certo
  • Valide que o resultado desejado foi alcançado no final do projeto

Freqüentemente, a codificação é considerada a parte mais essencial de qualquer processo de desenvolvimento de software. No entanto, a codificação é apenas uma parte do processo e pode levar o mínimo de tempo se o sistema for projetado corretamente. Antes que o sistema possa ser projetado, uma solução deve ser identificada para o problema em questão.

A primeira coisa a ser observada sobre o projeto de um sistema é que inicialmente o analista de sistemas pode apresentar mais de uma solução. Mas a solução final ou o produto pode ser apenas um. A análise detalhada dos dados coletados durante a fase de coleta de requisitos pode ajudar a chegar a uma solução exclusiva. Definir corretamente o problema também é crucial para se chegar à solução.

Quando confrontados com o problema de várias soluções, os analistas buscam recursos visuais como fluxogramas, diagramas de fluxo de dados, diagramas de relacionamento de entidades etc. para entender cada solução em profundidade.

Fluxograma

O fluxograma é o processo de ilustrar fluxos de trabalho e fluxos de dados em um sistema por meio de símbolos e diagramas. É uma ferramenta importante para auxiliar o analista de sistemas na identificação de uma solução para o problema. Ele descreve os componentes do sistema visualmente.

Estas são as vantagens do fluxograma -

  • A representação visual ajuda a entender a lógica do programa

  • Eles atuam como projetos para a codificação do programa real

  • Os fluxogramas são importantes para a documentação do programa

  • Os fluxogramas são uma ajuda importante durante a manutenção do programa

Estas são as desvantagens do fluxograma -

  • Lógica complexa não pode ser representada usando fluxogramas

  • Em caso de qualquer alteração na lógica ou fluxo de dados / trabalho, o fluxograma deve ser completamente redesenhado

Diagrama de fluxo de dados

O diagrama de fluxo de dados ou DFD é uma representação gráfica do fluxo de dados por meio de um sistema ou subsistema. Cada processo tem seu próprio fluxo de dados e existem níveis de diagramas de fluxo de dados. O nível 0 mostra os dados de entrada e saída para todo o sistema. Em seguida, o sistema é dividido em módulos e o DFD de nível 1 mostra o fluxo de dados para cada módulo separadamente. Os módulos podem ser subdivididos em submódulos, se necessário, e o nível 2 de DFD desenhado.

Pseudo-código

Depois que o sistema é projetado, ele é entregue ao gerente de projeto para implementação, ou seja, codificação. A codificação real de um programa é feita em uma linguagem de programação, que pode ser entendida apenas por programadores treinados nessa linguagem. No entanto, antes que ocorra a codificação real, os princípios operacionais básicos, fluxos de trabalho e fluxos de dados do programa são escritos usando uma notação semelhante à linguagem de programação a ser usada. Essa notação é chamadapseudocode.

Aqui está um exemplo de um pseudocódigo em C ++. O programador só precisa traduzir cada instrução em sintaxe C ++ para obter o código do programa.

Identificando Operações Matemáticas

Todas as instruções para o computador são finalmente implementadas como operações aritméticas e lógicas no nível da máquina. Essas operações são importantes porque -

  • Ocupar espaço de memória
  • Demore na execução
  • Determine a eficiência do software
  • Afeta o desempenho geral do software

Os analistas de sistema tentam identificar todas as principais operações matemáticas enquanto identificam a solução única para o problema em questão.

Um problema da vida real é complexo e grande. Se uma solução monolítica for desenvolvida, ela levantará esses problemas -

  • Difícil de escrever, testar e implementar um grande programa

  • Modificações após o produto final ser entregue são quase impossíveis

  • Manutenção do programa muito difícil

  • Um erro pode interromper todo o sistema

Para superar esses problemas, a solução deve ser dividida em partes menores chamadas modules. A técnica de quebrar uma grande solução em módulos menores para facilidade de desenvolvimento, implementação, modificação e manutenção é chamadamodular technique de programação ou desenvolvimento de software.

Vantagens da Programação Modular

A programação modular oferece essas vantagens -

  • Permite um desenvolvimento mais rápido, pois cada módulo pode ser desenvolvido em paralelo

  • Módulos podem ser reutilizados

  • Como cada módulo deve ser testado independentemente, o teste é mais rápido e mais robusto

  • Depuração e manutenção de todo o programa mais fácil

  • Os módulos são menores e têm menor nível de complexidade, portanto, são fáceis de entender

Identificando os Módulos

Identificar módulos em um software é uma tarefa incompreensível porque não pode haver uma maneira correta de fazer isso. Aqui estão algumas dicas para identificar os módulos -

  • Se os dados forem o elemento mais importante do sistema, crie módulos que tratam dos dados relacionados.

  • Se o serviço fornecido pelo sistema for diverso, divida o sistema em módulos funcionais.

  • Se tudo mais falhar, divida o sistema em módulos lógicos de acordo com sua compreensão do sistema durante a fase de coleta de requisitos.

Para codificação, cada módulo deve ser novamente dividido em módulos menores para facilitar a programação. Isso pode ser feito novamente usando as três dicas compartilhadas acima, combinadas com regras de programação específicas. Por exemplo, para uma linguagem de programação orientada a objetos como C ++ e Java, cada classe com seus dados e métodos poderia formar um único módulo.

Solução Passo a Passo

Para implementar os módulos, o fluxo do processo de cada módulo deve ser descrito passo a passo. A solução passo a passo pode ser desenvolvida usandoalgorithms ou pseudocodes. Fornecer solução passo a passo oferece estas vantagens -

  • Qualquer pessoa que esteja lendo a solução pode compreender o problema e a solução.

  • É igualmente compreensível por programadores e não programadores.

  • Durante a codificação, cada instrução simplesmente precisa ser convertida em uma instrução de programa.

  • Pode fazer parte da documentação e auxiliar na manutenção do programa.

  • Detalhes de nível micro, como nomes de identificadores, operações necessárias, etc., são resolvidos automaticamente

Vejamos um exemplo.

Estruturas de controle

Como você pode ver no exemplo acima, não é necessário que uma lógica de programa seja executada sequentially. Em linguagem de programação,control structurestomar decisões sobre o fluxo do programa com base em parâmetros dados. Eles são elementos muito importantes de qualquer software e devem ser identificados antes do início de qualquer codificação.

Algoritmos e pseudocodes ajudar analistas e programadores a identificar onde as estruturas de controle são necessárias.

As estruturas de controle são destes três tipos -

Estruturas de controle de decisão

As estruturas de controle de decisão são usadas quando a próxima etapa a ser executada depende de um critério. Esse critério geralmente é uma ou mais expressões booleanas que devem ser avaliadas. Uma expressão booleana sempre avalia como "verdadeiro" ou "falso". Um conjunto de instruções é executado se o critério for “verdadeiro” e outro conjunto executado se o critério for avaliado como “falso”. Por exemplo, se declaração

Estruturas de controle de seleção

As estruturas de controle de seleção são usadas quando a sequência do programa depende da resposta a uma pergunta específica. Por exemplo, um programa tem muitas opções para o usuário. A instrução a ser executada a seguir dependerá da opção escolhida. Por exemplo,switch declaração, case declaração.

Estruturas de controle de repetição / loop

A estrutura de controle de repetição é usada quando um conjunto de instruções deve ser repetido várias vezes. O número de repetições pode ser conhecido antes de começar ou pode depender do valor de uma expressão. Por exemplo,for declaração, while declaração, do while declaração, etc.

Como você pode ver na imagem acima, as estruturas de seleção e decisão são implementadas de forma semelhante em um fluxograma. O controle de seleção nada mais é do que uma série de declarações de decisão tomadas sequencialmente.

Aqui estão alguns exemplos de programas para mostrar como essas instruções funcionam -

Um conjunto finito de etapas que devem ser seguidas para resolver qualquer problema é chamado de algorithm. O algoritmo geralmente é desenvolvido antes que a codificação real seja concluída. Ele é escrito em inglês, de modo que é facilmente compreensível mesmo por não programadores.

Às vezes, os algoritmos são escritos usando pseudocodes, ou seja, uma linguagem semelhante à linguagem de programação a ser usada. Escrever algoritmos para resolver um problema oferece estas vantagens -

  • Promove a comunicação eficaz entre os membros da equipe

  • Permite a análise do problema em questão

  • Atua como modelo para codificação

  • Auxilia na depuração

  • Torna-se parte da documentação do software para referência futura durante a fase de manutenção

Estas são as características de um algoritmo bom e correto -

  • Tem um conjunto de entradas

  • As etapas são definidas exclusivamente

  • Tem um número finito de etapas

  • Produz a saída desejada

Algoritmos de exemplo

Vamos primeiro dar um exemplo de uma situação da vida real para a criação de algoritmos. Aqui está o algoritmo para ir ao mercado comprar uma caneta.

A etapa 4 neste algoritmo é em si uma tarefa completa e um algoritmo separado pode ser escrito para ela. Vamos agora criar um algoritmo para verificar se um número é positivo ou negativo.

Flowcharté uma representação diagramática da sequência de etapas lógicas de um programa. Os fluxogramas usam formas geométricas simples para representar processos e setas para mostrar relacionamentos e fluxo de processo / dados.

Símbolos de fluxograma

Aqui está um gráfico para alguns dos símbolos comuns usados ​​no desenho de fluxogramas.

Símbolo Nome do Símbolo Objetivo
Iniciar / Parar Usado no início e no final do algoritmo para mostrar o início e o fim do programa.
Processo Indica processos como operações matemáticas.
Entrada / Saída Usado para denotar entradas e saídas do programa.
Decisão Significa declarações de decisão em um programa, em que a resposta geralmente é Sim ou Não.
Seta Mostra relações entre diferentes formas.
Conector na página Conecta duas ou mais partes de um fluxograma, que estão na mesma página.
Conector fora da página Conecta duas partes de um fluxograma que estão espalhadas em páginas diferentes.

Diretrizes para desenvolver fluxogramas

Estes são alguns pontos a serem considerados ao desenvolver um fluxograma -

  • O fluxograma pode ter apenas um símbolo de início e um de parada

  • Os conectores na página são referenciados usando números

  • Conectores fora da página são referenciados usando alfabetos

  • O fluxo geral de processos é de cima para baixo ou da esquerda para a direita

  • As setas não devem se cruzar

Fluxogramas de exemplo

Aqui está o fluxograma para ir ao mercado comprar uma caneta.

Aqui está um fluxograma para calcular a média de dois números.

Como você sabe, o computador não possui inteligência própria; simplesmente segue oinstructions fornecido pelo usuário. Instructionssão os blocos de construção de um programa de computador e, portanto, de um software. Dar instruções claras é crucial para construir um programa de sucesso. Como programador ou desenvolvedor de software, você deve adquirir o hábito de escrever instruções claras. Aqui estão duas maneiras de fazer isso.

Clareza de Expressões

Expressão em um programa é uma seqüência de operadores e operandos para fazer uma computação aritmética ou lógica. Aqui estão alguns exemplos de expressões válidas -

  • Comparando dois valores
  • Definindo uma variável, objeto ou classe
  • Cálculos aritméticos usando uma ou mais variáveis
  • Recuperando dados do banco de dados
  • Atualizando valores no banco de dados

Escrever expressões inequívocas é uma habilidade que deve ser desenvolvida por cada programador. Aqui estão alguns pontos a serem mantidos em mente ao escrever tais expressões -

Resultado inequívoco

A avaliação da expressão deve dar um resultado bem definido. Por exemplo, operadores unários devem ser usados ​​com cautela.

Evite expressões complexas

Não tente alcançar muitas coisas em uma única expressão. Divida em duas ou mais expressões no momento em que as coisas começarem a ficar complicadas.

Simplicidade de instruções

Não é apenas para computadores que você precisa escrever instruções claras. Qualquer um que ler o programa mais tarde (até você!) Deve ser capaz de entender o que a instrução está tentando alcançar. É muito comum para os programadores não pegarem o jeito de seus próprios programas quando os revisam depois de algum tempo. Isso indica que a manutenção e modificação de tais programas seriam bastante difíceis.

Escrever instruções simples ajuda a evitar esse problema. Aqui estão algumas dicas para escrever instruções simples -

  • Avoid clever instructions - Instruções inteligentes podem não parecer assim mais tarde se ninguém for capaz de entendê-las corretamente.

  • One instruction per task - Tentar fazer mais de uma coisa por vez complica as instruções.

  • Use standards- Cada idioma tem seus padrões, siga-os. Lembre-se de que você não está trabalhando sozinho no projeto; siga os padrões e diretrizes do projeto para codificação.

Neste capítulo, abordaremos como escrever um bom programa. Mas antes de fazermos isso, vamos ver quais são as características de um bom programa -

  • Portable- O programa ou software deve ser executado em todos os computadores do mesmo tipo. Por mesmo tipo, queremos dizer que um software desenvolvido para computadores pessoais deve ser executado em todos os PCs. Ou um software escrito para tablets deve ser executado em todos os tablets com as especificações corretas.

  • Efficient- Um software que realiza as tarefas atribuídas rapidamente é considerado eficiente. Otimização de código e otimização de memória são algumas das maneiras de aumentar a eficiência do programa.

  • Effective- O software deve auxiliar na solução do problema em questão. Um software que faz isso é considerado eficaz.

  • Reliable - O programa deve fornecer a mesma saída sempre que o mesmo conjunto de entradas for fornecido.

  • User friendly - A interface do programa, links e ícones clicáveis ​​etc. devem ser fáceis de usar.

  • Self-documenting - Qualquer programa ou software cujos nomes de identificador, nomes de módulo, etc. podem se descrever devido ao uso de nomes explícitos.

Aqui estão algumas maneiras pelas quais bons programas podem ser escritos.

Nomes de identificadores adequados

Um nome que identifica qualquer variável, objeto, função, classe ou método é chamado de identifier. Dar nomes de identificadores adequados torna o programa autodocumentado. Isso significa que o nome do objeto dirá o que ele faz ou quais informações ele armazena. Vamos dar um exemplo desta instrução SQL:

Veja a linha 10. Diz a qualquer pessoa que esteja lendo o programa que a identificação, o nome e o número da lista de um aluno devem ser selecionados. Os nomes das variáveis ​​tornam isso autoexplicativo. Estas são algumas dicas para criar nomes de identificadores adequados -

  • Use as diretrizes de linguagem

  • Não hesite em dar nomes longos para manter a clareza

  • Use letras maiúsculas e minúsculas

  • Não dê o mesmo nome a dois identificadores, mesmo se a linguagem permitir

  • Não dê os mesmos nomes a mais de um identificador, mesmo que eles tenham escopo mutuamente exclusivo

Comentários

Na imagem acima, observe a linha 8. Ela informa ao leitor que as próximas linhas de código recuperarão a lista de alunos cujo boletim será gerado. Esta linha não faz parte do código, mas é fornecida apenas para tornar o programa mais amigável.

Essa expressão que não é compilada, mas escrita como uma nota ou explicação para o programador é chamada de comment. Veja os comentários no seguinte segmento do programa. Os comentários começam com //.

Os comentários podem ser inseridos como -

  • Prólogo ao programa para explicar seu objetivo

  • No início e / ou final dos blocos lógicos ou funcionais

  • Tome nota sobre cenários especiais ou exceções

Você deve evitar adicionar comentários supérfluos, pois isso pode ser contraproducente ao interromper o fluxo do código durante a leitura. O compilador pode ignorar comentários e indentações, mas o leitor tende a ler cada um deles.

Recuo

A distância do texto da margem esquerda ou direita é chamada indent. Nos programas, a indentação é usada para separar blocos de código separados logicamente. Aqui está um exemplo de segmento de programa recuado:

Como você pode ver, o programa indentado é mais compreensível. Fluxo de controle defor loop para if e de volta para foré muito claro. A indentação é especialmente útil no caso de estruturas de controle.

A inserção de espaços em branco ou linhas também faz parte do recuo. Aqui estão algumas situações onde você pode e deve usar recuo -

  • Linhas em branco entre blocos lógicos ou funcionais de código dentro do programa

  • Espaços em branco ao redor dos operadores

  • Guias no início de novas estruturas de controle

Identificar e remover erros de um programa ou software é chamado debugging. A depuração é idealmente parte do processo de teste, mas na realidade é feita em todas as etapas da programação. Os codificadores devem depurar o menor de seus módulos antes de prosseguir. Isso diminui o número de erros gerados durante a fase de teste e reduz significativamente o tempo e o esforço do teste. Vejamos os tipos de erros que podem surgir em um programa.

Erros de sintaxe

Syntax errorssão os erros gramaticais em um programa. Cada linguagem tem seu próprio conjunto de regras, como criar identificadores, escrever expressões, etc. para escrever programas. Quando essas regras são violadas, os erros são chamadossyntax errors. Muitos modernosintegrated development environmentspode identificar os erros de sintaxe conforme você digita seu programa. Caso contrário, será mostrado quando você compilar o programa. Vamos dar um exemplo -

Neste programa, a variável prod não foi declarada, o que é gerado pelo compilador.

Erros Semânticos

Semantic errors também são chamados logical errors. A instrução não tem erros de sintaxe, portanto, será compilada e executada corretamente. No entanto, ele não dará a saída desejada porque a lógica não está correta. Vamos dar um exemplo.

Observe a linha 13. Aqui o programador deseja verificar se o divisor é 0, para evitar a divisão por 0. No entanto, em vez de usar o operador de comparação ==, o operador de atribuição = foi usado. Agora, toda vez que a expressão “if” for avaliada como verdadeira e o programa dará saída como “Você não pode dividir por 0”. Definitivamente não era o que se pretendia !!

Erros lógicos não podem ser detectados por nenhum programa; eles têm que ser identificados pela própria programadora quando a saída desejada não é alcançada.

Erros de tempo de execução

Os erros de tempo de execução são erros que ocorrem durante a execução do programa. Isso significa que o programa não tem erros de sintaxe. Alguns dos erros de tempo de execução mais comuns que seu programa pode encontrar são -

  • Loop infinito
  • Divisão por '0'
  • Valor incorreto inserido pelo usuário (digamos, string em vez de inteiro)

Otimização de Código

Qualquer método pelo qual o código é modificado para melhorar sua qualidade e eficiência é chamado code optimization. Code qualitydetermina a vida útil do código. Se o código pode ser usado e mantido por um longo período de tempo, transportado de produto para produto, sua qualidade é considerada alta e tem uma vida mais longa. Ao contrário, se um trecho de código pode ser usado e mantido apenas por curtos períodos, digamos até que uma versão seja válida, ele é considerado de baixa qualidade e tem vida curta.

A confiabilidade e a velocidade de um código determinam code efficiency. A eficiência do código é um fator importante para garantir o alto desempenho de um software.

Existem duas abordagens para otimização de código -

  • Intuition based optimization (IBO)- Aqui o programador tenta otimizar o programa com base em sua própria habilidade e experiência. Isso pode funcionar para programas pequenos, mas falha terrivelmente à medida que a complexidade do programa aumenta.

  • Evidence based optimization (EBO)- Aqui, ferramentas automatizadas são usadas para descobrir gargalos de desempenho e, em seguida, as partes relevantes são otimizadas de acordo. Cada linguagem de programação tem seu próprio conjunto de ferramentas de otimização de código. Por exemplo, PMD, FindBug e Clover são usados ​​para otimizar o código Java.

O código é otimizado para tempo de execução e consumo de memória porque o tempo é escasso e a memória cara. Tem que haver um equilíbrio entre os dois. E setime optimization aumenta a carga na memória ou memory optimization torna o código mais lento, o propósito da otimização será perdido.

Otimização do tempo de execução

Otimizar o código para o tempo de execução é necessário para fornecer um serviço rápido aos usuários. Aqui estão algumas dicas para otimização do tempo de execução -

  • Use comandos que possuem otimização de tempo de execução integrada

  • Use switch em vez da condição if

  • Minimize chamadas de função dentro de estruturas de loop

  • Otimize as estruturas de dados usadas no programa

Otimização de Memória

Como você sabe, dados e instruções consomem memória. Quando dizemos dados, também se refere a dados provisórios que são o resultado de expressões. Também precisamos manter um registro de quantas instruções estão compondo o programa ou módulo que estamos tentando otimizar. Aqui estão algumas dicas paramemory optimization -

  • Use comandos com otimização de memória embutida

  • Manter o uso de variáveis ​​que precisam ser armazenadas em registros no mínimo

  • Evite declarar variáveis ​​globais dentro de loops que são executados muitas vezes

  • Evite usar funções intensivas de CPU, como sqrt ()

Qualquer texto escrito, ilustração ou vídeo que descreva um software ou programa para seus usuários é denominado program or software document. O usuário pode ser qualquer um, desde um programador, analista de sistema e administrador até o usuário final. Em vários estágios de desenvolvimento, vários documentos podem ser criados para diferentes usuários. De fato,software documentation é um processo crítico no processo geral de desenvolvimento de software.

Na programação modular, a documentação torna-se ainda mais importante porque diferentes módulos do software são desenvolvidos por diferentes equipes. Se qualquer pessoa que não seja a equipe de desenvolvimento quiser ou precisar entender um módulo, uma documentação boa e detalhada tornará a tarefa mais fácil.

Estas são algumas diretrizes para a criação dos documentos -

  • A documentação deve ser do ponto de vista do leitor

  • O documento deve ser inequívoco

  • Não deve haver repetição

  • Os padrões da indústria devem ser usados

  • Os documentos devem ser sempre atualizados

  • Qualquer documento desatualizado deve ser eliminado após o devido registro da eliminação

Vantagens da Documentação

Estas são algumas das vantagens de fornecer documentação do programa -

  • Mantém o controle de todas as partes de um software ou programa

  • A manutenção é mais fácil

  • Outros programadores além do desenvolvedor podem compreender todos os aspectos do software

  • Melhora a qualidade geral do software

  • Auxilia no treinamento do usuário

  • Garante a descentralização do conhecimento, cortando custos e esforços caso as pessoas saiam do sistema abruptamente

Documentos de exemplo

Um software pode ter muitos tipos de documentos associados a ele. Alguns dos mais importantes incluem -

  • User manual - Descreve instruções e procedimentos para usuários finais usarem os diferentes recursos do software.

  • Operational manual - Enumera e descreve todas as operações realizadas e suas interdependências.

  • Design Document- Oferece uma visão geral do software e descreve os elementos de design em detalhes. Ele documenta detalhes comodata flow diagrams, entity relationship diagramsetc.

  • Requirements Document- Possui uma lista de todos os requisitos do sistema, bem como uma análise de viabilidade dos requisitos. Pode ter casos de usuários, cenários da vida real, etc.

  • Technical Documentation - É uma documentação dos componentes de programação reais, como algoritmos, fluxogramas, códigos de programa, módulos funcionais, etc.

  • Testing Document - Ele registra plano de teste, casos de teste, plano de validação, plano de verificação, resultados de teste, etc. O teste é uma fase de desenvolvimento de software que precisa de documentação intensiva.

  • List of Known Bugs- Todo software tem bugs ou erros que não podem ser removidos porque foram descobertos muito tarde ou são inofensivos ou exigirão mais esforço e tempo do que o necessário para serem corrigidos. Esses bugs são listados com a documentação do programa para que possam ser removidos posteriormente. Também auxiliam os usuários, implementadores e pessoal de manutenção caso o bug seja acionado.

Program maintenance é o processo de modificação de um software ou programa após a entrega para alcançar qualquer um desses resultados -

  • Erros corretos
  • Melhorar o desempenho
  • Adicionar funcionalidades
  • Remova partes obsoletas

Apesar da percepção comum de que a manutenção é necessária para corrigir erros que surgem depois que o software é lançado, na realidade, a maior parte do trabalho de manutenção envolve a adição de recursos menores ou principais aos módulos existentes. Por exemplo, alguns novos dados são adicionados a um relatório, um novo campo adicionado aos formulários de entrada, código a ser modificado para incorporar mudanças nas leis governamentais, etc.

Tipos de Manutenção

As atividades de manutenção podem ser categorizadas em quatro títulos -

  • Corrective maintenance- Aqui, os erros que surgem após a implementação no local são corrigidos. Os erros podem ser apontados pelos próprios usuários.

  • Preventive maintenance - As modificações feitas para evitar erros no futuro são chamadas de manutenção preventiva.

  • Adaptive maintenance- Mudanças no ambiente de trabalho às vezes requerem modificações no software. Isso é chamado de manutenção adaptativa. Por exemplo, se a política educacional do governo muda, as mudanças correspondentes devem ser feitas no módulo de processamento de resultados do aluno do software de gestão escolar.

  • Perfective maintenance- As alterações feitas no software existente para incorporar novos requisitos do cliente são chamadas de manutenção perfectiva. O objetivo aqui é estar sempre atualizado com as tecnologias mais recentes.

Ferramentas de Manutenção

Os desenvolvedores e programadores de software usam muitas ferramentas para ajudá-los na manutenção do software. Aqui estão alguns dos mais usados ​​-

  • Program slicer - seleciona uma parte do programa que seria afetada pela mudança

  • Data flow analyzer - rastreia todos os fluxos de dados possíveis no software

  • Dynamic analyzer - rastreia o caminho de execução do programa

  • Static analyzer - permite a visualização geral e o resumo do programa

  • Dependency analyzer - auxilia na compreensão e análise da interdependência das diferentes partes do programa