Como configurar um Firewall com o UFW

Pré-requisitos

Para seguir este tutorial, será necessário:

O UFW vem instalado por padrão no Ubuntu. Se ele tiver sido desinstalado por algum motivo, você pode instalá-lo com sudo apt install ufw.

Passo 1 — Usando o IPv6 com o UFW (Opcional)

Este tutorial foi escrito tendo o IPv4 em mente, mas funcionará também com o IPv6, contanto que você o habilite. Se seu servidor Ubuntu tiver o IPv6 habilitado, certifique-se de que o UFW esteja configurado para dar suporte ao IPv6, para que ele gerencie as regras de firewall do IPv6, além das regras do IPv4. Para fazer isso, abra a configuração UFW com o nano ou seu editor favorito.

sudo nano /etc/default/ufw

Então, certifique-se de que o valor IPV6 seja yes. Deve se parecer com isto: /etc/default/ufw excerpt

IPV6=yes

Salve e feche o arquivo. Agora, quando o UFW estiver habilitado, ele será configurado para escrever regras de firewall para ambos IPv4 e IPv6. No entanto, antes de habilitar o UFW, nós vamos querer garantir que seu firewall esteja configurado para permitir que você se conecte via SSH. Vamos começar configurando as políticas padrão.

Passo 2 — Configurando as políticas padrão

Se você estiver apenas começando com seu firewall, as primeiras regras a definir são suas políticas padrão. Essas regras controlam a maneira de lidar com tráfego que não seja claramente compatível com quaisquer outras regras. Por padrão, o UFW é configurado para negar todas as conexões de entrada e permitir todas as conexões de saída. Isso significa que qualquer um que tentasse acessar o seu servidor não conseguiria conectar-se, ao passo que os aplicativos dentro do servidor conseguiriam alcançar o mundo exterior.

Vamos retornar as regras do seu UFW para as configurações padrão, para que possamos ter certeza de que você conseguirá acompanhar este tutorial. Para definir os padrões usados pelo UFW, utilize estes comandos:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Esses comandos configuram os padrões para negar as conexões de entrada e permitir as conexões de saída. Esses padrões do firewall poderiam suprir as necessidades de um computador pessoal Porém, os servidores normalmente precisam responder às solicitações que chegam de usuários externos. Vamos verificar isso a seguir.

Passo 3 — Permitindo as conexões via protocolo SSH

Se nós habilitássemos nosso firewall UFW agora, ele negaria todas as conexões de entrada. Isso significa que precisaremos criar regras que permitam de maneira explícita as conexões de entrada legítimas — conexões SSH ou HTTP, por exemplo — se quisermos que nosso servidor responda a esses tipos de pedidos. Se você estiver usando um servidor na nuvem, você provavelmente irá querer permitir conexões de entrada via protocolo SSH para que você consiga se conectar e gerenciar o seu servidor.

Para configurar seu servidor para permitir as conexões de entrada via SSH, você pode utilizar este comando:

sudo ufw allow ssh

Esse procedimento criará regras do firewall que permitirão todas as conexões na porta 22, que é a porta na qual o SSH daemon escuta por padrão. O UFW sabe o que a porta allow ssh significa porque ela está listada como um serviço no arquivo /etc/services.

No entanto, podemos realmente escrever a regra equivalente, especificando a porta em vez do nome do serviço. Por exemplo, este comando funciona de forma semelhante ao anterior:

sudo ufw allow 22

Se você configurou seu SSH daemon para usar uma porta diferente, você terá que especificar a porta apropriada. Por exemplo, se seu servidor SSH estiver escutando na porta 2222, você pode usar este comando para permitir as conexões naquela porta:

sudo ufw allow 2222

Agora que seu firewall está configurado para permitir as conexões de entrada via SSH, podemos habilitá-lo.

Passo 4 — Habilitando o UFW

Para habilitar o UFW, utilize este comando:

sudo ufw enable

