Gotterbarn D., Informatics and Professional Responsiblity

Science and Engineering Ethics 2001, 7, 221-230

  • 초록과 결론 부분은 완역, 나머지는 간략하게 요점만 정리하였습니다.
  • 모든 권리는 원저자에게 있습니다.

초록

소프트웨어 개발의 여러 문제는 전문가적 책임을 너무 좁게 이해한 데에서 나타난다. 저자는 소프트웨어 개발자가 작업의 책임을 받아들이는 것을 회피하려는 여러가지 방식들을 검토한다. 책임 회피의 여러 유형을 나열한 뒤, 저자는 긍정적 책임의 확장된 개념을 도입한다. 논문은 긍정적 책임의 적용이 소프트웨어 개발의 여러 문제를 줄일 수 있을 것이라고 주장하고 있다.

서문

1991년 여름, 미국 전역의 전화가 연결되지 않았다. 수백만 줄의 신호 처리 프로그램에서 3줄을 변경했는데, 그 코드에 에러가 있었던 것이다. 3줄 바꾸는 건 하찮은 일이었기에, 검증을 하지 않았다. 소프트웨어 시스템에서 이런 식의 장애가 발생하는 것은 매우 흔하다. 시스템의 장애로 끝나지 않고, 문제 때문에 인명 피해가 발생하는 경우도 있다. 뉴저지에서는 컴퓨터가 감시하던 집에 피수용되어 있던 죄수가 전자발찌를 제거했다. “컴퓨터는 변경을 감지했습니다. 하지만, 두 번째 컴퓨터에게 사고를 보고하라는 연락을 보냈을 때, 첫 번째 컴퓨터는 사용 중이라는 신호를 받고 이후 어떤 답도 돌아오지 않았습니다.”1 도망친 죄수는 살인을 저질렀다. 프랑스에서는 컴퓨터가 잘못 보고하여 경찰이 무고한 희생자를 쏘아 죽인 사건도 벌어졌다.2 1986년에는 X선 장비를 통제하는 소프트웨어에 에러가 있어 두 명의 암환자가 죽었다. 이런 이야기가 많은 걸 보면, 정보 과학과 컴퓨터가 긍정적인 인상을 주지 못하는 것도 놀라운 일은 아니다.

도덕적인 소프트웨어 개발자의 행동에서 어떻게 이런 문제가 발생할 수 있을까? 그런 경우들이 존재한다는 것은 문제이지만, 그것이 이 논문의 큰 관심사는 아니다. 내 관심은 오히려 이런 비극에 기여한 책임의 좁은 개념에 관한 것이다. 나는 정보 과학이 빠른 발전을 이뤘지만 컴퓨터 종사자에게 적용되어야 할 책임 개념은 그만큼 발전하지 못했다는 것을 밝힐 것이다. 컴퓨터작업은 신생 전문직이라서 책임 개념을 확장하지 못했다. 나는 컴퓨터 전문직에 해당하는 넓은 책임 개념을 설명하려 한다.

위에서 인용한 사례의 초점은 컴퓨터의 실패에 있다. 컴퓨터 개발 초창기에, 컴퓨터 종사자들은 확실한 시스템 개발에 실패한 것에 관한 책임을 면제받을 방법을 찾았다. 컴퓨터 종사자들은 자신들만의 언어를 개발하였다. 컴퓨터 프로그램의 흠은 프로그래머가 도입한 오류가 아니라 프로그램의 “버그”였다. “버그”를 발견하는 것에 얼마나 큰 강조가 주어지고 있는지, 반면 미래에 비슷한 “버그”가 발생하지 않도록 프로그램을 살피거나 예방적 행동을 취하는 것에는 큰 관심이 없는지에 주목할 필요가 있다. 컴퓨터 종사자의 변명을 위한 완곡어법으로 또 유명한 것으로 “컴퓨터 오류”가 있다. “나는 잘못이 없습니다. 그것은 컴퓨터 오류입니다.” 개발자는 잘못 돌아간 일의 책임을 피하기 위해, 고객이 “꼭” 필요한 조건을 지키지 않아서 문제가 생겼다고 둘러대곤 한다. 조건을 잘 지켜서 고객에게 책임을 돌릴 수 없는 경우, “오류 없는 것으로 증명된 프로그램은 없다”는 사실을 중대한 시스템 오류의 변명으로 삼곤 한다. 마지막 수단으로, 시스템이 너무 복잡해서 그랬다고 주장할 수도 있다. 복잡한 시스템은 오류를 낼 수 있다. 이것은 “피할 수 없는, 정상적 사고”라는 공학적 개념과 비슷하다. 이 개념은 시스템의 복잡성이 증가할 수록 사고 가능성도 증가한다는 것을 의미한다. 사고는 누군가의 실수와는 무관해야 한다. 이 모든 변명의 결과, 사건의 책임은 컴퓨터나 시스템의 복잡성 때문이지, 컴퓨터 시스템의 개발자 때문은 아니다. 소프트웨어 개발자가 책임에서 한 걸음 물러나는 것은 부정확한 컴퓨터 과학에 기반한다. 여기에서의 문제는 나쁜 과학보다도, 시스템 개발을 정당화하는 데 사용되는 변명이 사회를 좀먹고 있으며, 컴퓨터 작업이 전문직으로 발전하는 것 또한 막고 있다는 것이다.

