2015/10/31

Computer system's stability and reliability


We usually say A computer system is stable or reliable.
Both of them are used when we decorate system's non-functional quality.
Those are similar but different adjective. What's difference?

'stable' means literally system is not easy to die. In computer system, critical SW errors such as memory access violation and dead lock causes system shutdown or halting.
'stable' system has strong exception handling to not cause those unstable situation.
(This is totally different with logical error which results unexpected output against program's purpose. We call this 'bug', not 'unstable' system).

stable system is actually used in control system engineering. stable control system is a strong controller which can accept noise or sharply changed input data and make the system stable.

'reliable' is much more computer-engineering idiom. It means there are looooooooooots of efforts to keep the system away from unstable situation.
For example, even if unstable situation comes, there might be some backup solution such as redundancy design or system can recover and roll back its status. And data loss prevention is also important axis for evaluating system's reliability.

The key point is that both stability and reliability do not have specific standardization.
There is just an evaluation basis that should be satisfied. Because there is not system satisfying 100% of quality.
One more thing, developers commonly should make a loooooooooooooot of efforts.






컴퓨터 시스템의 stability VS reliability.

흔히들 컴퓨터 시스템이 stable and reliable 하다 라고 한다.
일단 둘다 비기능적 품질을 형용할 때 자주 사용되는 말이다.
비슷하면서도 뭔가 다른 이 두 단어는 어떨 때 쓸까?

stable(안정적) 하다는 말은 한마디로 시스템이 안죽는다는 뜻이다. 컴퓨터 시스템 구조상 잘못된 메모리 접근 이나 데드락 같은 심각한 소프트웨어 오류들은 시스템을 죽게 만들거나 먹통으로 만들어 버린다.
stable 한 시스템은 이러한 문제가 거의 발생하지 않도록 예외 상황을 꼼꼼히 처리해 두었다는 뜻이다. (원래 의도와 잘못된 동작을 하는 로직 오류와는 전혀 다르다. 이건 bug가 있다라고 하지 unstable 하다 라고 하지 않는다)
stable system은 원래 제어 공학에서 control system의 input data에 noise(간섭) 또는 급격한 데이터 변화(큰 error)가 들어 와도 이를 잘 상쇄 시켜서 제어를 안정적으로 하는 시스템을 표현할 때 쓴다.
SW의 로직이나 알고리즘(제어기)에서 error(noise) 가 발생하더라도 예외 상황을 잘 처리한다(상쇄) 라고 비유하면 이해가 쉽다. (전산학의 많은 용어들이 전통 공학들에서 사용하는 용어들을 많이 가져왔다)


reliable(신뢰할만한) 하다는 말은 조금더 매우 컴퓨터 공학적인 용어인데, 시스템이 unstable 한 상황이 발생하지 않도록 노오오오오오력을 많이 했다는 이야기다. unstable한 상황이 발생하더라도 그것을 대체할 수 있는 차선책이 있다던가(redundancy design 등), stable 한 상태로 온전하게 복구를 할 수 있다(roll back)는 뜻이다. 또 스스로 복구가 되었을 때 예전 상태를 온전하게 유지할 수 있는지(data loss prevention) 여부도 reliability를 결정하는데 중요한 요소이다.


중요한 것은, stability와 reliability는 둘 다 딱히 정확한 기준이라고 하는 것이 없다.
그냥 평가 기준을 만족 하느냐 아니냐만 있을 뿐이다. 왜냐하면 100% 완벽한 시스템은 없기 때문이다.
또 하나, 개발자들이 노오오오오오오오력을 많이 해야 한다는 공통점이 있다.