소프트웨어 위기의 원인에 대해서 3가지에 대한 이야기가 나왔는데, 궁금한 점이 있어서 여쭙습니다.
1. 소프트웨어 관리 부재라고 나온 부분에 대해서, 관리에 대한 개념이 모호합니다. 구체적인 예시가 있었으면 합니다.
2. 프로그래밍에만 치중이라고 적혀있습니다만. 외국 위키피디아에서 본 내용을 기반으로 말하자면
(https://en.m.wikipedia.org/wiki/Software_crisis) =>
소프트웨어 위기가 발생하는 경우에 대해서 “프로젝트가 관리되지 않음과 동시에 코드를 유지하기가 힘든 상태”라고 나와있습니다.
보통 소프트웨어 개발 시에 프로그래밍을 잘하려는 이유는, 코드를 체계적으로 구성하는 과정을 주기적으로 수행함으로써
결과적으로 소프트웨어의 품질이나 유지보수에 보다 적은 시간을 할애할 수 있는 환경을 제공함이라고 알고 있는데요. 물론 실제로 그렇게 합니다.
그런데, 책에서는 “프로그래밍만 치중”이라는 걸 이유라고 들으셨는데 구체적인 이유가 궁금합니다.
안녕하세요 길벗수험서 운영팀입니다.
먼저 교재의 문구는 실제 시험에 출제되었던 문구들을 활용하여 기재했음을 알립니다.
원론서나 전문서적 정도로 상세하게 다루기 어렵다는 점 양해 부탁드립니다.
[1]
관리부재는 형상 관리와 개발 중에 발생하는 요구 사항들을 수용하는 과정을 통제하는 관리 기법의 부재 등을 들 수 있겠네요.
개발 중 버전관리, 외부 작업자들과의 패치 및 풀 등의 작업 시 동기화가 제대로 이루어지지 않는 경우가 형상관리의 부재의 예가 되겠고,
요구 사항 통제는 개발 중간에도 지속적으로 받는 피드백으로 인해 요구 사항들이 추가로 발생할 수 있는데, 이를 적용하지 못하거나 적용하더라도 적절한 프로세스가 존재하지 않아 설계 전체에 영향이 발생하는 현상을 예로 들 수 있을 것 같습니다.
[2]
음.. 조금 오해할 수 있는 문구라고 생각합니다.
의미는 말씀하신 바와 동일합니다.
프로그래밍에만 치중 한다는 의미는 요구사항 분석, 아키텍처 설계, 디자인 설계 등을 고려하지 않고 단순히 알고리즘 구현만을 위해 코딩 위주로 프로그램을 구현하는 주먹구구식 프로그래밍을 의미합니다.
가장 기본적인 소프트웨어 생명주기(SDLC)만 봐도 시작 - 요구사항 분석 - 설계 - 구현 - 테스트 - 유지보수 정도는 이루어집니다. 이러한 과정을 통해야 처음의 요구사항이 적절히 반영되고, 설계를 통해 이후 확장성을 염두해 둘지 아니면 콤팩트하게 프로그램을 구현할지가 정해져 의뢰자가 원하는 프로그램에 가깝게 만들어지죠.
단순히 분석이나 설계 없이 구현 위주의 소프트웨어를 생산하는 경우 이후 발생할 상황에 대처하기 어려워, 추가적인 요구사항을 반영하기 위해 프로그램을 기초부터 고쳐야하는 상황이 발생할 수 있죠. 이를 처음부터 예상하여 설계에 반영했다면... 적어도 기초부터 고쳐야 할 필요는 없을 것입니다.
(애초에 예상치 못한 상황의 발생으로 인한 유지보수는 두 경우 마찬가지로 많은 비용이 소모됩니다.)
행복한 하루되세요 :)
-
관리자2019-07-29 15:42:41
안녕하세요 길벗수험서 운영팀입니다.
먼저 교재의 문구는 실제 시험에 출제되었던 문구들을 활용하여 기재했음을 알립니다.
원론서나 전문서적 정도로 상세하게 다루기 어렵다는 점 양해 부탁드립니다.
[1]
관리부재는 형상 관리와 개발 중에 발생하는 요구 사항들을 수용하는 과정을 통제하는 관리 기법의 부재 등을 들 수 있겠네요.
개발 중 버전관리, 외부 작업자들과의 패치 및 풀 등의 작업 시 동기화가 제대로 이루어지지 않는 경우가 형상관리의 부재의 예가 되겠고,
요구 사항 통제는 개발 중간에도 지속적으로 받는 피드백으로 인해 요구 사항들이 추가로 발생할 수 있는데, 이를 적용하지 못하거나 적용하더라도 적절한 프로세스가 존재하지 않아 설계 전체에 영향이 발생하는 현상을 예로 들 수 있을 것 같습니다.
[2]
음.. 조금 오해할 수 있는 문구라고 생각합니다.
의미는 말씀하신 바와 동일합니다.
프로그래밍에만 치중 한다는 의미는 요구사항 분석, 아키텍처 설계, 디자인 설계 등을 고려하지 않고 단순히 알고리즘 구현만을 위해 코딩 위주로 프로그램을 구현하는 주먹구구식 프로그래밍을 의미합니다.
가장 기본적인 소프트웨어 생명주기(SDLC)만 봐도 시작 - 요구사항 분석 - 설계 - 구현 - 테스트 - 유지보수 정도는 이루어집니다. 이러한 과정을 통해야 처음의 요구사항이 적절히 반영되고, 설계를 통해 이후 확장성을 염두해 둘지 아니면 콤팩트하게 프로그램을 구현할지가 정해져 의뢰자가 원하는 프로그램에 가깝게 만들어지죠.
단순히 분석이나 설계 없이 구현 위주의 소프트웨어를 생산하는 경우 이후 발생할 상황에 대처하기 어려워, 추가적인 요구사항을 반영하기 위해 프로그램을 기초부터 고쳐야하는 상황이 발생할 수 있죠. 이를 처음부터 예상하여 설계에 반영했다면... 적어도 기초부터 고쳐야 할 필요는 없을 것입니다.
(애초에 예상치 못한 상황의 발생으로 인한 유지보수는 두 경우 마찬가지로 많은 비용이 소모됩니다.)
행복한 하루되세요 :)