본문 바로가기

ComputerScience/Software Engineering

소프트웨어공학 - 1. Introduction

728x90

1. What is Software Engineering?

- 소프트웨어 제품의 생산의 모든 것을 말한다.

- 소프트웨어 개발, 유지보수를 위한 체계적이고 규칙이 있는 정량가능한 접근 방법을 소개한다. 

- 소프트웨어의 규모가 점점 커짐에 따라 여러명의 개발자와의 협업이 불가피하기 때문에 이 학문의 중요성은 크다.

- 즉 소프트웨어가 생산되는 과정에 집중해서 공부할 것이다.

- 앞으로 뭘 배울것인지 간략하게 소개해보겠다.

2. Topics

  • Software development process
    • 1. 사용자의 요구조건 분석
    • 2. 소프트웨어 모델링
    • 3. Architecture & design
    • 4. Development
    • 5. Vaildation, verification
  • Project Management
  • Configuration Management (version etc.)

3. 소프트웨어의 특징

- 건물, 전자제품 같은 공산품의 특성은 개발단계 이후 안정단계에서 오류율이 유지되다가 시간이 지남에 따라 부품의 수명이 다해 오류율이 상승한다.

- 반면 소프트웨어는 썩어 없어지는 것은 아니기 때문에 이상적으로는 오류율이 다시 상승하지 않아야 한다. 하지만 의존하는 하드웨어/소프트웨어 등의 업데이트에 따라서 필연적으로 오류율이 증가한다. 따라서 다른 공산품과 달리 개발 이후에도 꾸준히 오류율의 관리를 위한 유지보수가 필요하다.

- 2 man-month라는 뜻은 2명의 개발자면 그 프로젝트를 한달안에 완성할 수 있다는 뜻이다.

- 벽돌로 벽을 쌓는 일의 경우, 사람 간의 communication이 덜 중요하기 때문에 산술적으로 2 man-month라면 4 man-half month로 단축이 가능할 것이다. 하지만 소프트웨어의 경우는 위 곡선처럼 communication이 중요한 프로젝트의 경우는 work가 늘어난다고 해서 man month가 줄어드는 것이아니라 오히려 증가한다.

- 즉 개발자를 투입만 한다고 해서 개발 시간이 단축된다고 장담하기 어렵기 때문에 더더욱 소프트웨어에 대한 공학적 접근 방법이 중요해졌다.

4. Software development process

- 소프트웨어 개발 프로세스는 여러 형태가 있다. 한 단계씩 차례로 개발 과정이 진행될 수도 있고 오른쪽 그림처럼 요구조건 파악이 끝나면 구체화하는 과정에서 나오는 버전을 가지고 지속적으로 피드백을 반영하여 최종 버전을 완성할 수도 있다.

5. software modeling

- 개발하고자하는 (복잡하고 방대한) 시스템의 추상화된 표현(핵심)으로 UML등을 만드는 것을 말한다.

- 아직 실체가 없는 시스템의 모델링을 통해 여러 개발자, 소비자, 비지니스 관계자와 아이디어를 공유한다.

6. Software Architecture

- 아키텍쳐는 한번 결정하면 나중에 바꾸기가 불가능하거나 매우 어렵기때문에 초기 아키텍쳐 디자인이 매우 중요하다.

- 따라서 시스템의 성능 향상, 확장을 고려해서 아키텍쳐를 디자인 해야 한다.

7. software design

- 소프트웨어 설계를 위한 원칙들을 따라서 디자인을 한다.(객체지향프로그래밍)

- Abstraction

- Information Hiding/Encapsulation

- SOC (seperation of concerns) : 문제 해결을 위해 관심사의 분리(문제의 범위를 한정)

- Interface

- Modularity

8. Verification & Validation

- 예외 처리 유닛 테스트(아주 중요) 등 소프트웨어의 작동을 점검하는 단계이다.

- 프로그램의 인풋 아웃풋만을 비교해서 잘 동작하는지 (black box) 인풋이 우리가 설계한 알고리즘대로 잘 동작하여 아웃풋을 내는지(white box)

9. Recent Advance in software engineering

1. software repository mining

- 데이터 마이닝과 소프트웨어 공학의 합작으로 소스 코드들 같의 의존성을 파악하고 약하게 만드는 방법등이 생겨났다.

- 오픈소스들은 git을 통해 언제 누가 어떤 버그를 발견하고 고쳤고 등의 모든 정보들이 담겨있다. 이 정보들을 가지고 데이터 마이닝 기법으로 의미있는 정보들을 발견할 수 있다.

- 실제로 모질라에서는 시스템의 1684개의 파일들간의 의존성을 데이터 마이닝으로 찾아내고 이를 낮추는 발전을 이루었다. 이는 유지보수성의 향상으로 연결된다.

2. AI assisted Software tool

- 프로그램에서 버그리포트가 발생하면 bug triager라는 사람이 그 버그리포트를 확인하고 버그 발생 원인 영역 등을 파악하여 직무에 맞는 개발자에게 작업을 할당한다.

- 수백 수천개의 버그 리포트가 올라올 수 있고 이 오류는 그 심각성을 떠나서 실제로 개발자에게 할당되는데 시간이 많이 걸릴 수 있다.

- 어떤 개발자가 어떤 버그를 해결했는지의 데이터를 학습시킨 ai가 버그 리포트 배정의 작업을 도와주는 툴이 생겼다. 즉 버그 해소의 기여한다.

728x90
반응형