brunch

소프트웨어 공학 지식 체계 문서에 드러난 AI와의 관계

인공지능 시대의 소프트웨어 공학

by 안영회 습작

소프트웨어 공학을 주제로 몇 시간 같이 떠들 사람은 주변에 많지 않습니다. 그런데, 아주 뜻밖에 그런 대화를 하는 중에 상대인 아재 개발자 님이 까맣게 잊고 있던 이름 'SWEBOK'을 꺼냈습니다. 그래서, 바로 다음날 찾아서 파일을 열어 보았습니다.


18년 만에 열어 본 소프트웨어 공학 지식 체계[1] 문서

지메일에 채팅 기록이 남아 있어서 제가 2007년에 업계 동료에게 SWEBOK을 참고하라고 했던 대화 기록이 있었습니다. 하지만, 2010년 이후에는 실무에서 SWEBOK이 필요한 경우는 없었던 것으로 기억합니다. 그랬기 때문에 2025년 SWEBOK이 과연 어떤 의미가 있을까 싶어서 자연스럽게 비판적인 시선으로 보게 되었습니다. 그나마도 지인의 발언 때문에 호기심이 생긴 것이죠.

문서 표지를 보니 올해 5월에 릴리즈 된 따끈따끈한 문서였습니다. 문서 개정 이력이 보이지 않아 퍼플렉시티에게 찾아서 정리해 달라고 요청했더니 2004년 이후에는 대략 10년 단위로 개정된 것이 보였습니다. 제가 마지막으로 봤던 것은 아마 v2였을 것 같은데, 지금 보는 것은 v4네요.


일본의 소프트웨어 업계에 대한 통념

그리고 발행인이 일본 와세다 대학 교수인 Hironori Washizaki(鷲崎弘宜)란 점이 눈에 띄었습니다. 지나치게 문서와 절차 중심으로 치우친 문화로 소프트웨어 분야에서 일본이 뒤쳐져 왔다는 통념과 배치되어서 그런 듯합니다. 하지만, 최근에는 인공지능 기술과 그 활용에 대해서는 조금 다른 양상이 있다고 얼핏 들었는데 그런 영향이 있나 싶기도 했습니다. 물론, 근거가 별로 없는 상태에서 넘겨 짚기에 지나지 않을 수도 있습니다. 또한, 최근 발견한 'AI-Driven Development Life Cycle'을 주도하는 Raja SP의 타이틀이 the Head of Developer Acceleration (DevAx) for the Asia-Pacific and Japan (APJ)이란 점도 짐작의 근거로 작용한 것 같습니다.


하지만, 제가 일본 소프트웨어 업계 경험이 전혀 없고, 저들의 이름도 그저 문서로만 본 것이라 제 짐작은 그다지 신빙성 있는 정보라 할 수는 없습니다.


인공지능이 추가된 컴퓨팅 기초 지식 영역

SWEBOK v4는 18개 지식 영역(Knowledge Area)으로 구성되어 있는데, 16번째 지식 영역인 컴퓨팅 기초(Computing Foundations)의 9번째 하위 요소로 추가되었고, 분량 자체는 많지 않았습니다.


인상적인 인공지능은 신뢰성 획득 문제

내용도 훑어보았습니다. 가장 먼저 눈에 띈 것은 다음 문장이었습니다.

An ideal AI system would be one that a human could not identify it as a computer; humans would not be able to distinguish the computer from a human being.

간단히 말해 사람이 한 것인지 컴퓨터가 한 일인지 구분이 안 되는 것이 이상적이라는 것이죠. 하지만, 현실은 그렇지 않습니다. 소위 AI 환각(Hallucination)은 AI 사용자라면 누구가 경험하는 현상이고, <바이브 코딩과 증강 코딩은 다르다>에서 다룬 대로 바이브 코딩에는 원치 않는 코드가 많이 포함되곤 합니다.

우연한 계기로 참석한 모임에서 인공지능 신뢰성 전문가를 만날 수 있어서 '신뢰성'이라고 불리는 거대한 연구 영역의 존재를 알게 되었습니다. 또한, 그에게 'Judge LLM'이라는 개념도 처음 들었고, 찾아보니 관련 논문도 공개되어 있음을 알게 되었습니다.


바라는 것과 결과의 차이가 신뢰성 문제

그런데 우리의 기대와 다른 결과를 두고 비단 AI에 대한 실망과 회의론으로 흐르는 대신에 '불일치 문제' 자체를 있는 그대로 바라본 적이 있습니다. 불일치 문제 자체를 본다는 말이 뭘까요? 작년에 썼던 고통을 다룬 글의 도식을 응용해서 설명할 수 있습니다.


