직업적 책임과 윤리적 책임
다른 공학 분야와 마찬가지로, 소프트웨어 공학은 엔지니어의 자유를 제한하는 사회적인 틀과 법적인 틀 안에서 수행한다. 소프트웨어 엔지니어는 기술적 능력을 적용하기보다는 책임을 포함하고 있다는 것을 인식해야 한다. 그들은 전문가로서 존경받을 수 있또록 윤리적, 도덕적으로 책임감 있게 행동해야 한다.
정직하고 성실하게 임해야 하는 것은 당연한 것이다. 엔지니어는 자기의 기술과 능력을 부정한 방법으로 사용하지 않아야 하며, 소프트웨어 공학 직업에 분쟁을 일으키지 않도록 하는 방법으로 사용해야 한다. 하지만 법에 의해서가 아니라 직업적 책임에 의해서 수행되어야 하는 다음과 같은 일이 있다.
1. 기밀 유지 : 엔지니어는 공식적인 기밀 유지에 관한 협약을 하지 않았다 하더라도 고객과 기업주에 대한 기밀을 유지해야 한다.
2. 능력 : 자기의 권한을 오해하지 않아야 한다. 엔지니어는 자기 능력 밖의 일을 맡아서는 안 된다.
3 지적 재산권 보호 : 특허와 저작권과 같은 지적 재산의 사용을 관리하는 법을 준수해야 한다. 고용주와 고객에 대한 지적 재산권이 보호된다는 것을 항상 인식하고 있어야 한다.
4. 컴퓨터 오용 : 자기의 기술을 이용해서 다른 사람의 컴퓨터를 오용해서는 안 된다. 컴퓨터 오용은 고용주의 컴퓨터에서 게임을 하는 사소한 오용에서부터 바이러스를 퍼뜨리는 극히 심각한 오용까지 광범위하다.
전문가 연구회와 기관이 윤리적 가치관을 확립하는 데 중요한 역할을 한다. ACM, IEEE 및 영국 컴퓨터 학회에서 전문가 윤리 강령을 만들었다. 그 조직의 회원은 회원에 가입하면서 그 규칙을 따르겠다고 서명한다. 그 규칙은 일반적인 윤리 행위에 관한 것이다.
ACM과 IEEE는 공동으로 실무와 윤리에 대한 행동 강령을 만들었다.
소프트웨어 공학 윤리 강령과 전문가 업무
소프트웨어 공학 윤리 강령과 전문가 업무에 관한 ACM/IEEE-CS 공동 특별 전문위원회
머리말
축약본은 높은 수준의 추상화 단계에서 목표를 요약했지만, 완성본에서 포함되는 내용은 이러한 목표가 우리가 소프트웨어 공학 전문가로 행동하는 방식을 변화시키는 사례와 세부 내역을 제시한다. 목표가 없다면 세부 내역은 형식적이고 장황해질 것이며, 세부 내역이 없다면 목표는 매우 과장되지만 하찮은 것이 될 수 있으므로, 목표와 세부 내역이 함께 결합된 강령을 구성한다.
소프트웨어 엔지니어는 소프트웨어의 분석, 명세화, 설계, 개발, 시험 및 유지보수를 유익하고 높이 평가되는 작업으로 만드는 데 전념해야 한다. 소프트웨어 엔지니어가 대중의 건강, 안전, 복지를 위해 전념하는 것에 맞추어, 다음의 8가지 원칙을 준수해야 한다.
1. 대중 - 소프트웨어 엔지니어는 대중의 이익과 일치하여 행동해야 한다.
2 고객과 고용주 - 소프트웨어 엔지니어는 자신들의 고객과 고용주의 최선의 이익이 대중의 이익과 일치하는 방식으로 행동해야 한다.
3. 제품 - 소프트웨어 엔지니어는 자신들의 제품 및 관련된 수정사항이 가능한 가장 높은 전문 표준을 준수해야 한다.
4. 판단 - 소프트웨어 엔지니어는 자신들의 전문적인 판단에서 정직성과 독립성을 유지해야 한다.
5. 관리 - 소프트웨어 공학 관리자와 리더들은 소프트웨어 개발과 유지보수의 관리를 윤리적인 접근법에 따라 진행해야 한다.
6. 직업 - 소프트웨어 엔지니어는 직업의 고결함과 명망을 대중의 이익과 일치시켜야 한다.
7. 동료 - 소프트웨어 엔지니어는 자신들의 동료에게 공정하고 협력적이어야 한다.
8. 자신 - 소프트웨어 엔지니어는 일생 동안 자신들의 직업의 실무에 대해 학습하는 데 참여해야 하고, 직업의 실무에 대해 윤리적인 접근법을 활성화시켜야 한다.
ACM/IEEE 윤리 강령
컴퓨터는 산업, 경제, 정부, 의학, 교육, 문화, 사회의 각 방면에서 중심적인 역할을 한다. 소프트웨어 엔지니어는 소프트웨어 시스템을 분석, 명세화, 설계, 개발, 인증, 유지보수, 시험에 직접 참여하거나 가르쳐서 공헌을 한다. 소프트웨어 시스템을 개발하는 그들의 역할 때문에, 소프트웨어 엔지니어는 좋은 일을 하거나 나쁜 일을 하거나, 혹은 다른 사람에게 좋은 일이 되게 하거나 나쁘게 하거나, 혹은 다른 사람에게 영향을 미칠 수 있는 중요한 기회를 갖는다. 가능하면 그들의 노력이 좋은 곳에 쓰일 수 있도록 하기 위해서, 소프트웨어 엔지니어는 소프트웨어 공학이 유익하고, 존경받는 직업이 될 수 있도록 자신에게 서약해야 한다. 이러한 서약과 함께, 소프트웨어 엔지니어는 전문가의 업무 수행과 윤리 강령을 따라야 한다.
이 강령은 학생과 교육생은 물론 전문적인 소프트웨어 엔지니어, 교육자, 실무자, 감독관, 정책 입안자에 의해 만들어진 행위와 의사 결정에 관계된 8개의 주요 원칙을 포함한다. 이 원칙은 개인, 집단, 조직이 참여하는 윤리적 책임 관계와 그 관계 내에서의 의무사항을 명시한다. 각 원칙은 그 관계에 포함된 의무사항을 예시할 수 있다. 이러한 의무사항은 소프트웨어 엔지니어의 작업에 의해 영향을 받는 사람들에 대한 관심, 소프트웨어 공학 실무의 독특한 요소인 소프트웨어 엔지니어의 인간성에 기초하고 있다. 이 강령은 소프트웨어 엔지니어가 되고자 하는 누구에게나 의무사항으로 규정되고 있다.
상이한 사람들이 서로 다른 관점과 목표를 갖고 있는 상황에서, 여러분은 윤리적 딜레마에 직면할 수 있다. 예를 들면, 만약 여러분 회사의 상사의 정책에 원칙적으로 동의하지 않을 경우 어떻게 행동하겠는가? 이것은 분명히 불일치의 성격과 개인의 성향에 좌우된다. 원칙을 포기하든지, 조직 내에서 자신의 위치를 포기하든지 해야 할 것이다. 만약 이러한 문제가 소프트웨어 프로젝트에서 생긴다면, 이것을 어떻게 고나리자에게 표출시킬 것인가? 만약 여러분이 그들과 단지 막연한 느낌만으로 논의한다면 당신은 상황에 과잉 대응했을 수도 있고, 만약 너무 늦었다면 그 문제를 해결하는 것이 불가능할 수도 있다.
이러한 윤리적 딜레마는 우리가 직업을 가진 동안에 직면하는 것이며, 다행이도 대부분의 경우에 그것이 비교적 중요하지 않으면 그다지 큰 어려움 없이 해결된다. 그것이 해결될 수 없을 경우에, 엔지니어는 아마도 다른 문제에 직면할 것이다. 원칙에 근거한 행동은 그 자리를 그만두는 것이지만, 그것은 파트너와 자신의 가족에게 영향을 미칠 수 있다.
전문가가 직면하는 특히 어려운 상황은 그들의 고용인이 비윤리적으로 행동할 때이다. 예를 들어, 어떤 회사가 안전성 중심(safety-critical) 시스템을 개발하는데, 시간 문제로 안전성 검증 기록을 거짓으로 작성했다고 하자. 고객에게 이것에 대한 비밀을 지키든지 혹은 폭로하든지 해야 하는 것이 엔지니어의 책임인가?
여기서의 문제는 안전성에 대한 절대적인 기준이 없다는 것이다. 시스템이 미리 정해진 기준에 의해 검증되지는 않았지만, 그러한 기준이 너무 엄격할 수도 있다. 그 시스템은 실제로 안전하게 작동 될 수 있다. 적절하게 검증이 되었다고 하더라도, 시스템이 고장나서 사고로 이어질 수도 있다. 문제를 초기에 폭로하는 것은 고용인들에게는 위험이 될 수 있지만, 문제를 폭로하지 못함으로써 다른 사람에게 손해를 입힐 수도 있다.
여러분은 이러한 문제에 대해 나름대로 결정을 해야 한다. 적절한 윤리적 행동은 참여하고 있는 개인의 관점에 따라 다르다. 이 경우에 손해 가능성, 피해의 정도, 손해에 의해서 영향받는 사람이 결정에 영향을 미친다. 만약 상황이 매우 위험하면, 국가의 언론 기관에 그것을 공표하는 것도 생각해 볼 수 있다. 그러나 당신은 달느 고용자들의 권리를 존중하면서 상황을 해결하려고 노력해야 한다.
다른 윤리적 문제는 군사적 혹은 핵 관련 시스템 개발에 대한 참여이다. 어떤 사람은 이러한 문제에 대해 심각하게 생각하여 군사 시스템과 관련된 시스템 개발에 참여하지 않으려고 한다. 다른 사람은 군사 시스템에는 참여하지만, 무기 시스템에는 참여하지 않는다. 다른 사람은 국가 안보가 최우선이기 때문에, 무기 시스템을 개발하는 데 윤리적 문제를 고려하지 않는다.
이러한 상황에서, 고용인과 피고용인 모드가 그들의 생각을 미리 알려 주는 것이 중요하다. 조직이 군사 혹은 핵물질과 관련되어 있으면, 피고용인은 어떠한 일도 받아들일 수 있도록 반드시 명시해야 한다. 만약 피고용인이 그러한 시스템의 작업에 참여하고 싶지 않으면, 고용인은 피고용인에게 참여를 강요해서는 안 된다.
윤리적 책임 및 직업적 책임과 관련이 있는 일반적인 분야가 과거 몇 년 동안 관심을 끌어 왔다. 윤리의 기본적인 원칙이 고려된 후, 소프트웨어 공학 윤리는 이러한 기본적인 원칙을 참고로 하여 철학적 관점에서 고려되어야 한다. 이것은 로돈이 택한 방법이며 다소 약하지만 허프와 마틴에 의해 선택된 방법이다.
그러나 이러한 방법이 너무 추상적이고 일상의 경험과 연관짓기가 너무 어려우므로, 좀 더 구체적인 방법을 선호한다. 윤리는 그들 자신의 권리의 주제로서가 아니라 소프트웨어 공학 관점에서 논의되어야 한다고 생각한다.
'공부 > 소프트웨어공학' 카테고리의 다른 글
[소프트웨어공학] 사회-기술적 시스템3 (시스템 통합에서 폐기까지) (0) | 2023.07.20 |
---|---|
[소프트웨어공학] 사회-기술적 시스템2 (시스템공학) (0) | 2023.07.19 |
[소프트웨어공학] 사회-기술적 시스템1 (창발성) (0) | 2023.07.18 |
[소프트웨어공학] 서론2 (소프트웨어 프로세스 모델과 소프트웨어 공학) (0) | 2023.07.15 |
[소프트웨어공학] 서론1 (소프트웨어란??) (0) | 2023.07.15 |