Você receberá um aviso que diz que o comando pode interromper conexões via SSH existentes. Nós já configuramos uma regra de firewall que permite conexões via SSH, então tudo bem continuar. Responda ao prompt com y e tecle ENTER.

O firewall agora está ativo. Execute o comando sudo ufw status verbose para ver as regras que foram definidas. O resto deste tutorial tratará de como usar o UFW em mais detalhes, como, por exemplo, permitir ou negar diferentes tipos de conexões.

Passo 5 — Permitindo outras conexões

Neste ponto, você deve permitir todas as outras conexões às quais seu servidor precisa responder. As conexões que você deve permitir dependem das suas necessidades específicas. Felizmente, você já sabe escrever regras que permitem conexões baseadas em um nome de serviço ou porta; já fizemos isso para o SSH na porta 22. Você também pode fazer isso para:

  • O HTTP na porta 80, que é a porta que os servidores Web não criptografados utilizam, usando sudo ufw allow http ou sudo ufw allow 80
  • O HTTPS na porta 443, que é a porta que os servidores Web criptografados utilizam, usando sudo ufw allow https ou sudo ufw allow 443

Há várias outras maneiras de permitir outras conexões, além de especificar uma porta ou serviço conhecido.

Faixas de portas específicas

Você pode especificar faixas de portas com o UFW. Alguns aplicativos usam várias portas, em vez de uma única porta.

Por exemplo, para permitir conexões via protocolo X11, que usam as portas 60006007, utilize esses comandos:

sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp

Ao especificar as faixas de porta com o UFW, você deve especificar o protocolo (tcp ou udp) para o qual as regras devem aplicar-se. Nós não mencionamos isso antes porque não especificar o protocolo automaticamente permite ambos os protocolos, o que é OK na maioria dos casos.

Endereços IP específicos

Ao trabalhar com o UFW, você também pode especificar endereços IP. Por exemplo, se quiser permitir conexões de um endereço IP específico, como um endereço IP de trabalho ou domicílio de 203.0.113.4, você precisa especificar from, então o endereço IP:

sudo ufw allow from 203.0.113.4

Você também pode especificar uma porta específica na qual o endereço IP tem permissão para se conectar, adicionando to any port seguido do número da porta. Por exemplo, se quiser permitir que o endereço 203.0.113.4 se conecte à porta 22 (SSH), utilize este comando:

sudo ufw allow from 203.0.113.4 to any port 22

Sub-redes

Se você quiser permitir uma sub-rede de endereços IP, você pode fazer isso usando uma notação CIDR para especificar uma máscara de rede. Por exemplo, se você quiser permitir todos os endereços IP na faixa de 203.0.113.1 a 203.0.113.254, você pode usar este comando:

sudo ufw allow from 203.0.113.0/24

De maneira similar, você também pode especificar a porta de destino na qual a sub-rede 203.0.113.0/24 tem permissão para se conectar. Novamente, nós vamos usar a porta 22 (SSH) como um exemplo:

sudo ufw allow from 203.0.113.0/24 to any port 22

Conexões a uma Interface de Rede Específica

Se você quiser criar uma regra de firewall que se aplique apenas a uma interface de rede específica, você pode fazer isso especificando “allow in on” seguido do nome da interface de rede.

Você pode querer verificar suas interfaces de rede antes de continuar. Para fazer isso, utilize este comando:

ip addr

Output Excerpt2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .

O resultado destacado indica os nomes de interfaces de rede. Normalmente, elas recebem nomes como eth0 ou enp3s2.

Então, se o seu servidor tiver uma interface de rede pública chamada eth0, você pode permitir o tráfego HTTP (porta 80) nela, usando este comando:

sudo ufw allow in on eth0 to any port 80

Fazer isso permitiria que seu servidor recebesse pedidos HTTP da internet pública.

Ou, se você quiser que seu servidor de banco de dados MySQL (porta 3306) escute conexões na interface de rede privada eth1, por exemplo, você pode usar este comando:

sudo ufw allow in on eth1 to any port 3306

