본문 바로가기

KNU Freshman/컴퓨터학개론

(14) 소프트웨어공학

* 프로그래밍이 어려운 이유
  - 사람이 이해하는거랑 컴퓨터가 이해하는거랑 다르기 때문
 
* 사람 vs 컴퓨터
• 사람:
– Interested in modeling the real world
– More interested in “what”(무엇을) computer should do than how
 
• 컴퓨터:
– Only data it can manipulate is sequences of zeros and ones
– Understands low-level “how”(어떻게) instructions.
 
* 소프트웨어 개발의 현실
• 요구사항이 애매함
• 개발 중 요구사항 변경
• 스케일이 더 큽니다
   – 다양한 디자인 기술이 필요합니다
   – 팀워크가 필요합니다
• 개발이 완료된 후 소프트웨어를 변경해야 합니다
• 실패 시 비용이 더 많이 듭니다

   – Business-critical 
    – Safety-critical
 
* 소프트웨어공학의 정의
• IEEE
– “The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software”
 
•Ian Sommerville
– “An engineering discipline that is concerned with all aspects of software production
 
* 소프트웨어공학 vs 타 공학
   • 비즈니스를 고려
   • 고객을 최우선시함
   • 설계 변경이 용이함
   • 결과물이 무형 (비가시적)임
   • 요구사항 변경이 잦고, 모호함
 
* 소프트웨어 공학의 역할
  - 고객과 프로그래머 이어주는 역할을 함
 
* 소프트웨어 공학이란?
  - engineering discipline + all aspects of S/W
 
<소프트웨어 개발 방법론>
 
* 소프트웨어 개발 절차
• 수집 요구사항
   • 팀 운영
   • 소프트웨어 디자인
   • 개발 (코딩)
   • 테스트
   • (서류화)
   • 전개
   • 유지보수
 
* 소프트웨어 개발 방법론
• Anti Lifecycle
   – Code & Fix
 
• Lifecycle

   – Waterfall
   – Rapid Prototyping
   – Incremental
   – Spiral
   – Agile
 
<Code and Fix> (실습할때 쓰는 방법)
•소규모 개인 개발에 유용함
• 심각한 코딩 작업에서 문제가 명백해집니다
    – 버전 관리, 테스트, 변경 관리 등의 프로세스가 없습니다.
    – 여러 프로그래머의 활동을 조정하기가 어렵습니다
    – 비기술자는 프로그램 작동 방식을 설명할 수 없습니다
    – 프로그래머는 사용자의 요구를 모르거나 이해하지 못합니다

 
<Waterfall Model>
Proposed in early 70s by Winston Royce
• 요구사항
    – 필요한 정보, 기능, 행동, 성능 및 인터페이스를 정의합니다.
• 디자인
    – 데이터 구조, 소프트웨어 아키텍처, 인터페이스 표현, 알고리즘 세부 정보.
• 구현
    – 소스 코드, 데이터베이스, 사용자 설명서, 테스트

 
<Waterfall 장점>
• 이해하기 쉽고 사용하기 쉽습니다 
• 경험이 부족한 직원에게 구조를 제공합니다
• 마일스톤을 잘 이해하고 있습니다
• 요구사항 안정적이게 설정
• 경영관리(계획, 직원, 트랙)에 적합합니다
• 비용이나 일정보다 품질이 중요할 때 효과가 좋습니다 (good if, quality > cost, schedule)

     (because 한단계 끝날때까지 다음 단계 X)
 
<Waterfall 단점>
• 모든 요구 사항을 미리 알아야 합니다
• 각 단계별로 생성된 결과물은 동결된 것으로 간주됩니다 (동결) –> 유연성 저해
• 진행 상황에 대해 잘못된 인상을 줄 수 있습니다
• 소프트웨어 개발의 문제 해결 특성을 반영하지 않음 –> 단계별 반복

• 통합은 마지막에 하나의 빅뱅이다
• 고객이 시스템을 미리 볼 기회가 거의 없음 (너무 늦을 수 있음,
고객은 제한된 정보를 받음)
 
<Waterfall Model사용해야할 때>
• 요구 사항은 매우 잘 알려져있을때

• 제품 정의가 안정적일때
• 기술이 이해되고 있을때
• 기존 제품의 새로운 버전일때
• 기존 제품을 새로운 플랫폼으로 포팅할때(이식)
 
<Rapid Prototyping>
• 프로토타입은 요구사항 사양을 개발하는 데 사용됩니다
    – 요구 사항이 알려지면 waterfall을 사용합니다
• 설계가 시작되면 프로토타입이 폐기됩니다
    – 프로토타입을 구현의 basis로 사용해서는 안 됩니다
    – 프로토타이핑 도구는 생산 품질 코드를 생성하지 않습니다
