Por que o software não é tão confiável quanto um carro? [fechadas]


65

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?


29
Qual carro? Alguns são muito mais confiáveis ​​que outros.
precisa saber é

244
Se alguém quase terminasse de montar um carro quando seu chefe aparecesse e dissesse "ah, ei, os clientes gostariam que ligássemos um motor a jato, você pode fazê-lo em alguns dias?", Os carros também não são confiáveis .
Adam Lear

28
O software é confiável. É apenas o grande software empresarial que não é. Você já viu um acidente de TV? Nem eu.
Zneak 29/01

19
Existem leis para reforçar o aprendizado de dirigir antes de poder dirigir um veículo a motor. Além disso, existem muitos cursos sobre como dirigir direcionados a pessoas com baixa escolaridade para que não colidam. Não existem programas para aprender a usar um computador e, como tal, a população pouco instruída trava com regularidade e a culpa dos programadores.
ZzzzBov

14
Basta comparar o número de lesões causadas pelo software e pelos carros, e você verá que o software é muito mais confiável que os carros.
Mouviciel

Respostas:


183

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?


9
+1, também o software pode ser perfeitamente confiável (no sentido matemático), enquanto um dispositivo mecânico nunca pode ser (pois a noção de confiabilidade aqui é diferente - ou seja, é sobre dar uma garantia prática de que tudo funcionará e não se romperá ou usar em algum momento).
mlvljr

9
+1 por apontar a falha fundamental na questão #
Gary Rowe

11
Gostaria de acrescentar que eu nunca vi um carro no espaço, enquanto eu vi software lá em cima ...
Matthieu M.

5
@Rei Miyasaka: Não subestime o nível de complexidade no software incorporado. ;)
Mchl

3
@ Matthieu M. - você nunca viu o Apollo Lunar Rover?
JeffO 3/02

115

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.


12
+1, imagine um "computador mecânico" com engrenagens, etc., em vez de loops e variáveis ​​- quão complexo (e não confiável) deveria ser apenas "copiar" um programa KLOC 20-40 -...? E vamos lembrar por que era quase impossível construir computadores mecânicos funcionais também;).
mlvljr

3
1 para mencionar atualizações de vírus que suponho que é um eufemismo para que-OS-cujo-nome-ás-não-ser-pronunciou
Trinidad

11
E mencionar o Sr. Parnas no contexto da confiabilidade do software provavelmente deve render um voto positivo por si só.
mlvljr

6
Você misturou o uso do apóstrofo em quase todas as instâncias. Uma parte móvel mecânica tem sua posição (não "é"). É complexidade (não "é"). Coisas como DLLs (não "DLL"). Veja também: english.stackexchange.com
Ashe

2
mlvljr: procure Charles Babbage e seu mecanismo analítico: en.wikipedia.org/wiki/Analytical_engine
Mchl

56

É 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.


4
+1 para esta resposta - nenhuma das outras respostas importa . Se as pessoas se importassem o suficiente com o fato de o software ser tão confiável quanto os carros (por mais que isso fosse), seria . Mas quando um programa trava, você reiniciar o seu computador - quando um carro bate, OTOH ...
Cyclops

@ Cyclops Eu concordo, mas acho que vale a pena ponderar por que as pessoas passaram a ter essas opiniões diferentes sobre carros e software. E acho que a principal resposta é que, para um programa ser útil a um ser humano comum, geralmente ele tem ordens de magnitude mais complexas do que um dispositivo mecânico útil, como um carro. Muitas das outras respostas abordam isso. Além disso, o risco de software defeituoso é geralmente baixo.
Jrandom_hacker

2
@j_random_hacker: Não vejo que as pessoas tenham opiniões diferentes sobre confiabilidade devido à complexidade diferente, porque a maioria das pessoas não tem uma boa ideia de quão complexo é um carro ou programa. Eles têm expectativas diferentes, porque o software tem mais problemas do que carros hoje em dia. Eles se preocupam com as consequências. É provável que uma falha no carro prenda alguém onde eles não querem estar, incapazes de ir a qualquer lugar e provavelmente custe muito dinheiro para remediar. É sempre inconveniente e pode ser fatal. Para a maioria das pessoas, uma falha de software significa algum trabalho perdido.
David Thornley

25

existem muitos milhares de peças que compõem um carro.

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.


6
Software parece simples só porque nós somos muito bons em nossos trabalhos e torná-la simples para o :-) leigo
Martin Iorque

3
Na verdade, os carros também são complexos.
Mauricio

9
@Mauricio: Nunca disse que não eram complexos. O ponto é que o software pode ser várias ordens de magnitude mais complexas que um carro.
precisa saber é o seguinte

4
Software não é mais complexo que um carro. Carros e software crescem naturalmente em complexidade até atingirem os limites externos do que as pessoas podem gerenciar. Os computadores podem ter bilhões de elementos, mas muitos deles podem ser tratados como elementos ideais e funcionam da mesma forma. Essa simplicidade inerente é o motivo pelo qual o software se torna tão complexo: ele cresce até ser difícil de gerenciar. Enquanto os componentes do veículo têm outros elementos de complexidade: eles precisam lidar com desgaste, corrosão, flutuações de temperatura etc. Ambos são altamente complexos, apenas em diferentes dimensões.
Whatsisname