Isso permitiria que outros servidores na sua rede privada se conectassem ao seu banco de dados MySQL.

Passo 6 — Negando conexões

Se você não tiver mudado a política padrão para conexões de entrada, o UFW está configurado para negar todas as conexões de entrada. Geralmente, isso simplifica o processo de criação de uma política de firewall segura ao exigir que você crie regras que permitam explicitamente portas e endereços IP específicos.

No entanto, algumas vezes você irá querer negar conexões específicas baseadas no endereço IP ou na sub-rede da origem, talvez porque você saiba que seu servidor está sendo atacado a partir daí. Além disso, se você quisesse alterar sua política de entrada padrão para permitir (allow) (o que não é recomendado), você precisaria criar regras para negar (deny) quaisquer serviços ou endereços IP para os quais você não quisesse permitir conexões.

Para escrever regras de deny, você pode usar os comandos descritos acima, substituindo allow por deny.

Por exemplo, para negar conexões HTTP, você pode usar este comando:

sudo ufw deny http

Ou se você quiser negar todas as conexões do endereço 203.0.113.4 você pode usar este comando:

sudo ufw deny from 203.0.113.4

Agora, vamos ver como excluir regras.

Passo 7 — Excluindo regras

Saber como excluir regras do firewall é tão importante quanto saber como criá-las. Há duas maneiras diferentes para especificar quais regras excluir: pelo número da regra ou pela regra em si (semelhante ao modo como as regras foram especificadas quando foram criadas). Vamos começar com o método **excluir pelo número **da regra porque é mais fácil.

Pelo número da regra

Se você estiver usando o número da regra para excluir regras do firewall, a primeira coisa que você vai querer fazer é obter uma lista das regras do seu firewall. O comando status do UFW tem uma opção para mostrar números ao lado de cada regra, como demonstrado aqui:

sudo ufw status numbered

Numbered Output:Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    15.15.15.0/24
[ 2] 80                         ALLOW IN    Anywhere

Se decidirmos que queremos excluir a regra 2, aquela que permite conexões na porta 80 (HTTP), podemos especificar isso em um comando delete do UFW desta forma:

sudo ufw delete 2

Isso mostraria um prompt de confirmação e então excluiria a regra 2, que permite conexões HTTP. Note que se você tivesse o IPv6 habilitado, você iria querer excluir a regra correspondente ao IPv6 também.

Pela regra

A alternativa para os números das regras é especificar a regra propriamente dita a ser excluída. Por exemplo, se quiser remover a regra allow http, você pode escrever desta forma:

sudo ufw delete allow http

Você também poderia especificar a regra por allow 80, em vez de pelo nome do serviço:

sudo ufw delete allow 80

Esse método irá excluir as regras do IPv4 e do IPv6, se houver.

Passo 8 — Verificando o status e as regras do UFW

A qualquer momento, você pode verificar o status do UFW com este comando:

sudo ufw status verbose

Se o UFW estiver desabilitado – o que acontece por padrão, você verá algo como isso:

OutputStatus: inactive

Se o UFW estiver ativo – o que deve ser o caso se você tiver seguido o Passo 3 – o resultado dirá que ele está ativo e listará quaisquer regras que estejam definidas. Por exemplo, se o firewall estiver configurado para permitir conexões via SSH (porta 22) de qualquer lugar, o resultado poderia parecer com este:

OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere

Use o comando status, se quiser verificar como o UFW configurou o firewall.

Passo 9 — Desabilitando ou redefinindo o UFW (opcional)

Se você decidir que não quer usar o UFW, você pode desativá-lo com este comando:

sudo ufw disable

Quaisquer regras que você tenha criado com o UFW já não estarão mais ativas. Você sempre poderá executar sudo ufw enable se precisar ativá-lo mais tarde.

Se você já tiver regras do UFW configuradas, mas decidir que quer começar novamente, você pode usar o comando de redefinição:

sudo ufw reset

