on my way

CS 스터디 01-8 전산기초: 소프트웨어 공학 본문

카테고리 없음

CS 스터디 01-8 전산기초: 소프트웨어 공학

wingbeat 2024. 11. 11. 16:00
반응형

소프트웨어 공학

소프트웨어 공학(Software Engineering)은 소프트웨어를 체계적이고 효과적으로 개발하고 유지 보수하는 방법론과 관련된 학문입니다. 복잡하고 대규모의 소프트웨어 개발 과정을 계획, 설계, 구축, 유지 보수하는 체계를 제공하여 소프트웨어의 품질, 비용 효율성, 유지 보수성을 확보하는 것이 목표입니다.

소프트웨어 공학의 필요성

소프트웨어는 많은 사람과 환경에서 사용되며, 그 복잡도와 규모가 점차 커지고 있습니다. 이에 따라 발생할 수 있는 오류를 줄이고, 요구 사항에 부합하며, 유지 보수가 용이한 소프트웨어를 만들기 위해 체계적인 방법론이 필요합니다. 소프트웨어 공학은 이러한 필요를 충족시키기 위해 다양한 이론과 실천 방법을 제공합니다.

 


소프트웨어 공학의 주요 개념

1. 소프트웨어 개발 생명 주기 모델(SDLC)

소프트웨어의 개발을 단계별로 계획하고, 각 단계에서 수행할 작업을 정의한 모델입니다. SDLC는 소프트웨어 개발을 체계화하고, 품질과 일정 관리를 효과적으로 수행할 수 있도록 돕습니다.

  • 폭포수 모델: 순차적으로 각 단계를 진행하는 모델로, 요구사항 분석 → 설계 → 구현 → 테스트 → 유지 보수 순서로 진행됩니다.
  • 프로토타입 모델: 초기 모델(프로토타입)을 빠르게 개발하여 사용자 피드백을 받고, 이를 반영하여 개발을 완성해가는 방식입니다.
  • 나선형 모델: 폭포수와 프로토타입 모델을 결합한 방식으로, 위험 분석을 강조하여 프로젝트 실패 가능성을 줄이려 합니다.
  • 애자일 모델: 변화하는 요구사항에 유연하게 대응하는 반복적이고 점진적인 개발 방식으로, 스프린트라는 짧은 주기를 통해 점차적으로 소프트웨어를 완성합니다.

2. 소프트웨어 품질 평가 국제 표준 (ISO/IEC 9126)

소프트웨어 품질을 평가하는 국제 표준으로, 기능성, 신뢰성, 사용성, 효율성, 유지 보수성, 이식성의 여섯 가지 특성을 기준으로 소프트웨어 품질을 평가합니다.

  • 기능성: 소프트웨어가 요구된 기능을 제대로 수행하는 능력.
  • 신뢰성: 소프트웨어가 오류 없이 안정적으로 작동하는 능력.
  • 사용성: 사용자 관점에서 소프트웨어가 사용하기 쉬운 정도.
  • 효율성: 자원을 얼마나 잘 활용하는지 평가하는 특성.
  • 유지 보수성: 소프트웨어를 쉽게 수정하고 확장할 수 있는 능력.
  • 이식성: 다른 환경에서도 문제없이 작동할 수 있는 능력.

3. 소프트웨어 개발 방법론

  • 애자일: 유연하고 신속한 개발을 중시하며, 고객과의 지속적인 협업을 통해 점진적으로 제품을 완성하는 방법론입니다.
  • 폭포수: 순차적 진행 방식으로, 이전 단계로 되돌아갈 수 없기 때문에 명확하게 정의된 프로젝트에 적합합니다.
  • V-모델: 폭포수 모델의 변형으로, 각 단계에 대한 테스트 활동을 병행하여 오류를 사전에 방지합니다.

4. 소프트웨어 비용 산정 기법

소프트웨어 개발 비용을 예측하고, 이를 통해 개발 계획을 수립하는 기법입니다. 예측 정확도는 소프트웨어 개발의 성공에 큰 영향을 미칩니다.

  • 전문가 판단법: 경험이 많은 전문가가 비용을 예측하는 방법.
  • 델파이 기법: 여러 전문가의 예측 결과를 종합하여 최종 비용을 산출하는 방식.
  • COCOMO 모델: 소프트웨어의 크기와 난이도에 따라 비용을 산정하는 공식화된 모델입니다.
  • 상향식과 하향식 접근법: 각각 개발 과제를 작은 단위로 나눠서 비용을 산정하거나 전체 프로젝트의 큰 틀에서 비용을 예측하는 방식입니다.

5. 소프트웨어 테스트

소프트웨어가 예상대로 작동하는지 확인하고 오류를 찾아내기 위해 수행하는 과정입니다.

  • 블랙박스 테스트: 소프트웨어의 내부 구조를 보지 않고 기능의 입력과 출력에 집중하여 테스트합니다.
  • 화이트박스 테스트: 소프트웨어의 내부 로직을 검토하며 테스트하는 방식으로, 코드의 실행 경로를 고려하여 테스트 케이스를 작성합니다.