3
Com o software, é mais fácil continuar adicionando mais software e, em seguida, adicionar mais componentes mecânicos. Embora ambos sejam cultivados "organicamente", o software está crescendo muito mais rápido.
Jim C

20

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.

  • Os clientes não sabem o que querem quando começam. Eles começam a falar sobre um jato de luxo, mas quando percebem os custos, querem que você o construa pelo preço de uma scooter movida a pé.
  • O design do carro leva anos para passar da idéia ao carro-conceito e mais anos para ser fabricado. Quando foi a última vez que você teve esse luxo com software?
  • As peças do carro são peças de metal fundidas, mas os componentes do software podem mudar de forma e interface frequentemente.
  • O processo de fabricação é completamente diferente. Nos carros, as peças são fabricadas em grandes quantidades e as mesmas peças são usadas em diferentes veículos. Com o software, quase tudo é feito à mão porque, caso contrário, as coisas simplesmente não se encaixam.

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.


6
Correção na fabricação: a fabricação de software é trivial. Isso leva as pessoas a pensar em alguns aspectos da programação como manufatura, enquanto a programação é tudo design. Todo programa é um novo design.
David Thornley

11
Todo programa é de design novo - ainda a ser comprovado - ou um download sem falhas de software comprovado e existente a partir de uma biblioteca digital confiável. Uma grande dicotomia lá.
S.Lott

19

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 ...


3
nitpicking: a maioria dos softwares (visíveis) é um software personalizado. daí o estado percebido de falta de confiabilidade geral.
Javier

4
@Javier, eu acho que o software mais visível é o material que você pode comprar em uma loja de material de escritório ou que vem com o seu computador.
Marc

11
@Javier: Software personalizado, por definição, eu pensaria, é projetado / feito para um público específico - não para o público em geral.
Steven Evers

@ Marcie: mesmo se o windows, o office e o photoshop estiverem em todo lugar, toda empresa tem seu próprio sistema de contabilidade e processos personalizado. Pense também em todos os sites por aí, se não for wordpress, é personalizado.
Javier

3
@Javier, nem todos os negócios. Muitos apenas usam produtos prontos para uso.
Marcie

16

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.


11
+1 Construir um carro não é o equivalente a construir um programa de software. Construir um carro é mais equivalente a executar um programa de software. Projetar e especificar um carro é mais equivalente à criação de um programa de software. E há muitos problemas durante o design do carro que são resolvidos ao longo do caminho, assim como no software.
RationalGeek

11
Não concordo com esta afirmação: "À parte, essa é uma das principais razões pelas quais a aplicação de técnicas tradicionais de engenharia à engenharia de software é um desastre". O desenvolvimento de software definitivamente envolve princípios de engenharia: componentes reutilizáveis, composição, teste de estresse, blocos de construção etc.
Philluminati

13
  1. Os fabricantes de automóveis obtêm toda a especificação antes de produzir o produto "final".
  2. Os usuários de automóveis não costumam fazer coisas estúpidas que os designers não esperavam.
  3. Os carros são "atualizados" apenas uma vez por ano (normalmente), enquanto a maioria dos softwares deve ser atualizada várias vezes por ano.

Eu poderia continuar, mas parece que meu navegador está prestes a travar ...


3
Os usuários de automóveis fazem muitas coisas estúpidas, incluindo coisas que os designers não esperavam. O problema é que há apenas entradas muito limitadas e não há resultados esperados específicos para colocar delineador durante a condução, que são diferentes de ler o jornal durante a condução.
David Thornley

10
@ David Thornley: Imagine se as pessoas esperassem que um carro funcionasse como um computador ... "Eu estava lendo o jornal enquanto dirigia, e agora os faróis não funcionam mais. Talvez esteja relacionado ao volante que eu removi para lugar para o jornal, então eu corri contra uma parede. O cinto de segurança me protegeu muito bem, mas não protegeu os faróis ... ";)
Guffa


11
@robertc Você não pode projetar até mesmo para que o nível de estupidez ...
Glen Solsberry

10

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.


2
Isso só funciona se a pessoa "melhor" acabar não sendo muito melhor. Se eles são muito melhores, então você percebe o que está acontecendo com a Apple agora, com eles chegando atrasados, com tecnologia desatualizada e ainda chamando a atenção porque eles "fizeram tudo certo".
Robert Massaioli

@ Robert: A Apple é uma solução completa de ponta a ponta (loja iTunes), e não tenho certeza se concordo que a tecnologia deles esteja desatualizada. Se não fosse por eles, todos ainda poderíamos estar usando aqueles telefones deslizantes de baixa qualidade.
Robert Harvey

5

Eu gosto da maioria das respostas até agora. Aqui está a minha opinião.

O custo da falha é mais grave para carros do que software

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.


4

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.


4

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 .


+1 Muito boa analogia e completamente nas linhas do que eu queria escrever (mas não o fez depois de ler este)
Joris Meys