Isso irá desabilitar o UFW e excluir quaisquer regras que tiverem sido definidas anteriormente. Lembre-se de que as políticas padrão não irão voltar para suas configurações originais se, em algum momento, você as tiver alterado. Isso deve dar a você um novo começo com o UFW.

Conclusão

Seu firewall agora está configurado para permitir (pelo menos) conexões via SSH. Certifique-se de permitir outras conexões de entrada que seu servidor, ao mesmo tempo em que limita quaisquer conexões desnecessárias, para que seu servidor seja funcional e seguro.

Para aprender sobre mais configurações comuns do UFW, verifique o tutorial Fundamentos do UFW: regras comuns de firewall e comandos.

Fonte: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-18-04-pt

Instalação de Servidor Lamp para Ubuntu

How to

How to Install LAMP Apache, MySQL, PHP in Ubuntu 20.04. In this guide you will learn how to install Apache2, MySQL and PHP 7.4.

You will also install some common PHP extensions and adjust the PHP configurations. Finally you will secure your setup with Let’s Encrypt SSL and configure HTTPS redirection.

This setup is tested on Google cloud, so it will work on all cloud hosting services like AWS, Azure or any VPS or any dedicated servers running Ubuntu 20.04.

Prerequisites

Root access to your server or a sudo user.

Step 1: Setup Initialization

Start by updating the packages to the latest version available using the following command.

sudo apt update
sudo apt upgrade

Once you have updated the setup you can start the setup.
Step 2: Install Apache

Install Apache using the following command.

sudo apt install apache2

This will install apache2 and all required dependencies.
Step 3: Setup Firewall

Now you can set up Uncomplicated Firewall (UFW) with Apache to allow public access on default web ports for HTTP and HTTPS

sudo ufw app list

You will see all listed applications.

Output
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH

Apache: This profile opens port 80 (normal, unencrypted web traffic)
Apache Full: This profile opens both port 80 (normal, unencrypted web traffic) and port 443 (TLS/SSL encrypted traffic)
Apache Secure: This profile opens only port 443 (TLS/SSL encrypted traffic)
OpenSSH: This profile opens port 22 for SSH access.

If you are not going to use SSL you need to enable only the Apache profile.

Now we will enable Apache Full.

sudo ufw allow ‘Apache Full’

With this command you can view the status of UFW.

sudo ufw status

You will see the output as follows.

Output
Status: active
To Action From
— —— —-
Apache Full ALLOW Anywhere
OpenSSH ALLOW Anywhere
Apache Full (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)

Step: 4 Check Apache Installation

Once Apache is installed is is started automatically and already be up and running.

Every process in Apache is managed with the systemctl command. Check the status of Apache with the following command.

sudo systemctl status apache2

Output
● apache2.service – The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Tue 2020-01-06 03:59:34 UTC; 5min ago
Main PID: 10617 (apache2)
Tasks: 55 (limit: 667)
CGroup: /system.slice/apache2.service
├─10617 /usr/sbin/apache2 -k start
├─10619 /usr/sbin/apache2 -k start
└─10620 /usr/sbin/apache2 -k start
Jan 06 03:59:34 apache systemd[1]: Starting The Apache HTTP Server…
Jan 06 03:59:34 apache systemd[1]: Started The Apache HTTP Server.

Now we have Apache installed and configured Firewall.
Step 5: Install MySQL

In Ubuntu 20.04 MySQL 8 is included by default in the Focal Fossa repositories, so you can install it easily using the apt install command.

sudo apt install mysql-server

Once the installation is completed, the MySQL service will start automatically. To verify that the MySQL server is running, type:

sudo service mysql status

The output should show that the service is enabled and running:

● mysql.service – MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-05-05 07:13:18 UTC; 1min 4s ago
Main PID: 3333 (mysqld)
Status: “Server is operational”
Tasks: 38 (limit: 2010)
Memory: 322.9M
CGroup: /system.slice/mysql.service
└─3333 /usr/sbin/mysqld

