What We Know We Don't Know: Empirical Software Engineering

Hillel Wayne

우리가 모른다는 것을 아는 것: 실증 소프트웨어 공학

원문은 Hillel Wayne님이 에 게재했습니다. 이 블로그 구독하기

이 발표는 DDD Europe 2024에서 진행된 버전입니다.

기술은 수조 달러 규모의 산업이지만, 무엇이 가장 좋은 실천 방식인지에 대해서는 거의 아는 것이 없습니다. 실증 소프트웨어 공학(Empirical Software Engineering, ESE)은 소프트웨어에서 무엇이 효과가 있고 왜 효과가 있는지를 연구하는 분야입니다. 직관에만 의존하는 대신 데이터를 수집하고, 연구를 수행하며, 그 결과를 동료 검토합니다. 이번 발표에서는 소프트웨어에 관한 사실들을 실증적으로 어떻게 찾아내는지, 그리고 그 과정에서 마주하는 여러 난관에 대해 다룹니다. 마지막에는 기존 연구를 찾는 방법에 대한 가이드와 DDD에 대해 우리가 배운 것들을 정리해 소개합니다.

발표 자료는 여기에서 확인할 수 있습니다.

출처

발표에서 언급한 논문들의 링크를 모아 두었습니다. 직접 읽어보실 수 있습니다.

서론

빅데이터는 노트북보다 느리다

Scalability! But at what COST?

왜 중요한가

섹션 참고 자료

The Pragmatics of TDD

TDD is dead. Long live testing.

연구 방법

통제 실험

Comparing syntax highlightings and their effects on code comprehension

자연 실험

Simple Testing Can Prevent Most Critical Failures

궤도를 이탈한 자연 실험

A Large Scale Study of Programming Languages and Code Quality in Github (원래 결함이 있던 연구)

On the Impact of Programming Languages on Code Quality (재현 연구)

이 소동에 대한 6,000단어 분량의 정리 글

관찰 연구

Fixing Faults in C and Java Source Code: Abbreviated vs. Full-Word Identifier Names (프리프린트)

DDD

서베이 논문

Domain-Driven Design in Software Development: A Systematic Literature Review on Implementation, Challenges, and Effectiveness

흥미로운 논문들

Design, Monitoring, and Testing of Microservices Systems: The Practitioners’ Perspective

Practitioner Views on the Interrelation of Microservice APIs and Domain-Driven Design: A Grey Literature Study Based on Grounded Theory

Refactoring with domain-driven design in an industrial context

Tackling Consistency-related Design Challenges of Distributed Data-Intensive Systems - An Action Research Study

서베이 논문에는 이 외에도 흥미로운 논문들이 많이 있지만, 여기서는 발표에서 다룬 것들만 소개합니다.

추가 자료

추천 도서

Teaching tech together

Leprechauns of Software Engineering

The Programmer’s Brain

Making Software

무료 연구 자료

It Will Never Work In Theory

ACM digital library

ArXiv

질문과 답변

과학은 DDD 전반에 대해 뭐라고 말하나요? DDD는 좋은 건가요, 나쁜 건가요?

이건 과학이 답할 수 있는 질문이 아닙니다. “경쟁은 좋은 것인가”라고 묻는 것과 비슷합니다. 범위가 너무 넓고 기준도 모호해서 의미 있는 답을 내놓을 수가 없습니다.

대신 DDD를 구성하는 구체적인 실천들과, 그것이 프로젝트에 미치는 구체적인 영향을 살펴봐야 합니다. 바운디드 컨텍스트를 적용하는 마이크로서비스 아키텍트는 DDD를 전혀 사용하지 않는 아키텍트보다 서비스를 더 많이 만들까요? 이벤트 스토밍으로 모델링된 도메인은 그렇지 않은 도메인과 ‘다르게’ 보일까요? CQRS를 사용하는 시스템에서 가장 흔한 고유한 문제는 무엇일까요?

“추상적으로 사고하기”를 가르치는 방법에 대한 연구가 있나요?

당장 떠오르는 바로는 Shriram Krishnamurthi의 연구 목록을 먼저 찾아보겠습니다. 그의 그룹은 추상화를 더 잘 가르치는 방법에 집중하고 있으며, 이를 탐구하는 흥미로운 도구들을 많이 개발했습니다.

“어떤 언어가 더 오류를 많이 일으키는가”를 연구하는 것 자체가 의미가 있을까요? 어쩌면 언어마다 다른 부류의 사람들이 모이고, 정말 중요한 건 그 사람 자체일지도 모르는데요.

원 논문을 반박한 영상에서 Jan Vitek도 이것이 원 논문의 근본적인 문제라는 점에 동의하지만, 방법론적 오류가 더 결정적으로 증명하기 쉽기 때문에 재현 연구에서는 그 부분을 집중적으로 다뤘다고 말합니다. 자세한 내용은 제 정리 글을 참고하세요.

소프트웨어 개발자들이 새로운 기법을 도입하고 과학자들이 이를 연구하기까지 보통 얼마나 걸리나요?

글쎄요, 모르겠습니다. 죄송합니다.

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.

댓글