6. 소프트웨어 유지 보수

소프트웨어가 배포된 후 발생하는 문제를 수정하고 새로운 요구사항에 맞춰 개선하는 과정입니다. 유지 보수는 다음과 같은 네 가지 유형으로 나뉩니다.

  • 수정 유지 보수: 소프트웨어의 결함을 수정하는 활동.
  • 적응 유지 보수: 소프트웨어를 새로운 환경에 맞게 수정하는 활동.
  • 예방 유지 보수: 소프트웨어의 오류 발생 가능성을 줄이기 위해 미리 수정하는 활동.
  • 완화 유지 보수: 소프트웨어의 성능이나 기능을 개선하는 활동.

7. 정형 기술 검토

소프트웨어 개발 과정에서 오류를 찾아내기 위해 전문가가 진행하는 검토 과정입니다.

  • 워크스루(Walkthrough): 개발자가 작업을 설명하고, 팀원들이 질문이나 피드백을 제공하는 회의 형식입니다.
  • 인스펙션(Inspection): 소프트웨어의 품질을 높이기 위해 체계적으로 오류를 찾는 과정으로, 표준화된 절차와 검사 항목을 사용합니다.

8. 소프트웨어 품질 보증(SQA)

소프트웨어가 요구된 품질을 충족하는지 확인하고, 전반적인 품질을 관리하기 위해 수행하는 모든 활동입니다. 품질 보증 활동은 정적 기법(코드 리뷰, 워크스루, 인스펙션)동적 기법(테스트)으로 나뉩니다.


소프트웨어 공학의 장점

  • 효율적인 프로젝트 관리: 개발 과정과 자원을 체계적으로 관리해 프로젝트를 더 원활하게 진행할 수 있습니다.
  • 유지 보수성 향상: 품질 좋은 소프트웨어는 유지 보수가 용이하며, 수명 주기 동안 발생할 수 있는 문제를 최소화합니다.
  • 비용 절감: 체계적이고 계획적인 개발은 오류를 줄여 수정 비용을 절감할 수 있습니다.
  • 신뢰성 증대: 품질 높은 소프트웨어는 고객의 신뢰를 높이고, 장기적인 비즈니스 성과를 제공합니다.

소프트웨어 공학은 개발 과정의 체계화와 최적화를 통해 효율성을 극대화하며, 더 나은 품질의 소프트웨어를 제공하기 위해 필수적인 역할을 합니다.

 

 

 


1. SW 공학이란? 필요한 이유?

질문: 소프트웨어 공학(SW 공학)이란 무엇이며, 왜 필요한가요?

답변: 소프트웨어 공학은 소프트웨어 시스템의 설계, 개발, 유지보수, 테스트 및 평가를 다루는 공학적 접근 방식입니다. 이 분야의 목적은 고품질의 소프트웨어를 체계적이고 효율적으로 개발하고, 프로젝트 실패 가능성을 줄이며 비용과 시간을 절감하는 데 있습니다. SW 공학을 적용하면 소프트웨어 개발의 복잡성을 줄이고, 제품의 신뢰성 및 유지보수성을 높이는 데 도움이 됩니다.


2. SW 품질 평가 국제 표준 (ISO 9126) 특징

질문: ISO 9126에 기반한 소프트웨어 품질 평가 표준에는 어떤 특징이 있나요?

답변: ISO 9126 표준은 소프트웨어 품질을 기능성, 신뢰성, 사용성, 효율성, 유지보수성, 이식성이라는 6가지 주요 특성으로 나누어 평가합니다. 이 기준을 사용하면 소프트웨어가 사용자의 요구 사항을 얼마나 충족하는지, 얼마나 신뢰할 수 있는지를 객관적으로 평가할 수 있습니다. 특히 다양한 산업에서 표준화된 기준을 통해 품질 목표를 명확히 설정하고, 평가할 수 있는 방법을 제공합니다.


3. 블랙박스 테스트 vs 화이트박스 테스트

질문: 블랙박스 테스트와 화이트박스 테스트의 차이점은 무엇인가요?

답변: 블랙박스 테스트는 소프트웨어 내부 구조나 코드에 대한 정보 없이 사용자 관점에서 기능을 테스트합니다. 주로 입력과 출력에 집중하여, 시스템이 요구사항에 따라 올바르게 작동하는지 확인합니다. 반면 화이트박스 테스트는 코드의 내부 구조와 논리를 기반으로 테스트하며, 코드 내 논리적 결함이나 오류를 탐지합니다. 블랙박스 테스트는 사용성 평가에 유리하며, 화이트박스 테스트는 코드의 완성도와 안정성을 높이는 데 유리합니다.


4. 생명주기 모형별 특징