Step 6: Secure MySQL

MySQL installation comes with a script named mysql_secure_installation that allows you to easily improve the MySQL server security.

sudo mysql_secure_installation

You will be asked to configure the VALIDATE PASSWORD PLUGIN which is used to test the strength of the MySQL users passwords and improve the security.

Press y if you want to set up the validate password plugin or any other key to move to the next step.

There are three levels of password validation policy, low, medium, and strong.

Enter 2 for strong password validation.

On the next prompt, you will be asked to set a password for the MySQL root user.

If you set up the validate password plugin, the script will show you the strength of your new password. Type y to confirm the password.

Next, you’ll be asked to remove the anonymous user, restrict root user access to the local machine, remove the test database, and reload privilege tables. You should answer y to all questions.
Step 7: Install PHP

By default Ubuntu 20.04 has the latest PHP 7.4 repository added. So you can install PHP using the following command.

sudo apt install php libapache2-mod-php php7.4-mysql php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip php7.4-intl -y

Once PHP is installed you can check the version using the following command.

php -v

Step 8: Configure PHP

Now we configure PHP for Web Applications by changing some values in php.ini file.

For PHP 7.4 with Apache the php.ini location will be in following directory.

Hit F6 for search inside the editor and update the following values for better performance.

upload_max_filesize = 32M
post_max_size = 48M
memory_limit = 256M
max_execution_time = 600
max_input_vars = 3000
max_input_time = 1000

Once you have modified your PHP settings you need to restart your Apache for the changes to take effect.
Step 9: Configure Apache

Disable default Apache configuration.

sudo a2dissite 000-default

Create website directories.

sudo mkdir -p /var/www/html/domainname/public

Setup correct permissions.

sudo chmod -R 755 /var/www/html/domainname
sudo chown -R www-data:www-data /var/www/html/domainname

Create a new virtual host configuration.

sudo nano /etc/apache2/sites-available/domainname.conf

Paste the following configurations in the new file.


ServerAdmin admin@domainname.com
ServerName domainname.com
ServerAlias www.domainname.com

 DocumentRoot /var/www/html/domainname/public

 <Directory /var/www/html/domainname/public>
     Options Indexes FollowSymLinks
     AllowOverride All
     Require all granted
 </Directory>

 ErrorLog ${APACHE_LOG_DIR}/error.log 
 CustomLog ${APACHE_LOG_DIR}/access.log combined 

Enable the new configuration.

sudo a2ensite domainname.conf

Step 10: Install Let’s Encrypt SSL

HTTPS is a protocol for secure communication between a server (instance) and a client (web browser). Due to the introduction of Let’s Encrypt, which provides free SSL certificates, HTTPS are adopted by everyone and also provides trust to your audiences.

sudo apt install python3-certbot-apache

Now we have installed Certbot by Let’s Encrypt for Ubuntu 20.04, run this command to receive your certificates.

sudo certbot –apache –agree-tos –redirect -m youremail@email.com -d domainname.com -d www.domainname.com

Select the appropriate option and hit Enter

This command will install Free SSL, configure redirection to HTTPS and restarts the Apache server.
Step 11: Renewing SSL Certificate

Certificates provided by Let’s Encrypt are valid for 90 days only, so you need to renew them often. So, let’s test the renewal feature using the following command.

sudo certbot renew –dry-run

This command will test the certificate expiry and configures the auto-renewable feature.
Step: 12: Test the Setup

Once you have done the able steps you can create a new test PHP file in your web directory.

sudo nano /var/www/html/domainname/public/info.php

Paste the below code inside the file.

<?php phpinfo();

Save the file.

Now go ahead and check your domain name with the info.php in the url (domainname.com/info.php).

You will see that your domain got redirected to HTTPS and see the PHP information details.

Conclusion

Now you have learned how to install LAMP stack Ubuntu 20.04.

Thanks for your time. If you face any problem or any feedback, please leave a comment below.