3

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.


minha tv trava o tempo todo. (O material digital feita acontecer)
tp1

3
  1. Falta de compartilhamento de informações (os programadores voam sozinhos ou em pequenos grupos - os projetistas de carros trabalham com equipes interconectadas dentro de uma grande corporação e todos compartilham seu conhecimento; se todos trabalhassemos para grandes empresas, todos seríamos melhores programadores devido ao aprendizado de outros; é também por isso que coisas como programas de código aberto e recursos on-line são muito importantes)
  2. Expectativas dos participantes de campo (tudo bem se um projetista de carros for apenas marginalmente útil nos primeiros 5 a 10 anos, mas se um programador entrar em uma entrevista e disser que não será muito útil por 5 a 10 anos, o a entrevista acabou)
  3. Falta de teste de penetração (devido à falta de fundos, questões de legalidade, etc .; fabricantes de automóveis, no entanto, batem carro após carro em uma parede de tijolos, têm túneis de vento, têm requisitos de desempenho relativamente diretos etc.)
  4. Transparência das informações (você não sabe como a maioria dos softwares funciona; você adivinha ou faz suposições com base em entrevistas, comunicados de imprensa, publicidade, etc .; com carros, no entanto, a maioria das coisas está ali para você olhar)
  5. Encapsulamento inerente do conhecimento (o cara / robô que solda a estrutura juntos não precisa conhecer a matemática por trás do sistema de controle de estabilidade; os programadores precisam conhecer milhares ou dezenas de milhares de coisas desconhecidas para a pessoa comum, enquanto apenas os projetistas de carros precisa saber centenas ou milhares)
  6. Tangibilidade (ajuda quando você pode vê-lo)
  7. Idade de campo (o design do veículo tem milhares de anos; o design do veículo motorizado tem mais de 250 anos [motores a vapor, etc.])
  8. Criticidade dos subsistemas (os carros ainda "funcionam", mesmo que muitas de suas peças parem de funcionar - travas elétricas, vidros elétricos, HVAC, limpadores de pára-brisa, janelas quebradas, calotas perdidas, calotas perdidas, pneus furados [coloque um novo], rádio, uma luz ou duas, entrada remota etc., quando algo no computador quebra, geralmente é um cenário SHTF)
  9. Interdependência (quando um computador quebra, não é raro afetar centenas ou milhares de outros computadores; quando um carro quebra, é raro que outros carros sejam afetados - se outros carros são afetados, quase sempre é apenas 1 -3)
  10. Culpa geral (se uma parte de um computador ou um dentre milhares de computadores quebra e prejudica um sistema, a culpa se estende a todo o computador ou, no último caso, a toda a rede de computadores; se o seu carro for atingido por um carro com freios com falha ou se um carro parar e não for reiniciado na estrada, apenas a parte individual do carro é responsabilizada)
  11. Sistemas finito vs. infinito (os carros podem ter muito mais, e espera-se que funcionem apenas em condições limitadas - por exemplo, você não dirige um BMW em terrenos que somente um veículo semelhante ao jipe ​​pode fazer; com computadores, no entanto, as possibilidades são de fato infinitas - há coisas novas o tempo todo, novas APIs, novos sistemas operacionais, novas brechas de segurança, iPads, software para celular, novo isso, novo, etc.)
  12. Escopo do Conhecimento Necessário (uma pessoa com QI 130-140 poderia aprender quase tudo o que há para saber sobre carros, mas apenas uma fração do que há sobre computadores e programação)

3

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:

“Existem conhecidos conhecidos; Há coisas que sabemos que sabemos. Também sabemos que existem incógnitas conhecidas; isto é, sabemos que existem algumas coisas que não sabemos. Mas também existem incógnitas desconhecidas - aquelas que não sabemos, não sabemos. ”- Secretário de Defesa dos Estados Unidos Donald Rumsfeld

Em suma:

  • Um dispositivo mecânico é um sistema que sabe e desconhece,
  • O software possui os itens acima, mas também os desconhecidos.

11
+1 para citar D. Rumsfeld. A mídia nunca gostou dele, mas esse homem é um gênio.
Oosterwal

3

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.


2

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.


1

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.


1

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.


1

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.


1

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.


1

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

  • Na parte inferior dos carros não são virtuais, é mais fácil testar (mas mais caro)
  • Eles começaram muito antes da indústria de software, mesmo que fossem menos pessoas, você não pode minimizar a prática e o conhecimento que eles reuniram. A indústria de software ainda é um bebê comparada a ela.
  • Toda a indústria automobilística é obrigada por lei e ética a não fabricar carros que matem seus motoristas, especialmente nas últimas décadas.

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. .


1

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.


0

É 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.


0

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.


0

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. )


0

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.


0

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)


11
Há uma abundância de software por aí que pode colocar em risco vidas se falhar.
Adam Lear

@ Anna Lear: Sim, mas ele está falando sobre 'software em geral'. Todos os carros colocam em risco a maioria dos softwares. Também pelo que eu sei, esse tipo de software é muitas vezes confiável

0

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.


0

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.