뉴스 기사는 소프트웨어 개발의 파국을 강조하고 싶어한다. 이것은 소프트웨어 개발의 일반적인 사례들에서 발생하는 책임의 질문을 무시하는 결과를 낳을 수 있다. 컴퓨터 작업의 일반적인 사례를 살펴 책임의 더 온전한, 긍정적인 개념을 그려보자.


An Inadequate Interface

  • 컴퓨터 상담역인 프레드 컨설턴트는 뉴랜드 정부의 컴퓨터 시스템을 개발, 시스템은 매우 복잡하여 납세자의 세금을 낭비하고 있음
  • 회계 시스템 지역 관리자인 짐 미드레벨은 낭비가 발생하고 있다는 것을 이해하고 있음, 상급 관리자에게 시스템 수정을 건의
  • 프레드는 짐을 만나 시스템 개정 사항을 논의, 소프트웨어 엔지니어인 조앤 빌드스크린에게 사용자 인터페이스 설계를 요청
  • 조앤이 개발한 시스템은 짐을 만족시킴, 조건이 모두 만족되었기에 시스템은 허가 검사를 통과
  • 시스템이 설치되었지만, 사용자 인터페이스가 너무 복잡해서 다른 관리자들이 불평
  • 불평 때문에, 상급 관리자들은 회계 시스템 개정에 더 이상 돈을 쓰지 않기로 결정하고, 불평을 줄이기 위해 원래 시스템으로 돌아가기로 함

  • 이 경우, 개발의 최종 결과는 무엇인가?
    • 프레드의 회사, 뉴랜드 공무원은 이제 서로 계약이 소원해졌으므로 모두 불행
    • 원래의 비싼 회계 시스템이 돌아왔음, 납세자의 부담 증가
    • 기획이 진행되었음에도, 오히려 시스템 개정의 가능성이 줄어들었으므로 상황은 악화

Side-Steps: Avoiding or Dodging Responsibility

  • “누구 책임인가?”의 비난 대상 찾기
  • 컴퓨터 종사자가 책임에서 한 발 물러나려는 이유
    • 소프트웨어 개발은 윤리적으로 중립적인 활동이라는 믿음
    • 책임의 부정적 관행 모형

Ethical Neutrality

  • 컴퓨터 종사자 교육에 내재해 있는 문제풀이적 성격은 일을 퍼즐 놀이로 받아들이게 만듬
  • 컴퓨터 작업이 서비스라는 것을 깨닫지 못하며, 이것은 책임 또한 없다는 인식으로 이어짐

Diffuse Responsibility

  • 비난 당사자를 찾아야 법적 행동을 취할 수 있음
  • 비난의 개념은 사건을 불러온 직접적 행위와 연결
  • 개별 소프트웨어 개발자가 사건과는 너무도 멀리 떨어져 있다는 인식은 책임의 역설적 부정으로 이어짐
  • 라드가 “업무 책임”이라고 부른 것과 연결, 책임이 세밀하게 정해진 업무와만 연결되어 있을 때 문제가 발생

책임과 비난의 연결은 설명 책임 없음의 다양한 핑계로 이어짐

  1. 부정적 사건과 직접적 인과 연결이 없다는 핑계
  2. 책임있는 행동이 자기 이익과 충돌할 때 책임을 거부
  3. 책임은 행동력을 필요로 하지만 컴퓨터 종사자는 팀이나 더 큰 조직에서 일한다는 핑계
  4. 옳다고 생각하는 일을 행할 의지의 부족
  5. 컴퓨터를 비난
  6. 과학은 윤리적으로 중립이라고 가정
  7. 근시안적 시각

Positive and Negative Responsibility

  • 라드의 “부정적 책임”과 “긍정적 책임”의 구분
    • 부정적 책임: 비난과 법적 책임 부여와 면제
    • 긍정적 책임: 비난과 처벌보다는 무엇을 해야 하는지에 집중, 한 사건에 대해 여러 사람이 다양한 책임을 가지고 있을 수 있다고 생각, 근접 또는 직접 원인을 필요로 하지 않음, 후향적(충족되지 않은 의무와 수행의 식별) 및 전향적(예, 컴퓨터 작업의 준수 표준 수립 활동) 양방향

회피에 대한 응답