질문: 소프트웨어 개발 생명주기 모형에는 폭포수, 프로토타입, 나선형 모형이 있습니다. 각 특징을 설명해 주세요.

  • 폭포수 모형:
    답변: 폭포수 모형은 요구 분석, 설계, 구현, 테스트, 유지보수 단계로 나누어 단계를 순차적으로 진행하는 방식입니다. 각 단계가 끝나야 다음 단계로 넘어갈 수 있으며, 명확한 요구사항을 바탕으로 단계적 개발을 수행할 때 유리합니다. 그러나 중간에 요구사항이 변경되면 전체 개발 과정에 큰 영향을 미칩니다.
  • 프로토타입 모형:
    답변: 프로토타입 모형은 초기 프로토타입을 만들어 사용자의 피드백을 반영하며 점진적으로 개발하는 방식입니다. 사용자가 원하는 요구사항이 명확하지 않을 때 유리하며, 피드백을 통해 요구사항을 구체화할 수 있습니다. 하지만 계속된 수정이 필요할 경우 시간이 많이 소요될 수 있습니다.
  • 나선형 모형:
    답변: 나선형 모형은 위험 분석과 반복을 강조하며, 개발을 여러 번 반복하여 점진적으로 완성하는 방식입니다. 각 반복 주기마다 계획, 위험 분석, 개발, 검토 단계를 거치며, 복잡하고 대규모 프로젝트에 적합합니다. 다만, 모형이 복잡하여 적용하기가 어렵고 높은 비용이 필요할 수 있습니다.

5. 비용산정 기법

질문: 소프트웨어 개발 비용을 산정하는 기법에는 어떤 것들이 있나요?

답변: 소프트웨어 비용 산정에는 여러 기법이 있습니다. 전문가 판단은 경험 많은 전문가들이 직관적으로 산정하는 방식입니다. 유사 경험 추정은 과거 유사한 프로젝트와 비교하여 비용을 추정하는 방식이며, COCOMO 모형은 소프트웨어 규모와 복잡도를 수학적 공식을 통해 추정합니다. 각 기법은 프로젝트의 성격과 환경에 따라 적절하게 선택하여 사용합니다.


6. 정형 기술 검토 유형

질문: 정형 기술 검토(Technical Review)의 유형으로 워크스루와 인스펙션이 있습니다. 각각의 특징을 설명해주세요.

  • 워크스루 (Walkthrough):
    답변: 워크스루는 개발팀이나 이해관계자들이 비공식적으로 진행하는 리뷰입니다. 개발 중간 단계에서 오류나 개선점을 찾기 위해 팀원이 모여 서로 피드백을 교환하는 방식으로, 발견된 문제를 자유롭게 논의합니다. 가벼운 오류 검토 및 아이디어 공유에 유용하지만, 공식적인 결과물 산출은 보장하지 않습니다.
  • 인스펙션 (Inspection):
    답변: 인스펙션은 공식적인 절차에 따라 진행되는 엄격한 검토입니다. 팀원들이 개발된 코드나 문서를 꼼꼼히 분석하며 오류와 불일치를 찾아내고, 이를 기록하여 개선하도록 합니다. 정해진 역할과 단계가 있으며, 결함을 효율적으로 발견하여 문서화할 수 있어 품질 향상에 큰 도움이 됩니다.

7. 애자일 개발

애자일(Agile) 개발은 빠르게 변화하는 요구사항에 유연하게 대응하고자 하는 반복적이고 점진적인 소프트웨어 개발 방법론입니다. 전통적인 개발 방식인 폭포수 모델과는 달리, 애자일은 작은 기능 단위로 개발과 피드백을 반복하며, 짧은 개발 주기(스프린트)를 통해 제품을 점진적으로 개선해 나갑니다. 이 방식은 빠르게 변화하는 시장과 고객 요구에 민첩하게 대응하는 데 효과적입니다.

애자일의 주요 특징:

  1. 고객 중심의 협업: 고객, 개발팀, 이해관계자 간의 지속적인 커뮤니케이션을 강조합니다. 고객의 피드백을 수시로 반영하여 제품이 최종 목표에 부합하도록 합니다.
  2. 반복적, 점진적 개발: 작은 기능 단위로 계획하고, 개발 주기를 반복하면서 최종 완성도를 높여갑니다. 각 주기마다 동작하는 소프트웨어를 전달하여 고객이 직접 경험하고 개선 의견을 제시할 수 있습니다.
  3. 유연성과 민첩성: 요구사항이 변경되더라도 적극 수용합니다. 변화에 신속히 대응하여 제품의 품질과 사용자 만족도를 높이는 것이 목표입니다.
  4. 자율성과 팀워크 중시: 개발 팀원들이 자율적으로 업무를 계획하고 관리합니다. 이를 통해 팀의 책임감과 협력 의식을 강화하고, 창의적인 해결책을 도출할 수 있습니다.

애자일 방법론의 대표 사례:

  • 스크럼(Scrum): 고정된 기간의 스프린트를 통해 개발을 진행하며, 팀의 협업을 구조화하기 위해 데일리 스탠드업, 스프린트 회고 등을 사용합니다.
  • 칸반(Kanban): 시각적인 보드를 활용해 작업의 흐름을 시각화하고, WIP(Work in Progress) 제한을 통해 생산성을 관리합니다.

애자일은 특히 시장이 빠르게 변하거나 요구사항이 유동적인 프로젝트에 적합하며, 지속적인 개선과 고객의 만족도를 극대화하는 데 중점을 둡니다.

 

반응형