• 또한 고객은 프로토타입에 대해 "교육"을 받아야 합니다
    – 프로토타입은 요구 사항 관련 질문에 답하는 데 사용된다는 사실을 알아야 합니다
    – 그렇지 않으면 그들은 참을성이 없어집니다
 
<Rapid Prototyping>
 

<Incremental>
• 마이크로소프트에서 사용함 (적어도 윈도우 XP 구축할 당시)
    – 프로그램은 빌드 관리자에 의해 매일 구축됩니다
• 기능에 따라 반복 작업이 계획됩니다
    – 기능 1 및 2는 반복 1에서 작업
    – 특징 3 및 4는 반복 2에서 작업

<Spiral>
• 반복 모델과 유사하지만 다음과 같습니다:
    – 각 반복 작업은 "리스크 관리"에 의해 주도됩니다
        • 목표 및 현황 파악
        • 리스크 파악
        • 리스크가 높은 항목을 해결하기 위한 계획을 수립하고 반복 작업을 진행합니다
    – 반복

 
<Agile>
• 민첩한 개발은 기존 "헤비급" 소프트웨어 개발 프로세스의 문제에 대한 대응입니다
    – 너무 많은 아티팩트
    – 너무 많은 문서
    – 융통성 없는 계획
    – 지연, 예산 초과 및 버그가 많은 소프트웨어
 
<Agile Manifesto> (애자일 선언)
• 우리는 소프트웨어를 개발하고 다른 사람들이 소프트웨어를 개발하는 더 나은 방법을 발견하고 있습니다. 이 작업을 통해 우리는 다음과 같은 가치를 갖게 되었습니다:

• 즉, 오른쪽 항목에는 가치가 있지만 왼쪽 항목에는 가치가 더 있습니다.

 
<Agile Methodology>
• Agile 방법론의 등장 배경
    – SW 개발환경의 변화
        • 짧은 Time to market으로 인한 생산성이 점차 중요해짐
    – 기존 방법론의 한계
        • 문서 및 절차 위주
        • 개발자의 능력 차이 고려 불가능
• 대표적인 Agile 방법론
    – XP(eXtream Programming)
    – Scrum
• Agile이 적합한 환경
    – 작은 팀의 규모로 가까이 위치해 있으며
    – 팀원간 수평 구조로 이루어진 조직에 적합
 

 
* 요구사항 분석
• 요구 사항은 무엇입니까?
• 요구사항 분류
• 요구 사항을 수집하는 방법은 무엇입니까?
 
* 요구사항 분석의 어려움
• 프로젝트 실패의 주요 원인
    – 불완전한 요구사항
    – 요구사항 변경
    – 사용자 입력 불량
• 필수 솔루션
    – 요구사항 분류
    – 요구사항 분석
        • 요구사항 수집, 정제 및 순서 변경
 
* 요구사항 분석을 위한 방법
• 요구사항을 수집하면서 분석
    – 인터뷰
    – 공동 애플리케이션 개발(JAD)
    – 설문조사
    – 문서 분석
    – 관찰
• 요구사항을 직접 찾으면서 분석
    – 기존 시스템 복사
    – 브레인스토밍
 
* 요구사항 분석 절차
• 요구사항 정리
    – UML
    – 사용자 스토리
    – 사용 사례
    – 시제품
    – 요구사항 규격(신속 시제품 제작)
• 검증 및 확인
    – 검증: 우리가 옳은 일을 하고 있습니까?  올바른 것을 만들고 있는지?
    – 확인: 우리가 일을 제대로 하고 있습니까?  올바르게 하고 있는지?
• 변경 요구사항


 

 
* 요구사항의 분류
• 기능성: features, 기능, 보안 → 가장 쉽고 명확함(S/W 의 최소 기능)
    – 나머지 요구사항은 비기능 요구사항이다 


사용성:
• 사용성: 인적 요소, 도움말, 문서화
• 신뢰성: 고장 빈도, 복구 가능성, 예측 가능성
• 성능: 응답 시간, 처리량, 정확도, 가용성, 리소스 사용량
• 지원성: 적응성, 유지 보수성, 국제화, 구성 가능성
 
<비기능 요구사항의 예>

'KNU Freshman > 컴퓨터학개론' 카테고리의 다른 글

(15) 인공지능  (0) 2024.06.09
(13) 데이터베이스  (0) 2024.06.09
(12) 분산시스템 / 클라우드  (0) 2024.06.03
(11) 네트워크  (1) 2024.06.03
(10) 통신의 발전 과정  (0) 2024.05.20