긍정적 책임 개념은 앞서 언급한 책임 회피 기술을 다루는 데 사용할 수 있다. 이런 책임의 넓은 개념은 한 발짝 물러서는 것의 확산을 타개할 수 있으며, 책임 개념의 긍정성은 한 발짝 물러서는 부정적 관행에 대처할 수 있을 것이다.

긍정적 책임과 컴퓨터 전문직

컴퓨터 작업은 새로 생긴 전문직이다. 컴퓨터 작업은 이미 전문직의 여러 특징을 지니고 있다. 컴퓨터 작업이 전문직이 되기 위해서는 구성원이 목표와 목적 또는 이상에 관해 동의해야 한다. 동의는 두 종류로 구성된다. 하나는 기술적인 것, 하나는 도덕적인 것이다. 여기에 기술적 긍정적 책임과 도덕적 긍정적 책임을 연결시켜 볼 수 있다. 부정적 관행 모형에 따르면, 컴퓨터 종사자는 전문직의 올바른 표준과 작업 절차를 따를 책임을 가진다. 이것은 소프트웨어 개발 모형 및 모형 소프트웨어 공학 교과과정의 최소 표준으로 구현되어 있다. 이런 종류의 기술적 지식과 기량은 전문직과 기술자를 구별지어주지 못한다. 구별을 위해, 기술적 긍정적 책임 너머로 나아가야 한다.

책임의 넓은 개념

전문직으로서, 구성원은 그 기량을 사회의 선을 위해 활용하며, 고객이 요청하는 것이 무엇이든 행하는 고객의 대리인으로서만 행하지 않을 것을 서약한다. 이 약속은 전문직업 조직의 윤리 규약으로 구현된다. 전문직이 되기 위해서는, 긍정적 책임에 기술되어 있는 책임의 다른 층위를 떠맡아야 한다. 전문직은 컴퓨터 작업 산물에 영향받는 대상에게 “고도의 관심”을 쏟을 것을 약속한다. 대부분의 직업은 “당연한 관심”을 표준으로 삼고 있다. 예를 들어, 배관공은 작업 과정에서 고객이나 사용자가 다치지 않도록 할 책임이 있다. 그러나 배관공은 새로운 시스템이 고객의 사업, 삶의 질, 환경에 미칠 수 있는 부정적 영향에 관해 조언해야 할 책임을 지지는 않는다. 컴퓨터 인공물에 영향 받는 사람들의 긍정적 효과를 극대화하는 데 신경쓰는 것은 “당연한 관심”, 직접적인 해의 회피를 넘어서는 것이다. 긍정적 책임은 컴퓨터 종사자가 컴퓨터 전문직이 되는 데에 필요한 책임의 층위를 덧입혀 줄 것이다. 불충분한 인터페이스는 계약 조건은 만족시킬지 모르지만, 사용자의 필요를 만족시키지는 못한다. 시스템이 기술적으로는 모든 기능을 수행할 수 있고 짐 미드레벨의 요청을 만족시킨다 해도, 컴퓨터 전문직은 시스템이 사용자의 필요를 만족시키는지 확인할 책임을 진다. 긍정적 책임의 전향적 개념은 컴퓨터 전문직이 상위 관리자를 만나 새로운 회계 시스템을 다시 배치하도록 설득할 의무를 부여함을 의미한다. 컴퓨터 전문직은 고객, 사용자, 납세자에게 의무를 진다. 이 책임의 넓은 개념은 부정적 관행 모형을 넘어선다. 그것은 도덕적 책임과 윤리적 인정을 결합한다. 전문직업적 책임의 개념은 앞서 언급한, 설명 책임을 부정하는 데 사용되는 방법들에 대처하는 데에 사용될 수 있다. 이런 책임의 개념은 확산된 책임과 집합적 책임의 확산을 다룰 수 있는 방법을 제시한다. 집합적 책임을 다룰 수 있는 능력은 중요한데, 그것은 소프트웨어를 생산하는 조직과 컴퓨터 전문가를 대표하는 조직의 “전문가적 책임”에 관한 의미있는 논의를 가능케 하기 때문이다. 논문 서두에 언급한 컴퓨터로 인한 참사는 컴퓨터 종사자가 전문가적 책임의 긍정적 개념을 이해하고 적용했다면 발생하지 않았을 것이라는 점은 명백하다. 최근 소프트웨어 공학자의 윤리 규약과 전문직업적 준수가 나왔다.12 이것은 전문가적 책임의 긍정적 개념을 다루려는 시도로 볼 수 있을 것이다.


참고문헌

1Joch, A. (1995) How Software Doesn’t Work, Byte, December: 48-60

2Vallee, J. (1982) The Network Revolution, And/Or Press, Berkeley, CA, USA.

12SE “Software Engineering Code of Ethics and Professional Practice”, adopted by the IEEE-CS and the ACM. (1998) http://computer.org/computer/code-of-ethics.pdf. Also republished in Science and Engineering Ethics 7(2): 231-238.