본문 바로가기
반응형

CS/소프트웨어 공학 에센셜25

소프트웨어 공학 용어 정리 [기본 용어] - 매개변수(parameter) - 컴파일(compile) : 특정 언어로 작성된 시스템을 다른 언어의 동등한 시스템으로 변환하는 것 - 클러스터(cluster) : 모듈의 묶음 - 시제품(prototype) - 릴리즈(release) : 고객에게 인도되는 제품 - 이터레이션(iteration) : 하나의 릴리즈를 더 분할한 단위 - 아키텍처(architecture) : 설계 방식(도면) - 리펙토링(refactoring) : 소프트웨어를 쉽게 이해하고 적은 비용으로 수정할 수 있도록 기존 코드 설계를 개선하는 기술 - 오픈 소스(open source) 프로젝트 : 개방형 협업 개발 - 디버깅(debugging) : 오류 수정 - 마일스톤(milestone) : 프로젝트 진행 과정에서 특기.. 2021. 7. 4.
(Fin) 프로젝트 범위, 원가, 일정 관리 Preface 일정 계획 수립과 관련된 내용을 공부하던 도중 한 가지 의문점이 생겼다. '일정 계획을 세울 때 대부분 의존 관계를 사용하는 이유가 무엇일까?' 해당 책에선 프로세스의 유연한 흐름을 위해 의존 관계를 사용한다고 서술하고 있지만, 내 생각은 조금 다르다. 각각의 프로세스가 의존 관계를 유지한 상태로 흘러간다면 오류 수정에 있어 오히려 불편할 뿐더러 단위 테스트 등 해당 프로세스만을 검사하기 어렵지 않을까? 하루 빨리 실제 프로젝트를 진행해보며 이러한 의문점들에 대한 해답을 직접 찾고 싶다. - 프로젝트 범위 관리 : 프로젝트의 성공을 위해 해야 할 일과 하지 말아야 할 일의 경계 설정 - 원가 산정 : 프로젝트 전체 비용을 예상 - 일정 관리 : 프로젝트 전체 일정 개발 1. 프로젝트 범위 .. 2021. 7. 4.
소프트웨어 검증 및 확인 Preface 후반부에는 비슷한 내용(소프트웨어의 품질 향상 등)이 반복된다. 마지막 장인 다음 장을 공부한 이후 전체적으로 복습하는 시간을 갖도록 하자. 한 가지 고민이 있다면 운영체제 책 결정에 관한 것이다. 원서를 해석한 길고 어려운 책으로 시작하여 시간이 오래 걸리더라도 완벽히 이해하고 넘어가는 것이 좋을지, 비교적 짧고 쉽게 적힌 책으로 빠르게 이해하고 넘어가는 것이 좋을지 아직은 잘 모르겠다. - 추적성 : 서로 다른 단계의 요구사항들 사이에 연관 관계를 제공하는 기술 - 소프트웨어 확인 및 검증(V&V : Validation and Verification) - 확인 및 검증의 목적 1) 신뢰성 확보 2) 유지보수성 확보 3) 확장성 확보 1. 확인 - 사용자의 요구사항을 올바르게 이해하는 과.. 2021. 7. 3.
소프트웨어 형상 관리 Preface 소프트웨어는 이렇다 할 실체가 없는 만큼 각 개발 단계의 산출물인 문서를 정확히 기록하고 관리하는 것이 중요하다는 것은 지난 포스팅들에서도 번번이 언급되었다. 개발 라이프사이클과, 품질 관리 등 개발 전 과정에서 사용되는 다양한 문서 관련 지식을 배우면 배울수록 실무 현장에 뛰어들었을 때 다른 개념들에 비해 많은 도움이 될 것 같다는 생각을 했다. - 형상 관리 : 제품 개발 과정에서 요구되는 일반적인 관리 절차 - 소프트웨어의 형상 : 개발 과정에서 생산되는 산출물인 문서 - 소프트웨어 형상 관리(SCM : Software Configuration Management) : 각 개발 단계의 산출물을 관리하는 모든 활동 1) 형상 식별 2) 형상 통제 3) 형상 보고 4) 형상 감사 및 검토.. 2021. 7. 1.
품질 관리와 프로세스 개선 Preface 이번 장을 공부하며 소프트웨어 공정 과정에서 매우 중요시 하는 품질 관리가 개발 라이프사이클에 포함되어 있지 않은 이유에 대해 생각해보았다. 그 결과 품질 관리는 어느 특정 단계에서만 실시되는 것이 아닌, 개발 전 과정에 걸쳐 이루어지는 것이므로 독립적인 개념으로 설명할 수밖에 없다는결론을 내릴 수 있었다. 또한, 대입 시험을 예시로 든 CMMI 모델을 살펴보며 소프트웨어 공학을 마친 후 다른 과목을 학습할 때 이 모델을 직접 제작하여 그에 따라 실천한다면 큰 도움이 될 것 같다는 생각이 들어 실제로 CMMI 모델을 작성해 볼 예정이다. 1. 품질 관리 - 소프트웨어 품질 : 소프트웨어의 유용성을 얻기 위해 갖추어야 할 특성들의 집합 1) 사용자의 입장에서 평가 2) 각 공정과정마다 공식기.. 2021. 6. 28.
유지보수 Preface 예방 유지보수의 유형을 공부하던 도중 재공학을 통해 소프트웨어에 새로운 기능을 추가할 수도 있고, 성능을 향상시킬 수도 있다는 글을 보며 '역공학과 재공학은 예방 유지보수보단 완전 유지보수의 유형으로 보는 것이 맞지 않을까?'라는 생각이 들었다. 소프트웨어 공학을 공부하면 할 수록 개발 프로세스에서 사용되는 용어들은 어느 한 가지 의미에 국한되는 것이 아닌, 다양한 개념을 포함하여 사용된다는 것을 느낄 수 있다. 처음엔 한 단어가 높은 활용도를 갖는 것이 헷갈리고 불편하다는 생각을 했지만, 시간이 지나며 '정확한 의미를 파악(이해)한 몇 가지 단어만으로 다양한 개념을 관통할 수 있을 것 같다'라는 생각이 들었다. 앞으로도 개념들을 특정 의미로 구체화하는 것이 아닌, 가능한 다양한 관점으로 .. 2021. 6. 27.
소프트웨어 테스트 Preface 오늘은 실무 현장에 있는 친구를 만나 지난 포스팅에서 작성했던 '코드 검사와 테스트를 분리하는 이유'와 더불어 '테스트 기준들이 모호한데, 현업에선 주로 어떤 테스트 케이스를 사용하는가?'에 관한 질문을 했다. 답변은 의외로 간단했다. 코드 검사는 말 그대로 코드 자체의 오류를 검사하는 것이며, 테스트는 소프트웨어의 성능을 전반적으로 테스트하는 개념이라는 것이다. 또한, 특정 테스트 케이스를 주로 사용한다기 보단 상황에 맞는 다양한 테스트 케이스를 사용한다고 한다. cf. 리팩토링과 코드 검사에 대해서도 생각해 보았는데, 리팩토링은 코드를 이해하기 쉽게 수정하는 활동이므로 코드 검사와는 다른 개념인 것 같다. 1. 소프트웨어 테스트 개요 및 목적 - 테스트 : 시스템이 정해진 요구사항을 만.. 2021. 6. 26.
프로그래밍과 코드 검사 Preface 이번 장에선 코드 검사에 대해 공부했으며, 다음 장에선 테스트(시험)에 관한 내용이 나온다. 언뜻 봐도 비슷한 코드 검사와 시험을 굳이 분리하여 시행하는 이유는 무엇일까? 코드 검사에선 단지 오류를 발견할 뿐, 해결 방법을 찾는 과정은 생락한다고 한다. 또한, 코드 검사에선 발견된 오류를 개인의 업무 수행 능력 평가에 반영하지 않지만, 시험의 결과는 그 반대라고 한다. 아직 시험에 관한 내용을 학습하지 않아 단정지을 순 없지만, 지금까지의 내용을 바탕으로 고민한 결과 두 단계를 별도로 시행하는 이유는 '더욱 향상된 품질의 소프트웨어 개발 및 개인의 업무 수행 능력 향상 촉진'일 것이라 생각한다. 1. 프로그래밍 - 설계 문서에 나타난 결과를 구체화시켜 프로그래밍 언어로 바꾸는 것이다. - .. 2021. 6. 24.
사용자 인터페이스 설계와 상세 설계 Preface 객체지향 인터페이스 도구 부분을 공부하던 도중 궁금증이 생겼다. "구조적 프로그래밍과 객체지향 프로그래밍의 차이점은 무엇일까?" 나는 두 방식 모두 프로그래밍을 쉽고 빠르게 처리하기 위한 것이며, 특히 객체지향 프로그래밍은 객체(object)를 중심으로 설계한다는 것 정도만 알고있을 뿐, 자세한 차이점에 대해선 설명할 수 없었다. 정확한 해답을 얻고자 검색 엔진을 통해 조사한 결과 한 블로그를 통해 구조적 프로그래밍은 데이터와 데이터 처리 방식을 분리한 방식이고, 객체지향 프로그래밍은 데이터와 데이터 처리 방식을 통합한 것이라는 사실을 알게되었다. 그러나 조금만 생각을 해보니 객체를 중심으로 설계한다는 것과 데이터 처리 방식을 통합한다는 것이 사실 같은 맥락이라는 것을 알 수 있었다. 책상.. 2021. 6. 24.
디자인 패턴 Preface 이번 장에선 복잡한 구조의 설계를 보다 쉽게 수행할 수 있도록 돕는 디자인 패턴에 대해 공부했다. 사전적 정의는 앞서 말한 것처럼 '보다 쉬운 설계를 위한 하나의 도구'라고 할 수 있지만, 이 도구가 과연 초보 개발자들에게도 유용할까? 나는 오히려 반대라고 생각한다. 만약 프로그래밍의 기초 단계만 알고 있는 초보 개발자들이 패턴을 사용하여 코딩을 하게 되면 수정하고 싶은 부분을 찾거나 원하는 출력물을 얻는 것이 오히려 복잡하게 느껴지지 않을까? 즉, 디자인 패턴을 유용하게 사용하기 위해선 어느 정도의 개발 지식과 코딩 실력이 필수적이며, 많은 경험을 필요로 한다고 생각한다. - 패턴 : 자주 발생되는 문제들을 해결하고자 할 때 일정하게 반복되는 솔루션 - 무아레 패턴(moire patter.. 2021. 6. 22.