Fonte: https://www.cloudbooklet.com/how-to-install-lamp-apache-mysql-php-in-ubuntu-20-04/

Desenvolvimento de Softwares: O que é, Como Funciona e Dicas

O que é desenvolvimento de softwares?

Desenvolvimento de softwares é a atividade de criar programas de computação, executada por um desenvolvedor ou grupo de desenvolvedores.

Parece uma definição um tanto óbvia, não é mesmo? Mas você sabe como isso é feito ou, antes disso, o que é um software?

O software é um produto virtual, que consiste essencialmente em um conjunto de códigos – instruções escritas em determinada linguagem da computação.

Quando o usuário vai utilizar um software, porém, ele não enxerga códigos.

Isso porque essas instruções vão ser traduzidas pela tela do equipamento eletrônico e apresentadas de modo diferente ou até mesmo materializadas em ações em alguns tipos de aparelhos.

Os desenvolvedores (ou “devs”, no jargão da categoria) são programadores, ou seja, eles escrevem o programa a partir dos já referidos códigos.

Mas nem todo programador é desenvolvedor.

Porque essa alcunha é atribuída aos profissionais que participam de todo o processo de desenvolvimento de softwares.

Não basta, portanto, apenas escrever códigos.

O desenvolvedor precisa saber conduzir um projeto, desde a concepção, entendendo quais são as necessidades do cliente.

Um trabalho que envolve ouvir, colher informações, fazer protótipos, testar, ajustar, homologar e implementar.

O desenvolvimento de softwares é uma atividade complexa, que exige bastante conhecimento técnico.

Daí o alto valor agregado da função.

O que é um sistema computacional?

O software, ou programa, é uma das partes que compõem um sistema computacional. A outra é o hardware.

Enquanto o software é, como acabamos de explicar, uma sequência de instruções codificadas, o hardware é o dispositivo eletrônico que vai receber essas instruções e traduzi-las em um formato que seja útil para o usuário.

Dessa forma, o software é a parte lógica e o hardware a parte física, que serve como interface entre o código e o usuário.

Mas quando falamos em sistema computacional, a referência é ao conjunto de hardwares capaz de processar as informações de um software.

O sistema computacional tem o objetivo de dar suporte a serviços de automação de tarefas ou apoiar atividades dos usuários com o processamento de informações.

Como funciona o desenvolvimento de softwares?

Ao descrever o trabalho de um desenvolvedor, já deve ter ficado claro que o desenvolvimento de softwares é um processo complexo.

Ele envolve várias etapas entre a concepção do projeto – seja um projeto pessoal ou uma demanda recebida de um cliente – e a sua conclusão.

Também se relaciona, principalmente quando se trata de uma equipe de desenvolvedores, a uma metodologia de trabalho para a gestão do projeto.

Detalharemos esses assuntos – as etapas e metodologias usadas no desenvolvimento de software – mais à frente.

Nada disso teria utilidade sem o código em si. Só se pode dar vida a um software, portanto, com instruções escritas em uma determinada linguagem.

O que são essas linguagens? São padrões de instruções reconhecíveis em determinados sistemas e dispositivos.

Utilizando as instruções certas de determinada linguagem, é possível fazer a mágica de transformar palavras em ações ou outros elementos na tela de um computador, tablet ou smartphone.

Vale destacar que nem todos os ambientes aceitam as mesmas linguagens.

É como fazer turismo: em alguns países, só sabendo determinado idioma você vai conseguir se comunicar.

Principais linguagens do desenvolvimento de software

No parágrafo anterior, comparamos as linguagens de programação com idiomas falados em diferentes países do mundo, mas há uma distinção importante a ser feita.

As linguagens de que estamos falando aqui servem no mundo inteiro.

São os dispositivos e sistemas que não vão aceitar necessariamente todas as linguagens.

A questão é que, dentro de uma linguagem, os mesmos comandos serão utilizados no mundo todo para dar determinadas instruções.

