태그 보관물: quality

quality

자동차만큼 소프트웨어가 신뢰할 수없는 이유는 무엇입니까? [닫은] 안정적이고 안정적이지 않습니까?” 또한 소프트웨어가

사용자 가이 질문을했습니다. 우리는 자동차가 고장났다는 것을 알고 있지만 소프트웨어가 관련되지 않은 한 물리적 인 문제 때문입니다 .

나는 소프트웨어가 훨씬 더 젊은 산업이라고 대답하려고 노력했지만 사용자는 “자동차 산업이 더 적은 사람들보다 훨씬 안정적이고 안정적이지 않습니까?”

또한 소프트웨어가 더 복잡하다고 대답했지만 사용자는 자동차를 구성하는 수천 개의 부품이 있다고 반박했습니다. 자동차를 설계하고 제작하는 사람들은 일반적으로 자신의 구성 요소를 매우 잘 알고 있지만 결국에는 결국 함께 일하게됩니다.

그렇다면 왜 자동차만큼 소프트웨어가 신뢰할 수 없습니까?



답변

귀하의 질문의 전제는 틀린 것입니다. 소프트웨어는 자동차보다 “신뢰할 수 없습니다”. 있다 수십억에 따라 수십억 문제없이 끝 년 동안 거기 장치의 실행되는 임베디드 소프트웨어 연중 무휴은. 지옥, 그 중 일부는 에서 자동차 및 제어 / 엔진을 모니터링 할 수 있습니다. 그렇다면 자동차 자체가 소프트웨어에 의존하는 경우 어떻게 자동차보다 소프트웨어의 안정성이 떨어질 수 있습니까?


답변

소프트웨어와 기계 부품을 디자인합니다.

복잡합니다.

현대 소프트웨어에는 수백만 개의 “부품”이 있기 때문입니다.

소프트웨어 부분은 매우 복잡하고 많은 상태가 있습니다. 기계식 비 이동 부품에는 상태가 없습니다.

기계적인 움직이는 부분은 그 위치를 가지고 있습니다 (하나의 변수).

실행 중이고 1Mb의 RAM을 사용하는 프로그램의 상태는 백만 바이트입니다. 그것은 일반적인 기계 시스템보다 훨씬 더 많은 상태입니다.

거의 발생하지 않으므로 테스트되지 않은 상태 조합이 있습니다. 자동차와 같은 기계 시스템에서는 작동 중에 기계 부품이 서로 부딪치지 않는지 쉽게 확인할 수 있습니다. 직장에서 사용하는 기계 CAD 소프트웨어가 자동으로 수행합니다.

보이지 않는 비접촉식 부품으로 기계를 제작하고 수백만 개의 움직이는 부품이 모두 빠진 경우 간단한 프로그램과 같습니다.

“hello world”조차도 운영 체제에서 실행됩니다. 구 8 비트 시스템과 미니 컴퓨터 운영 체제는 단순했기 때문에 매우 안정적이었습니다.

DLL 및 공유 라이브러리와 같은 것은 바이러스 업데이트 또는 소프트웨어 설치의 일부로 교체 된 후 관심있는 프로그램이 작동하지 않습니다. 자전거 타이어로 자동차 타이어를 교체하는 것과 비슷합니다. 라이브러리 함수의 일부 에지 상태가 방해합니다 (프로그램이 기대하는 방식으로 작동하지 않음).

Java와 같은 언어로 작성된 프로그램은 객체간에 설계되지 않은 많은 상호 작용 (포인터 재사용, 배열 범위 오버플로)을 허용하지 않는 프로그램은 일반적으로 일단 작동하게되면 상당히 안정적입니다.
정적 라이브러리와 함께 운영 체제를 사용하는 경우 프로그램이 작동하면 계속 작동하지만 상태 크기에 따라 여전히 많은 에지 조건이 있습니다.

Dave Parnas는 프로그램 상태를 더 작게 만들어 소프트웨어의 안정성을 얻는 것에 대해 씁니다. 엄격한 함수형 프로그래밍 담당자는 단일 정적 할당을 강제하여 동일한 작업을 수행합니다.


답변

소비자 선택의 문제입니다.

소비자가 내 기존 포드 매버릭 (Hod Maverick)과 달리 내 혼다 시빅 (Honda Civic)만큼 신뢰할 수있는 소프트웨어를 요구했다면 그럴 것이다. 일부 조직은 신뢰할 수있는 소프트웨어를 요구하며 일반적으로 임베디드 소프트웨어, 때로는 우주 임무 및 항공 교통 관제와 같은 안전에 중요한 것들을 위해 소프트웨어를 얻습니다. 이 소프트웨어는 여전히 완벽하지는 않지만 자동차도 아닙니다.

