Os fundamentos de software são definidos como os conceitos básicos,
princípios e elementos que ajudam no funcionamento, desenvolvimento e implementação de sistemas de software e programas de computador. Possuir esses conceitos básicos é essencial para criação e construção de software confiáveis e de alta qualidade, além de ajudar no entendimento de como os softwares funcionam. Nos últimos anos os fundamentos de softwares evoluíram consideravelmente devido pelo grande avanço tecnológico e a grande mudança na demanda da indústria de desenvolvimento de softwares e a nas industrias em geral. Os softwares foram criados na década de 1940, durante a segunda guerra mundial, para fins específicos, relacionados a questões militares e cientificas durante a guerra. Atualmente o desenvolvimento de softwares esta focado no desenvolvimento de tecnologias emergentes, como IAs, Blockchain, aprendizado de maquina e Internet das Coisas (IoT), além da segurança cibernética devido ao grande aumento da dependência de tecnologia no cotidiano das pessoas. Os fundamentos de software incluem e englobam diversos conceito e princípios para criação e funcionamento de programas de computador. Os principais fundamentos de software incluem: Linguagem de Programação: as linguagens de programação são utilizadas pelos desenvolvedores para escrever códigos-fontes que instruem o computador tarefas especificas, também são utilizadas para diversas outras coisas como codificação, compilação/interpretação, manipulação de dados, depuração, interpretação de logica, execução de programas e etc. Estruturas de Dado: Se referem a forma como os dados são organizados e armazenados no software. Escolher corretamente a estrutura de dados afeta significativamente o desempenho de um programa. Segurança de software: É um conjunto de técnicas, praticas e medidas implementadas para proteger um software contra vulnerabilidades, ameaças e ataque malicioso Gerenciamento de Projetos de Software: Engloba diversos métodos e praticas para o melhor planejamento e execução e monitoramento de projetos de desenvolvimento de software de forma mais eficiente.
Testes de Softwares: Os testes de softwares utilizam uma metodologia
para verificar se o software está em seu funcionamento correto e conforme o esperado atendo os requisitos propostos. Incluindo também diversos testes como testes unitários, teste de integração, teste de sistemas e etc. Arquitetura de softwares: Define a estrutura de geral do sistema, incluindo a organização de componentes e sua divisão em módulos, a interação entre eles e o principio de design que orientam sua construção. Para que os softwares sejam criados e distribuídos de forma legal e utilizados por outras pessoas, é necessário que se possua uma licença de software. A licença de software é um contrato legal que cria e estabelece os termos sob os quais os softwares podem ser utilizados, modificas e distribuídos. Quando a empresa não possui uma licença de software o código-fonte e os direitos autorais associados ao software são exclusivamente do criador original ou da empresa que o desenvolveu. Significando que outras pessoas não podem alterar, copiar ou distribuir o software a menos que haja uma licença ou contrato que permita essas ações. Quando o desenvolvedor desejar disponibilizar seu software para o uso e distribuição para terceiros, ele possuíra diversas licenças de softwares disponíveis para escolher como licenças de software aberto que permite o uso gratuito e até mesmo modificações e distribuições do software sob certas condições. Já outras licenças podem ser mais restritivas, permitindo o uso apenas para fins não comerciais e não permitindo medicações e redistribuições sem permissão explicita do detentor dos direitos do software. Atualmente existem diversas licenças como: Licença de código aberto: esse GNU General Public License (GPL): Esta é uma das licenças de código aberto mais populares e foi projetada para proteger a liberdade dos usuários de usar, pesquisar, modificar e distribuir software. Quaisquer modificações ou trabalhos derivados também devem ser licenciados sob a GPL. Licença MIT: Uma licença de código aberto que permite aos usuários usar, modificar, distribuir e sublicenciar este software sujeito aos termos da licença original e avisos de direitos autorais. Licença Apache: Outra licença que permite aos usuários usar, modificar, distribuir e sublicenciar o software. Também prevê a transferência expressa dos direitos de patente dos acionistas para os usuários. Licença BSD: É uma família de licenças com vários graus de permissividade. Em geral, você permite o uso, modificação e distribuição gratuitos do Software, desde que o aviso de direitos autorais original seja preservado. Mozilla Public License (MPL): Esta licença permite o uso, modificação e distribuição do software, mas também exige que todas as modificações sejam distribuídas sob a MPL. Licença proprietária: esse Licença comercial: software proprietário geralmente exige que o usuário adquira uma licença e os termos e condições específicos são definidos pelo fornecedor. Contrato de licença de usuário final (EULA): comumente usados para software de consumidor, um contrato de licença de usuário final estabelece os direitos e restrições concedidos ao usuário final ao instalar ou usar o software Licença de assinatura: Alguns softwares são fornecidos sob um modelo de assinatura no qual os usuários pagam uma taxa recorrente para acessar e usar o software durante o período de assinatura. dr. Software Livre Proprietário: Este tipo de licença permite que o usuário use o software gratuitamente, mas não fornece o código-fonte e a redistribuição pode ser restrita. Shareware: Shareware é distribuído gratuitamente com funcionalidade limitada e os usuários são encorajados a comprar uma versão completa com recursos adicionais ou funcionalidade ilimitada. Alem de possuirmos diversas licenças de software, também existem diversos tipos de software como: Software de sistema: Sistema operacional (como Windows, macOS e Linux): controla os recursos de hardware e fornece a interface por meio da qual um usuário interage com um computador.
Drivers (como drivers de impressora e drivers gráficos):
permitem a comunicação entre o hardware e o sistema operacional. Software de programação: Compilação: compilação de código-fonte escrito em uma linguagem de programação em código de máquina executável. Editor de Código: Um ambiente de desenvolvimento integrado (IDE) ou editor de texto para escrever e editar código. Programas de ajuda: Antivírus e Malware: Proteja seu sistema contra ameaças de vírus e malware. Ferramenta de backup: crie backups de dados para evitar a perda de informações. Compressor de arquivo: reduz o tamanho do arquivo para economizar espaço de armazenamento e facilitar a transferência. Software de comunicação: Navegador da Web: permite que você navegue na Internet. Cliente de e-mail: Um aplicativo para gerenciar e enviar e-mail. Mensagens Instantâneas: Facilita a comunicação em tempo real através de mensagens de texto, voz ou vídeo. Software de produtividade: Pacotes do Office (como Microsoft Office e LibreOffice): incluem aplicativos como processadores de texto, planilhas, apresentações e muito mais. Gerente de projetos: ajuda na organização e planejamento de projetos.
Software multimídia: Media Player: Reproduz áudio e vídeo
em vários formatos. Edição de imagens: permite a manipulação e edição de imagens. Editor de vídeo e áudio - para edição e criação de conteúdo multimídia. Programa de entretenimento: Jogos de computador: jogos eletrônicos que são usados para entretenimento e entretenimento. Software de segurança: Firewall: protege redes e sistemas contra acessos não autorizados. Software de criptografia: criptografa dados para garantir segurança e privacidade. Programas educacionais: Plataforma de Aprendizagem: Permite o acesso a cursos online e conteúdos educacionais. Programas Educacionais: Oferece atividades e recursos educacionais interativos.