Por isso, é bom que o programador tenha um conhecimento básico em inglês, pois esse é o idioma base na criação da sintaxe da programação.

Sem mais delongas, vamos agora apresentar algumas das linguagens mais usadas no mundo todo para o desenvolvimento de software.

Java

Uma das linguagens mais usadas no mundo, é muito utilizada em ambientes corporativos e para desenvolver aplicativos para Android em tablets e smartphones.

JavaScript

Não confunda com a linguagem Java. Essa é completamente diferente, muito utilizada principalmente no frontend, para criar interatividade em aplicações da web.

Python

É uma linguagem bastante recomendada para aqueles que estão começando a se aventurar no mundo da programação, por ser intuitiva, de fácil aprendizado e de código aberto.

C++

Uma variação da linguagem C bastante popular no desenvolvimento de softwares mais pesados, como games e sistemas de gestão integrados.

PHP

Linguagem utilizada principalmente no backend de sites, na integração entre as informações de uma página da web e um banco de dados MySQL.

Conheça os tipos de metodologias de desenvolvimento

As metodologias de desenvolvimento são conjuntos de práticas pensadas para coordenar o trabalho de criação de softwares.

Projetos relevantes, como mostramos antes, envolvem muitas etapas e muitas pessoas. Por isso, não podem ser conduzidos de modo aleatório.

É preciso coordenar quem faz o quê, quando, como e onde. E não basta definir tudo isso em uma reunião, ficar na palavra e deixar assim até o fim do projeto.

As etapas avançam e as necessidades mudam, tudo é muito dinâmico.

Nesse contexto entram as metodologias de desenvolvimento de software, para dar ordem ao modo como o trabalho será conduzido e acompanhado.

Claro que tudo deve ser planejado com antecedência: a metodologia utilizada, quem serão as pessoas responsáveis, quais os prazos, etc.

Seja qual for a metodologia escolhida, o trabalho envolve, basicamente, as seguintes figuras:

  • Desenvolvedores: aqueles que receberão os requisitos e construirão o software
  • Gerente de projeto: responsável por controlar o andamento do trabalho, fazendo o possível para que as entregas sigam dentro dos prazos planejados

Podemos dividir as metodologias entre tradicionais e ágeis.

Nas tradicionais, como a metodologia estruturada, modelo em cascata e programação orientada a objetos, o escopo é pouco flexível.

Por isso, elas têm dado lugar a metodologias ágeis, uma exigência dos tempos de transformação digital, em que é preciso ter flexibilidade, etapas menores e feedbacks e alinhamento constantes.

Principais etapas para o desenvolvimento de softwares

A seguir, vamos falar um pouco sobre as principais etapas de um processo de desenvolvimento de softwares.

Dependendo da metodologia utilizada, pode haver uma divisão diferente das etapas, mas todas as fases descritas abaixo são essenciais para começar e terminar um projeto.

Levantamento de Requisitos

Todo projeto de criação de um software deve começar por aqui.

Ser negligente nessa primeira etapa pode colocar todo o trabalho a perder.

O risco de alguma etapa posterior empacar porque os requisitos não foram levantados é grande.

O levantamento de requisitos existe para saber quais são as reais necessidades dos clientes.

Requisitos são condições, ou seja, exigências que determinam que o software precisará seguir determinados padrões e especificações.

Podem ser requisitos funcionais (o que o software deve fazer), requisitos de usabilidade ou questões de confiabilidade, portabilidade e segurança.

Não é exagero dizer que essa etapa é de responsabilidade compartilhada entre cliente e gerente de projeto.

Pois cabe ao cliente fazer suas exigências, mas aquele que coordenará a equipe de desenvolvedores também precisa se esforçar para compreender totalmente as necessidades e problemas a serem resolvidos de quem o está contratando.

Análise de Requisitos

Após o levantamento dos requisitos, a fase seguinte consiste em avaliá-los, com o intuito de analisar a viabilidade do trabalho.

Primeiro, é preciso escrutinar as informações recebidas.