그러나 고객은 소프트웨어의 다른 품질을 요구하며, 대부분 기능이 떨어지고 확실히 비싸며 나중에 신뢰성이 높아 나중에 배송되는 소프트웨어에 대해서는 비용을 지불하지 않습니다.


답변

자동차를 구성하는 수천 개의 부품이 있습니다.

컴퓨터 (및 관련 소프트웨어) 만 그렇게 간단하다면.

컴퓨터에는 기가 바이트의 메모리가 있습니까? 수십억 개의 플립 플롭? 테라 바이트 디스크? “움직이는”부품 수조?

이 소프트웨어는 수만 또는 수십만 개의 개별 코드 라인을 실행할 수 있습니다. 또한 단위 테스트 및 도구에서 많은 (또는 그 이상).

아닙니다. “차도 복잡합니다”라는 주장은 이기적입니다. 소프트웨어는 자동차보다 훨씬 더 복잡합니다.


답변

연소 엔진을 작동시키는 원리와 자동차를 구성하는 모든 구성 요소는 지난 세기에 크게 바뀌지 않았습니다. 물론 혁신적인 개선과 하이브리드 자동차가 있었지만 기본 구성 요소는 동일합니다. 당신은 엔진, 드라이브 트레인 등을 가지고 있습니다. 심지어 컨셉 카와 초고가의 매우 빠른 부가티 베이론은 같은 기본 구조로 만들어졌습니다. 요컨대, 자동차 설계는 잘 알려진 문제 입니다.

소프트웨어 개발과는 대조적입니다.

  • 고객은 시작할 때 원하는 것을 모릅니다. 그들은 고급 제트기에 대해 이야기하기 시작하지만, 비용을 인식하면 발 구동 스쿠터 비용으로 제작하기를 원합니다.
  • 자동차 디자인은 아이디어에서 컨셉트 자동차에 이르기까지 몇 년이 걸리고 거기에서 제조하기까지는 몇 년이 걸립니다. 소프트웨어를 사용하여 마지막으로 럭셔리 한 시간은 언제입니까?
  • 자동차 부품은 금속 주물이지만 소프트웨어 구성 요소는 모양과 인터페이스를 자주 변경할 수 있습니다.
  • 제조 공정은 완전히 다릅니다. 자동차의 경우 조각은 대량으로 제조되며 동일한 조각이 다른 차량에 사용됩니다. 소프트웨어를 사용하면 거의 모든 것이 수작업으로 만들어집니다. 그렇지 않으면 물건이 맞지 않기 때문입니다.

간단히 말해서 자동차가 소프트웨어보다 “신뢰할 수있는”것으로 인식되는 데에는 여러 가지 이유가 있습니다. 방금 커플을 생각해 냈습니다.


답변

자동차는 신뢰할 수 있습니다. 대부분의 소프트웨어도 마찬가지입니다.

그러나 … 맞춤형 자동차와 맞춤형 소프트웨어에는 모두 문제가 있습니다.

1970 년에 개조 한 머슬카, 땜장이, 개조를 해 본 적이 있고 고장이 났을 때, 그가 원래 그대로 두었을 때의 모든 종류의 어리석은 문제가있는 실제 자동차 애호가. 하지만 … 그러면 과급기가 없을 것입니다 …


답변

운전하는 자동차는 여러 번 제작되었으므로 시공 과정이 매우 정교 해 생산 라인에서 동일한 자동차를 반복해서 만들 수 있습니다.

예를 들어 처음부터 처음부터 제작 된 복잡한 복합 최첨단 자동차라면 믿을 수 없을 정도로 가까울 것입니다. 경주마다 한두 가지가 고장 나는 것이 일반적입니다.

새로운 소프트웨어는 항상 일회용입니다. 프로그래머의 코드는 이전에 코딩 된 적이 없습니다. 이 시나리오에서 실제로 높은 품질을 얻으려면 대부분의 제품에 대해 막대한 비용이 소요됩니다. 모든 사소한 새 소프트웨어는 사실상 프로토 타입입니다.

게다가, 이것은 전통적인 엔지니어링 기술을 소프트웨어 엔지니어링에 적용하는 것이 재난 인 주된 이유 중 하나입니다.