Eu tive um usuário que me fez esta pergunta. Sabemos que os carros quebram, mas isso é devido a algo físico (a menos que o software esteja envolvido!).
Tentei responder que o software é uma indústria muito mais jovem, mas o usuário respondeu com "a indústria automobilística não se tornou muito mais estável e confiável com menos pessoas?".
Também tentei responder que o software é mais complexo, mas o usuário respondeu que existem milhares de peças que compõem um carro. As pessoas que projetam e fabricam carros geralmente apenas conhecem seus componentes muito bem, mas elas ainda acabam trabalhando juntas como resultado final.
Então, por que o software não é tão confiável quanto um carro?
quality
system-reliability
Alex Angas
fonte
fonte
Respostas:
A premissa da sua pergunta é simplesmente incorreta: o software não é "menos confiável" que um carro. Existem bilhões e bilhões de dispositivos por aí que executam software incorporado 24x7, por anos a fio, sem nenhum problema. Caramba, alguns deles estão em carros e controlam / monitoram o motor. Então, como o software pode ser menos confiável que um carro, se os carros dependem dele?
fonte
Projecto software e peças mecânicas.
É complexidade.
Porque existem milhões de "partes" no software moderno.
As peças de software são muito complicadas e possuem muito STATE. Uma peça mecânica não móvel não tem estado.
Uma parte móvel mecânica tem sua posição (uma variável).
Um programa que está sendo executado e usa 1Mb de RAM possui um milhão de bytes de estado. É muito mais estado do que qualquer sistema mecânico normal.
Haverá uma combinação de estados que nunca são testados porque ocorrem muito raramente. Em um sistema mecânico (como um carro), é fácil verificar se as peças mecânicas não se batem durante a operação. O software CAD mecânico que eu uso no trabalho faz isso automaticamente.
Se você construísse máquinas a partir de peças invisíveis e não tocáveis, e tivesse milhões de peças móveis que simplesmente perdiam uma da outra, seria como um programa simples.
Até o "olá mundo" é executado em um sistema operacional. Os sistemas antigos de 8 bits e os sistemas operacionais de minicomputadores eram bastante confiáveis porque eram simples.
Coisas como DLLs e bibliotecas compartilhadas são substituídas como parte de atualizações de vírus ou instalações de software e, em seguida, o programa de interesse não funciona. É como trocar o pneu do seu carro por um pneu de bicicleta. Alguns dos estados de borda da função da biblioteca interferem (não aja da maneira que o programa espera).
Programas escritos em linguagens como Java, que não permitem muitas interações não projetadas entre objetos (reutilização de ponteiro, estouros de limites de matriz) geralmente são bastante confiáveis quando você os faz funcionar.
Quando você usa sistemas operacionais com bibliotecas estáticas, uma vez que um programa funciona, ele continua funcionando (mas ainda terá muitas condições de borda, com base no tamanho do estado).
Dave Parnas escreve sobre como obter confiabilidade no software, diminuindo o estado do programa. O pessoal estrito da programação funcional está fazendo a mesma coisa forçando uma única atribuição estática.
fonte
É uma questão de escolha do consumidor.
Se os consumidores exigissem que o software fosse tão confiável quanto o meu Honda Civic (em oposição ao meu velho Ford Maverick), seria. Algumas organizações exigem software que seja confiável, e o adquirem, normalmente para software incorporado, às vezes para itens críticos de segurança, como missões espaciais e controle de tráfego aéreo. O software ainda não é perfeito, mas também não são carros.
No entanto, os clientes exigem outras qualidades em seus softwares e, na maioria das vezes, não estão dispostos a pagar por softwares possivelmente menos funcionais, certamente mais caros e enviados mais tarde apenas por serem mais confiáveis.
fonte
Se apenas um computador (e o software associado) fosse assim tão simples.
O computador tem um gigabyte de memória? Bilhões de chinelos? Um terabyte de disco? Trilhões de peças "móveis"?
O software pode ter 10s de milhares ou 100s de milhares de linhas de código individuais em execução. Além disso, muitos (ou mais) em testes de unidade e ferramentas.
Não. O argumento "os carros também são complexos" é um lixo. Software é muito, muito, muito mais complexo que um carro.
fonte
Os princípios que fazem os motores de combustão funcionarem e todos os componentes que compõem um carro não mudaram muito no século passado. Claro que houve melhorias evolutivas e carros híbridos, mas os componentes básicos são os mesmos. Você tem um motor, um trem de força, etc. Até carros-conceito e seu super caro e extremamente rápido Bugatti Veyron são construídos com a mesma estrutura básica. Em resumo, projetar um carro é um problema bem conhecido .
Compare isso com o desenvolvimento de software.
Em resumo, existem várias razões pelas quais um carro seria percebido como "mais confiável" que o software. Acabei de criar um casal.
fonte
Os carros são confiáveis. O mesmo acontece com a maioria dos softwares.
Mas ... carros personalizados e software personalizado, ambos têm seus problemas.
Qualquer entusiasta de carros de verdade, que tem seu muscle car modificado de 1970, conserta e mexe, e tem problemas e todos os tipos de problemas estúpidos que ele não teria tido se o tivesse deixado original. Mas ... então ele não teria o supercharger ...
fonte
Como o carro que você dirige foi fabricado várias vezes, o processo de construção é tão refinado que o mesmo carro pode ser fabricado em uma linha de produção repetidamente.
Se fosse um carro de ponta complexo e único construído do zero, uma vez que não seria tão confiável quanto, por exemplo, observe quanto maior a taxa de falhas nos carros de corrida de Fórmula 1. É comum que um ou dois se dividam por corrida.
O novo software é sempre único. O que os programadores codificam nunca foi codificado por eles antes. Obter uma qualidade realmente alta nesse cenário envolve um custo proibitivo para a maioria dos produtos. Todo novo software não trivial é efetivamente um protótipo.
Além disso, esse é um dos principais motivos pelos quais a aplicação de técnicas tradicionais de engenharia à engenharia de software é um desastre.
fonte
Eu poderia continuar, mas parece que meu navegador está prestes a travar ...
fonte
Na verdade, há uma razão muito simples.
Software que ganha dinheiro é um software que ganha participação de mercado. Frequentemente, a empresa que trouxer um pedaço de software ao mercado primeiro será a que obter a maior parte da participação de mercado, mesmo que o software não seja o melhor produto em seu mercado específico.
Conseqüentemente, o foco está em obter o software lançado mais cedo e imperfeito, em vez de mais tarde e perfeito.
fonte
Eu gosto da maioria das respostas até agora. Aqui está a minha opinião.
A falha do carro pode custar uma vida. Mesmo uma falha no veículo com risco de vida não representa um inconveniente altamente visível para o usuário. Falha no software significa apenas que alguma falta de suporte no suporte à produção terá que trabalhar horas extras. E se essa pessoa é um funcionário isento de tempo integral, então caramba, não é tão caro. De fato, a baixa qualidade e a má administração são recompensadas porque as horas extras gratuitas reduzem o custo da mão-de-obra por hora!
Obviamente, isso depende do tipo de software que está sendo usado (o software que alimenta sistemas de armas, aviônicos ou sistemas médicos também pode afetar vidas), mas um carro custa uma boa quantia de dinheiro e é usado com regularidade suficiente, o que diminui a confiabilidade. bastante tangível e doloroso. Falhas de software geralmente têm soluções alternativas.
Outro pensamento: os carros parecem confiáveis, mas têm custos de manutenção definidos que estão em andamento, mesmo que o carro esteja funcionando bem e, culturalmente, isso é aceito e até uma despesa orgulhosa das pessoas que se preocupam com seus veículos. O software, por outro lado, muitas vezes já está quebrado quando instalado e muitas vezes precisa mudar com o tempo, mas culturalmente, ninguém quer pagar pela manutenção.
fonte
Bem, os carros eram pouco confiáveis durante a maior parte de sua história, e há definitivamente uma curva de aprendizado. Os carros são produzidos em larga escala há cerca de 60 anos, enquanto o software só é produzido em larga escala por cerca de 20 a 25 anos. Em grande escala, quero dizer basicamente grande o suficiente para que as massas o compre / use e há um incentivo realmente grande para descobrir como aperfeiçoar o procedimento para criá-lo.
fonte
Eu gosto de pensar no carro como uma aplicação. Enquanto o sistema operacional é o caminho no qual o aplicativo é executado.
A interface entre estrada e carro está bem definida. Bem testado e amplamente verificado para compatibilidade com versões anteriores (o que é fácil, pois a interface é simples). Mas mesmo assim você tem alguns problemas de compatibilidade com versões anteriores. Os carros do tipo "Farrie" têm dificuldade em circular nas estradas do tipo "estradas de lama".
Mesmo assim, seu sistema operacional, assim como as estradas, precisa de manutenção constante. Pontes desaparecem. Os carros colocam correntes de neve e rasgam as estradas, como aplicativos corrompidos e danificam os discos e arquivos usados pelo sistema operacional.
Os aplicativos serão gravados em um sistema operacional. Mas, em geral, eles devem executar versões diferentes do sistema operacional (diferentes tipos de estradas). Portanto, seu aplicativo otimizado para a ceia pode funcionar sem problemas e sem problemas, desde que seja executado no sistema operacional correto (rodovias), enquanto outro código de propósito geral (mais simples) funcionará bem em todos os tipos de estrada.
A interface entre aplicativo e sistema operacional é definida, mas extremamente complexa e sempre oscilando levemente. Especialmente porque permitimos que o usuário modifique seu próprio sistema operacional com extensões. Se o governo permitisse aos usuários modificar as estradas, haveria muito mais acidentes.
Quando você começa a limitar a capacidade do usuário de modificar o SO, a confiabilidade dos aplicativos pode se tornar quase sólida. Veja todos esses dispositivos incorporados. Não permitimos que os usuários se aproximem do sistema operacional e funcionem sem interrupções.
Então, eu diria que esse software não é confiável. É mais como dizer que os usuários estão cavando buracos na estrada para os aplicativos. Ei, seu aplicativo acabou de bater no buraco que eu cavei no ano passado e esqueci .
fonte
Primeiro, seu usuário precisa saber que existe um software tão confiável neste mundo que ele nem sabe que ele existe. Você já viu um acidente de TV? Nem eu.
Eu acho que a principal razão é que o software é imaterial. Ser imaterial significa que os não desenvolvedores não vêem o progresso. Por exemplo, se eu estivesse fabricando um carro, você poderia me ver montando as diferentes partes e ele se pareceria cada vez mais com um carro; no entanto, se você me olhar para a programação, talvez eu passe horas amaldiçoando uma tela preta com texto verde fazendo padrões estranhos e, de repente, quando o padrão mudar um pouco, eu superexcitarei.
Por isso, as pessoas normais não percebem a complexidade do software. Quando vêem uma janela, acham que veem o programa como um todo, o que é tão errado.
Além disso, o software é muito, muito mais frequentemente personalizado do que os carros. Quando você personaliza um carro, não vai contra o design, porque isso seria visivelmente estúpido. Se meu motor estiver na frente do carro, movê-lo para trás provavelmente será um grande desastre. No entanto, como o software é irrelevante, se o cliente solicitar que você faça algo completamente contrário ao design, ele não receberá nenhuma indicação (exceto você, mas não escutará) de que o que está fazendo é estúpido, e então eles ' Ficarei surpreso que não funcione conforme o esperado.
fonte
fonte
A simples razão pela qual toda a lógica é falha:
Os dispositivos mecânicos podem ser simplesmente reduzidos a Entrada / Saída ; aumentar o número de peças para atingir essa operação de E / S não altera a operação de E / S. Assim, o sistema pode ser totalmente compreendido.
Por outro lado, o software possui Entrada -> Processo -> Saída . Devido a essa natureza, o sistema não pode ser totalmente previsto ou entendido.
Donald Rumsfeld disse o melhor:
Em suma:
fonte
Esta é uma pergunta estúpida (não de você, mas da pessoa original).
Parece o meu pai (mecânico) que odeia computadores e ainda passa o dia todo no eBay.
É como perguntar "Por que uma árvore é mais confiável que uma mariposa?".
Primeiro de tudo, eu tenho 30 (sim, mais de 30) computadores e nenhum deles esteve na loja. Acabei de gastar $ 1400 no meu carro em reparos. Vá contar o número de oficinas de reparação de automóveis vs reparação de computadores. Mais uma vez, analogia estúpida.
Os carros são feitos de aço, computadores de plástico. Os carros funcionam em todas as condições climáticas, computadores projetados para uso interno.
Meu Commodore 64 (26 anos) funciona perfeitamente e não teve nenhum reparo. Ambos os meus veículos (com menos de 10 anos) tiveram reparos muito extensos. Mostre-me um carro com milhares e milhares de horas de uso com 26 anos de idade e que ainda funcione 100% da mesma forma que era quando era novo na fábrica.
fonte
O software é baseado em bits: 0 e 1. Os carros são baseados (principalmente) em peças mecânicas.
Uma peça mecânica pode se desgastar ou apresentar mau funcionamento e ainda assim funcionar. Seus freios se desgastam ou uma válvula vaza, mas o carro ainda funciona até que você possa consertá-lo.
O software, na maioria das vezes, não possui falhas graduais. Ou funciona, ou quebra. Dividir por zero não é "quase correto"; é apenas um erro. Quando você tenta salvar em uma unidade sem espaço suficiente, não pode se esforçar muito para forçar todos os dados; isso simplesmente não vai.
Não acho que o software seja necessariamente menos confiável que um carro, mas quando o software falha, falha imediatamente, não gradualmente.
fonte
Eu acho que tenho uma analogia muito melhor. Pegue uma empresa que constrói ambulâncias de acordo com as especificações do cliente. A plataforma base (por exemplo, um chassi cortante para RV totalmente legal e operacional na rua) exige modificações em vários pontos: estrutura, sistema de carregamento, bocal de enchimento, suspensão etc. Essas modificações não só precisam ser legais na rua, mas também atendem aos requisitos jurisdicionais enquanto satisfaz os desejos do cliente.
Então você deve construir o próprio corpo da ambulância, que também é repleto de requisitos regulatórios de várias camadas do governo e de outros órgãos. Enquanto ainda satisfaz o desejo do cliente por algum sistema de organização ou sistema de armazenamento de assentos. E não esqueça que você tem uma centena de clientes diferentes de todo o mundo, em diferentes agendas de compras e implantação, nenhum dos quais diz "eu levarei uma dúzia a mais como a anterior" sem enviar páginas de exceções que freqüentemente requerem uma reengenharia completa da coisa toda.
Carros? Isso é trivial. Você comprará o que foi construído e não terá impacto direto em nenhum aspecto do design. Até a sua escolha de cor é artificial, porque na verdade você não pode especificar algo que ainda não foi projetado e testado. Em certo sentido, existe apenas um "mercado" e não um "cliente". Eu diria que o software produzido para alguns mercados é geralmente tão confiável quanto o carro que você compra na concessionária local.
fonte
Os carros não são tão confiáveis quanto você pensa. É que as falhas podem permanecer ocultas por um longo tempo (ou ignoradas) sem causar a falha da coisa toda. Seu carro vaza óleo e / ou líquido de arrefecimento? Não? Você tem certeza? Você provavelmente está errado ... Provavelmente está apenas vazando uma quantia muito pequena em algum lugar que você ainda não percebeu ... Agora estenda isso à suspensão, painéis da carroceria, interior, etc. Acho que nunca ainda encontrei um carro que eu não conseguia encontrar algo errado. No entanto, a grande maioria das peças é supérflua para a missão de transporte. Não é assim com um computador. Quase todas as partes de um computador são críticas.
É o antigo debate analógico versus digital, apenas reembalado. A TV digital é ótima, desde que tudo esteja perfeito. No instante em que algo dá errado, o áudio gagueja e o vídeo bloqueia, tornando-o inútil. Compare com a TV analógica, onde você apenas fica com um chiado ou estática que é facilmente ignorado.
fonte
Em primeiro lugar, é claro que alguns sw são perfeitamente confiáveis e os carros - especialmente os britânicos e italianos - não são necessariamente tão confiáveis.
Dito isto, minha experiência de trabalhar com software automotivo é que isso se resume a duas coisas:
Custos de garantia. Quando seu sw falhar, você o reinicia. Talvez você arquive um relatório de erro. Ou use o contrato de suporte caro. Quando o seu carro falha, você o trará e exigirá que ele seja consertado na garantia. Isso custará ao fabricante US $ 100 ou mais. Se cada falha de sw custar ao fabricante US $ 2, tenho certeza de que sw seria mais confiável.
Poderes da JD (e outros rankings de qualidade). A JD Powers pesquisa o ThingsGoneWrong (que pode ser qualquer coisa). E se esse ranking é realmente ruim, as pessoas simplesmente não compram seu carro, pelo menos não por dinheiro suficiente para obter lucro. Se tivéssemos um JD Powers para sw e as pessoas realmente se importassem com isso, tenho certeza de que sw seria mais confiável.
Portanto, se você fabricar carros não confiáveis, os custos de garantia consumirão rapidamente todo o seu lucro e, em alguns anos, uma classificação de má qualidade significa que você não venderá nenhum carro. Se você fizer sw não confiável, os usuários reclamarão e você poderá vender contratos de suporte caros.
fonte
A confiabilidade e a segurança dos veículos motorizados são obrigatórias. Em muitos países (a maioria?), É exigido por lei que eles tenham um nível mínimo de confiabilidade e segurança e sejam testados quanto ao pior cenário (seja lá o que for). Software comercial não é, na maioria das vezes.
Embora existam outras implicações legais para o software, é importante observar que, se o software travar toda vez que você pressionar o botão "Salvar", isso é simplesmente uma questão de correção / correção e você continua. Se um carro bate toda vez que você liga o indicador, isso é muito pior . Simplesmente não é tão importante para o Microsoft Outlook executar sem travar inesperadamente, como é para um SUV executar sem travar inesperadamente.
Dito isto, existem outros softwares que têm tanta ou mais responsabilidade do que a mecânica de um carro. Os aviões e os sistemas de orientação para mísseis precisam ser confiáveis; há vidas em jogo! Seria de esperar que estes sejam mais rigorosamente testados do que os automóveis comuns.
fonte
A indústria automobilística não libera um carro "beta" ao público para testes, a indústria automobilística também não precisa se preocupar com o ambiente em que eles entregam seus produtos, no entanto, eles precisam se preocupar com muitas outras coisas. dizem que a indústria de software é fundamentalmente diferente (como todos sabemos), portanto, a confiabilidade e a complexidade são realmente sugestivas. Na minha opinião, um carro tão complexo quanto um software, mas é mais fácil ver o que está funcionando ou não, pois
Portanto, a afirmação de que o software é menos confiável que os carros, pode ser verdadeira para muitos tipos de software e completamente errada para outra área (segurança, aeronáutica ...), você pode ter certeza de que um software é pelo menos mais confiável que o mais confiável de carros nessa área. Simplesmente porque essas áreas são críticas e, pelo que sei, apenas nessas áreas o software pode ser comparado à indústria automobilística.
O que nos leva a isso: a maioria dos softwares não é considerada crítica em seu domínio. Quando considerado como tal, você possui um software confiável, o único problema que você encontrará nesses problemas são os relacionados ao ambiente (por isso, se você pode controlá-lo, virtualmente não terá nenhum problema), não o software em si. No entanto, a maioria dos editores de software não trabalha nessa área crítica, é claro que eles oferecem um certo nível de qualidade, mas são mais propensos (na minha opinião) a entregar o software o mais rápido possível. No entanto, um bom software requer: bom gerenciamento de projetos, especificações sólidas, bom design e bom nível de habilidades daqueles que trabalham nele (para retomar). Isso é só para fazer, nem estamos falando em vendê-lo ...
Tudo isso leva tempo e, portanto, requer dinheiro. Não estou dizendo que você recebe o que está pagando pelo que estou dizendo na maioria das vezes produz o que investe por nunca menos (exceto se você se ferrou, mas não produz nada tão ...) e às vezes mais. .
fonte
Não acredito que os carros sejam menos complexos. Mas, mesmo que seja esse o caso, não acho que o software seja menos confiável. No entanto, acredito que existem fatores mais importantes que levam a discrepâncias na confiabilidade do software:
Abstração envolvida em software. Isso faz com que os criadores de software entendam mal como as coisas realmente estão funcionando. À medida que o tempo passa, mais e mais abstrações são adicionadas. Por exemplo, a linguagem Assembly fornece controle direto para a máquina. C é mais abstrato, mas ainda está perto da máquina. Java, C # e o que virá a seguir estão abstraindo fortemente o que acontece na máquina. Outro exemplo é se você é um programador que deseja entender como a rede ocorre no nível do software, você deve saber programar com C porque a infraestrutura (como um software) está escrita em C.
Experiências Diferentese o conhecimento dos fabricantes leva a diferentes resultados. Diferentes desenvolvedores criam software com confiabilidade diferente. O mesmo pode ser dito sobre as montadoras. No entanto, a diferença é que qualquer pessoa que possa usar um editor e um compilador ou simplesmente instalar um IDE (Ambiente de Desenvolvimento Integrado) pode criar software E de graça. Para fabricar um carro, você precisa de um investimento enorme, de uma fábrica (alguns podem fabricar um carro sem usá-lo, mas você não o encontrará em qualquer lugar). O fato de você fazer um investimento enorme significa que você tentará contratar os melhores do ramo. No entanto, ainda existem problemas de confiabilidade nos carros. Se você está ciente disso, muitos milhões de carros estão sendo retirados dos mercados por bugs graves. No meu carro, o fabricante substituirá as tesouras de freio gratuitamente para todos os carros comprados no mesmo ano.
Erros no software geralmente são mais aparentes para os usuários do que carros. Este é o resultado da interatividade e resposta entre o usuário e o software. Em um carro, prestamos atenção a menos detalhes como "O carro está acelerando quando pisamos no acelerador", quebrando, girando, luzes, espelhos, etc. etc. No software, a cada clique / entrada de usuário, geralmente há uma resposta. Portanto, há muitos pontos em que o software pode estar com erros e o usuário notará imediatamente. Isso faz o usuário acreditar que é menos confiável que os carros.
Hacking e ataques . Quanto mais amplamente um software é usado, maior a porcentagem em ataques de hackers. Você pode comparar isso com roubo de carro. Para mim também a confiabilidade do carro é comprometida quando pode ser aberta por alguém que não seja o proprietário ou a chave. No entanto, é mais fácil tentar atacar um software do que um carro, pois o atacante não está visível. Portanto, quando um software é comprometido, as pessoas associam que ele não é confiável, mesmo sendo confiável no que foi feito.
fonte
É como tudo o mais ... quando funciona, você não se importa ... quando está quebrado (ou não funciona da maneira que você deseja / espera) que você se importa.
Pense em aviões. Toneladas de pessoas estão preocupadas com as pessoas que tentam sequestrá-las ou explodi-las. Mas, na verdade, o número de eventos negativos é pequeno comparado ao número de vôos diários. (Há mais vôos em um dia do que alguma vez foram seqüestrados ou bombardeados. Diabos até tentaram ser seqüestrados ou bombardeados.)
Está tudo em que você olha e como mede.
fonte
Na verdade, é bastante simples. Carros são tecnologia antiga. Claro que há sinos e assobios nos dias de hoje (que quebram), mas se você olhar para os carros antigos - eles quebraram muito .
A 'tecnologia' por trás das partes mecânicas dos carros existe há centenas de anos e o motor de combustão interna existe há muito tempo e, quando foram introduzidos, havia muitos problemas.
Considere que problemas de memória são quase uma coisa do passado em algumas de nossas plataformas gerenciadas. Dê ao software algumas centenas de anos e nós o ajudaremos também. De fato, considerando a complexidade do software, acho que estamos à frente da curva.
fonte
Os carros modernos contam com s / w. Quando os carros modernos falham, por exemplo, o computador do motor falha, geralmente os componentes eletrônicos (embora nem sempre, mas geralmente) são os que mais o afetaram, e não o peso / peso.
Pergunte a qualquer proprietário de um carro moderno com uma ECU quanto tempo dura antes de uma falha cara. Ficarei surpreso se você conseguir 10 anos. Carros modernos cheios de eletrônicos e sensores são incrivelmente confiáveis.
Se você estuda a teoria da confiabilidade, a resposta se torna cegamente óbvia. Tudo o que é mecânico (software esperado) tem uma confiabilidade estável, que é a taxa de falha quando fora das regiões de mortalidade e desgaste infantil. A taxa de falha do item final é a SOMA das taxas de falha das peças. Adicione mais peças: a taxa de falha agregada se torna um número maior. O desafio, então, é reduzir as taxas de falha de todos esses componentes.
Quando se trata de coisas como correias dentadas e desgaste do cilindro e sensores de oxigênio ficando cheios de porcaria, conectores ôhmicos e fios quebrando devido à vibração - existem técnicas que podem ser usadas para reduzir a taxa de falhas. O custo também aumenta à medida que você faz isso.
Por outro lado, o software tem uma taxa de falhas constante. Apesar da dificuldade de encontrar defeitos às vezes, no final, todo software é uma máquina de salsicha. Entradas -> Fazer coisas -> Saídas. Às vezes, a ORDEM de entradas e as combinações de entradas levam à falha nos modos detectáveis. Quando isso acontece, você encontra o seu defeito, corrige-o e segue em frente.
O software que não possui defeitos (conhecidos) possui efetivamente uma taxa de falhas de 0. Ele funcionará para sempre sem falhas. (Tempo médio entre falhas = 1 / taxa de falhas). A plataforma de hardware falhará primeiro.
O software com defeitos pode ser executado apenas até que a combinação correta de condições de entrada, com o tempo, faça com que o defeito se manifeste.
O FALLACY em tudo isso é tentar comparar as taxas de falhas de coisas físicas (causadas por desgaste, migração de metais nos CIs, entrada de água, vibração etc.) com uma taxa de falhas do que é essencialmente uma máquina de estado finito que simplesmente faz exatamente o que sua sequência de instruções diz para ele fazer.
(Mesmo coisas como partículas alfa lançando bits na RAM são um fenômeno físico, não um defeito de software. A maneira de lidar com uma situação tão uniforme PODE, no entanto, ser um defeito de software, mas lembre-se de que essa desagradável partícula alfa era apenas mais uma entrada para o software. )
fonte
A diferença entre software e carros é que, para que os desenvolvedores de software mantenham a sanidade, duplicatas exatas do software devem ser conduzidas por todos os usuários do software e, para que os fabricantes de automóveis mantenham a sanidade, eles devem aceitar que todos os usuários estejam dirigindo carros significativamente diferentes porque a maneira como você dirige um carro muda o carro, mas a maneira como você usa o software não necessariamente altera o software.
Por outro lado,
Se você tivesse alguma maneira de verificar o óleo em seu software, saberia quando ele falharia.
Se você tivesse alguma maneira de mudar o óleo em seu software, provavelmente conseguiria prolongar sua vida útil por alguns meses.
E para estender inutilmente a analogia:
Os adesivos não estão mudando o óleo, estão substituindo uma junta com vazamento.
As atualizações não estão mudando o óleo, estão consertando os freios.
Os lançamentos não estão mudando o óleo, são mais como adicionar uma ignição sem chave.
fonte
Carros que quebram não são toleráveis. Também pode pôr em risco vidas. Os softwares que apresentam falhas são tolerados e os usuários trabalham em torno deles ou simplesmente os aceitam. Não existe muita demanda por software livre de erros.
Também o software tende a ser personalizado, você não tem 10000000 modelos diferentes de carros. Eu diria que a wikimedia é confiável e toneladas de pessoas usam esse software. Então, você poderia dizer que muitas pessoas usam software confiável ou sem erros. (wordpress, controle de várias fontes, mysql e sqlite são bastante confiáveis, etc)
fonte
Softwares são objetos matemáticos e lógicos, enquanto carros são objetos reais.
Além disso, você pode saber facilmente quando um carro tem um problema e qual é o problema, embora possa ser muito mais difícil com os softwares: imagine alguém tendo um problema com um computador e alguém com um problema com um carro; essa pessoa pode saber melhor o que está errado, porque os carros são menos abstratos que os computadores.
Não estou dizendo que os computadores são mais difíceis de entender: os carros também envolvem muitas leis físicas, como termodinâmica, eletrônica, química.
Você também pode extrapolar essa comparação, dizendo: "por que um martelo é mais confiável que uma secretária?".
Não acho que a questão seja realmente relevante, mas acho que mostra muito bem como a falta de uma boa educação matemática pode afetar o entendimento de um determinado tipo de sistema.
fonte
O software é muito mais complexo que um carro, mesmo que o carro seja composto por milhares de componentes.
Se um carro fosse tão complexo quanto o software, todos os componentes do carro dependeriam de todos os outros componentes do carro, e muitos componentes do carro estariam diretamente ligados a muitos outros componentes do carro.
Todos os carros do mundo mal se igualam ao software Unix original em complexidade.
fonte