좋은 소프트웨어란?
포스트 난이도: HOO_Junior
# 좋은 소프트웨어
좋다는 의미가 추상적일 수는 있지만 소프트웨어에 있어서 좋고 나쁘고 가 확실히 존재한다. 같은 소프트웨어라도 어떤 식으로 개발이 되어 작동하는지에 따라 나쁜 소프트웨어가 될 수도 있고 좋은 소프트웨어가 될 수도 있다. 필자가 현직 개발자들과 이야기를 나눌 때도 좋은 소프트웨어 개발을 강조하거나 이제 막 프로그래밍 공부를 하는 학생들에게 좋은 소프트웨어 개발을 할 수 있는 습관을 항상 입이 닿도록 이야기를 한다. 그만큼 결과가 같은 소프트웨어를 개발할지라도 어떻게 개발되었는지에 따라 좋고 나쁨이 나뉜다.
# 소프트웨어의 기본기를 모를 경우
좋은 소프트웨어를 만드는 게 특별한 능력이 아니다. 좋은 소프트웨어를 만드는 것은 필수이며, 소프트웨어의 기본적이 개발 방식이다. 그럼에도 불구하고 최근에 소프트웨어에 있어서 좋고 나쁨이 대두되는 이유는 기본 개념을 모르는 개발자들이 많기 때문이다. 그냥 프로그램 개발을 할 수 있다고 해서 개발자가 아니라는 것이다. 전공자들의 경우에는 수업에서 이러한 기본 개념들을 익히고 연습할 수 있지만 비전공자들은 기본 개념을 공부할 수 있는 기회가 없다. 물론 대충 수업을 듣고 졸업한 CS 관련 졸업자라면 당연히 기본 개념을 몰라 일명 더럽게 코딩을 하고 욕을 먹는 경우도 허다하지만 비전공자들의 경우에는 공부를 하고 싶어도 공부를 할 수 있는 방법이 없다. 물론 실무에서 개발을 하고 사수를 통해 교육을 받으면서 좋은 소프트웨어를 개발하는 방식에 대한 부분을 몸으로 익힐 수 있다. 하지만 그전까지 고생과 고정관념 속에서 스트레스를 받을 수밖에 없다. 따라서 이번 포스트를 통해 막상 보면 간단한 내용이지만 꼭 알아두어야 하는 좋은 소프트웨어를 만드는 기본 개념에 대해서 살펴보도록 하겠다.
#좋은 소프트웨어의 기본: Maintainability
Maintainability는 유지 관리성으로 소프트웨어 자체의 유지 관리가 용이해야 한다. Computer sicence와 같은 학술적인 부분 말고 실제로 Software development에 있어서는 유지 관리성이 중요하다. 소프트웨어도 사회적 변화 또는 시간의 흐름에 따라 사용자 또는 고객이 원하는 방향성대로 업데이트나 보완을 지속적으로 해줘야 한다. 그렇다 보니 기존에 개발한 소프트웨어를 기반으로 업데이트된 새로운 버전의 소프트웨어를 만들어야 하는데 이때 중요한 점이 바로 유지 관리 성인 것이다. 유지 관리가 용이할수록 소프트웨어 업데이트를 정확하고 신속하게 할 수 있다는 점에서 소프트웨어는 유지 관리성이 중요하다.
# 좋은 소프트웨어의 기본: Dependability
Dependability는 소프트웨어의 신뢰성을 의미한다. 소프트웨어가 기능적으로 작동은 하지만 실질적으로 사용자에게 신뢰를 주지 못한다면 아무도 해당 소프트웨어를 사용하지 않을 것이다. 심지어 해당 소프트웨어를 사용함으로써 사용자에게 피해를 준다면 이것 역시 해당 소프트웨어 개발 기업은 큰 피해를 입게 될 것이다. 따라서 소프트웨어 개발에 있어서 신뢰성 부분이 정말 중요하다. 여기서 말하는 신뢰성은 보안이나 소프트웨어 자체의 안전성, 또는 소프트웨어의 확실성 등을 말한다. 한마디로 소프트웨어를 사용함으로써 사용자에게 피해를 주거나, 반대로 소프트웨어가 공격을 받는 일이 없어야 한다는 것이다.
#좋은 소프트웨어의 기본: Efficiency
Efficiency는 소프트웨어의 효율성을 의미한다. 효율성은 소프트웨어 개발자라면 꼭 알아야 되는 부분이다. 똑같은 소프트웨어를 만들더라도 얼마큼 효율적인 소프트웨어를 개발하는지가 개발자의 능력을 보여준다. 여기서 말하는 효율성은 소프트웨어 자체가 신속하고 정확하게 작동되는 것뿐만 아니라 소프트웨어를 작동하는데 필요로 하는 메모리 사용량도 포함된다. 같은 소프트웨어라도 얼마나 적은 메모리로 프로그램 작동이 되는지가 중요한데 쉽게 말해서 소프트웨어의 최적화가 효율성에 포함되는 부분이기도 하다. 얼마나 최적화된 소프트웨어를 개발하는지가 개발자에게 중요한 부분이며 아주 근본적인 부분으로 거슬러 올라가자면, 알고리즘 공부를 잘해야 한다는 소리이다.
#좋은 소프트웨어의 기본: Acceptability
Acceptability는 개발자가 아니라도 평상시에 많이 들어본 부분일 것이다. Acceptability는 접근성, 또는 용인성을 의미하는데 스마트폰이나 프로그램을 사용하다 보면 자주 보는 부분이다. 소프트웨어 개발에 있어서 접근성이 중요한 이유는 소프트웨어는 단독적으로 작동하고 결과를 산출하는 경우가 적다. 사용자가 소프트웨어 사용에 용이해야 한다는 점 외에도 소프트웨어 간 접근성이 좋아야 한다는 것이다. 한마디로 호환성이라는 부분도 Acceptability에 포함되는 이야기이다. 예를 들어, 센서 소프트웨어를 개발했는데 특정 Micro Control Unit에서만 연결되어 작동된다면 Acceptability가 제대로 이루어지지 않았다고 본다. 쉽게 생각해서 다양한 MCU와 결합하여 사용이 불가하기에 대중적으로 사용을 할 수 없게 된다는 것이다. Accptability 부분이 이해하기 어렵게 느껴질 수도 있지만 쉽게 말해서 다양한 시스템과 호환(Compatible with)이 되어야 한다는 점을 이해하면 된다.
#다양한 좋은 소프트웨어의 기본
소프트웨어 개발에 있어서 알아두어야 할 기본 개념은 이외에도 다양하다. 하지만 대표적으로 4가지는 꼭 알아 두어야 하는 개념이며, 이 4가지 개념을 기본으로 세부적으로 다양한 개념들이 존재한다. 예를 들면 Adaptability, Accuracy, Robustness, Reusability 등 정말 세부적으로 다양한 기본 개념들이 있지만 사실상 앞선 대표적인 4가지에 포함되는 내용들이다. 따라서 4가지 기본 개념을 알아둔다면 실무에서 스트레스를 덜 받으며 세부적인 부분은 배울 수가 있다.
# In conclusion, 3줄 요약
1. 소프트웨어 개발자가 알아두어야 하는 소프트웨어 개발의 기본 개념
2. 대표적인 4가지 기본 개념을 알아두어야 올바른 소프트웨어 개발이 가능하다.
3. 4가지 기본 개념을 알아둔다면 세부적인 개념은 실무에서 경험을 통해 익힐 수 있다.
'Computer Science' 카테고리의 다른 글
[Programming] COTS System이란? (0) | 2021.09.27 |
---|---|
[Programming] 소프트웨어 개발자란? (0) | 2021.09.27 |
[Programming] Big O Notation(빅오 표기법): O(n^2) Example Codes (0) | 2021.09.12 |
[Programming] Asymptotic Bounding #01: Upper bound, Lower bound, Tight bound (0) | 2021.09.12 |
[Programming] 소프트웨어 개발 방법론(Software Development Methodologies) (0) | 2021.09.12 |
댓글