Está tudo claro ou há erros, contradições, ambiguidades, dados incompletos ou requisitos ocultos nas entrelinhas?

A partir daí, a equipe analisa se é possível realizar o serviço dentro das condições estabelecidas.

É bom destacar que, nessa etapa, estão em avaliação apenas as condições técnicas.

Então, para seguir adiante, é preciso que a equipe seja capaz de desenvolver o software com excelência, considerando todos os requisitos levantados.

Pode acontecer também de os requisitos serem tais que tornam o trabalho inviável, por ser tecnicamente irrealizável ou por não valer a pena tamanho esforço.

A partir dessa avaliação, conversa-se novamente com o cliente para, se necessário, fazer os ajustes necessários na lista de requisitos.

Análise Financeira

Agora que já se sabe exatamente quais são os requisitos para o projeto e sua complexidade, chegou a hora de estimar os custos que estarão envolvidos no serviço.

Qual a quantidade de recursos financeiros e humanos necessários para desenvolver o software dentro das condições requisitadas?

Quanto maior a complexidade do projeto, maior serão o custo para o fornecedor e o preço cobrado ao contratante, é claro.

Afinal, demandará mais tempo e mão de obra mais qualificada.

Aqui, como na maioria das empresas, deve haver margem para negociação – quem sabe até a eliminação de determinados requisitos para que o preço fique mais baixo.

Quaisquer que sejam as condições negociadas, elas precisam ser documentadas, registradas em um contrato que será assinado pelas duas partes.

Será a garantia mútua, pois nele constarão as obrigações que terão, durante o projeto, tanto do prestador de serviço quanto do cliente.

Produção

A etapa de produção pode se dividir em várias, de acordo com a complexidade do projeto e metodologia escolhida para conduzi-lo.

O desenvolvimento de grandes sistemas e softwares costuma prever entregas em módulos.

Isso quer dizer que, em vez de concluir tudo de uma vez, são liberadas, testadas e aprovadas diferentes partes do projeto, aos poucos.

As metodologias ágeis também preveem a aprovação por partes, mesmo em projetos que não são tão complexos, o que ajuda a acelerar o aprendizado, amadurecer a relação com o cliente e gerar insights valiosos para o resto do projeto.

A fase de produção pode envolver um momento de arquitetura de software, com uma apresentação abstrata da solução que será desenvolvida.

Depois de aprovada essa arquitetura, parte-se para a codificação, fase na qual os desenvolvedores trabalham para dar luz ao programa.

Testes

Um projeto jamais vai para o ar ou para o mercado sem passar por um período de testes.

É preciso submeter os códigos à utilização de usuários que vão testar todas suas funções.

Essa é a hora de encontrar erros.

Uma dica para quem está começando: é impossível evitá-los. Sim, os erros vão sempre aparecer.

O segredo é testar bem todas as possibilidades antes de lançar o produto, para diminuir a probabilidade de encontrar esses erros após a implementação.

Por isso, os testes precisam emular o uso real da aplicação, colocando-se no lugar da pessoa para quem ela será destinada.

É importante testar também a usabilidade, o que deve ser feito com testadores especializados ou usuários reais, uma vez que os desenvolvedores já estarão com o “olhar viciado”.

Recomenda-se, ainda, documentar os testes.

Assim, caso surja, posteriormente, algum problema envolvendo uma funcionalidade já testada, haverá pistas a mais para encontrar a solução.

Implementação

Agora, sim, o projeto pode ser entregue.

Mas calma lá: ainda deve ocorrer mais uma etapa de testes, para se certificar de que tudo está funcionando da maneira correta.

A implementação também pode ocorrer em diferentes fases.

Dependendo da necessidade, pode haver sessões de treinamento para que o cliente aprenda a utilizar a solução que foi criada.

O contrato pode prever, ainda, o trabalho de manutenção futuro, caso sejam descobertos novos problemas com o passar do tempo.

Fonte: https://fia.com.br/blog/desenvolvimento-de-softwares/