글쓰기 습관이 지식 전이를 만드는 것 같습니다. 고통은 바람과 인식이 다른 상태에 느끼는 감정이나 마음의 상태를 말한다 할 수 있습니다. 반면에 인공지능이 내놓는 결과는 고통보다는 불일치가 불러오는 불신이 문제인데, 바라는 것과 실제 받은 결과의 차이란 점은 같습니다.


다만, 불일치가 클수록 믿지 못하게 되고, 일치할수록 신뢰가 커지니 이를 신뢰성이라고 부르는 현상이 이해가 됩니다.


결정적 세계와 확률적 세계의 불일치

최근에 (AI 관련 발표를 준비하면서) 불일치의 원천에 대해 생각해 본 일이 있습니다. 일반적으로 프로그래밍이라고 하면 엄격한 규칙을 요구하는 컴파일러를 기반으로 합니다. 그래서, 응용 프로그램 중에서 비즈니스를 다루는 것일수록 수많은 입력값에 따라 조건문을 만드는 형태로 여지를 둘 뿐이죠. 반면에 인공지능은 확률적인 기반에서 '언어적 일관성'에 따라 생성을 합니다.

저는 소프트웨어 경험으로 인해 ORM(Object–relational mapping)에 익숙합니다. ORM은 객체Object와 릴레이션Relation이라는 서로 다른 체계의 본질적 불일치를 맞추는 개념이자 도구입니다. 이렇게 익숙한 개념에 빗대어 인공지능의 신뢰성 문제도 비슷한 맥락으로 볼 수 있습니다.


SWEBOK이 보는 인공지능과 소프트웨어 공학의 관계

계속해서 SWEBOK v4에서 인공지능 관련 내용을 훑어보니 '9.6. AI and Software Engineering' 단락이 눈에 띄었습니다. 단락의 앞부분에서 이들의 관계를 둘로 나누고 있습니다.

Software engineering and AI are mutually related to each other in basically two ways: AI applications in software engineering (i.e., AI for SE) and software engineering for AI systems (i.e., SE for AI).

소프트웨어 공학에 AI를 활용하는 것과 반대로 AI 시스템 개발에 소프트웨어 공학을 적용하는 것이죠. 전자를 AI for SE라고 불여서 부르는데, 개괄적 정의를 보니 그 출처가 IEEE 논문인 <A Literature Review of Using Machine Learning in Software Development Life Cycle Stages>이었습니다. 그리고 전통적인 개발 방식과 AI for SE의 차이를 언급한 내용은 <G. Salvendy, Handbook of Human Factors, 4th ed., Hoboken, NJ: Wiley, 2012.> 책을 인용하고 있었습니다.


후자인 SE for AI는 <Software Engineering for AI-Based Systems: A Survey>와 <Software Engineering Patterns for Machine Learning Applications (SEP4MLA)>를 참조하고 있음을 알게 되었습니다.


주석

[1] BOK를 '지식 체계'로 번역한 것은 퍼플렉시티의 제안에 따른 것입니다.


인공지능 시대의 소프트웨어 공학 연재

(7회 이후 링크만 표시합니다.)

7. 소프트웨어 설계는 어떻게 새롭게 정의할 수 있나?

8. 컨텍스트 엔지니어링 프레임워크

9. 컨텍스트 엔지니어링 분류 체계와 구현 기술의 진화 양상

10. 목적에 따라 소프트웨어 설계 활동의 양상이 달라진다

11. 밀가루 반죽과도 같은 소프트웨어 모델

12. 생각을 나눠 요소를 만드는 일의 어려움

13. 컨텍스트 엔지니어링과 다중 에이전트 시스템

14. 객체 식별의 어려움에서 기인한 패턴들

15. 비즈니스 개념을 담은 식별 기준이 된 DDD

16. 의사결정 부담을 줄여주는 패턴과 if로 시작하는 조건문

17. 프로그래밍 개체의 식별과 레코드의 식별

18. RDBMS 종속 객체 지향 프로그래밍 아닌가?

19. 암묵적 세계 모델과 명시적 언어 모델

20. AI로 소프트웨어 개발을 돕는 도구의 쓰임새

21. 인공지능 시대의 개발자로 자신을 개발하기

22. 내 코드에서 일정한 질서와 규칙에 따라 흐르는 원리


keyword
이전 13화인공지능 시대의 개발자로 자신을 개발하기