IT 이야기/Today I Learned (TIL)

Engineer Information Processing (TIL) - 소프트웨어 공학

클톡(CloudTalk) 2021. 10. 27. 01:36

EIP (Engineer Information Processing)

History


4장 소프트웨어 공학

  • 럼바우(Rumbaugh)의 OMT 모델링
    • 객체 모델링(Object): 실세계 문제 영역으로 부터 시스템에 요구되는 객체를 찾아내어 객체들 간의 관계를 구정하여 각체 다이어그램(Object Diagram)으로 나태내는 것
    • 동적 모델링(Dynamic): 시간의 흐름에 따라 변하는 객체들 사이의 제어 흐름, 상호 작용, 연산 순서 등의 동적인 행위를 상태 다이어그램(State Transaction Diagram)으로 나태내는 것
    • 기능 모델링(Function): 다수 프로세스 간의 데이터 흐름을 중심으로 처리 과정을 자료 흐름도(DFD, Data Flow Diagram)로 나태내는 것
  • Prototype(프로토타입): 시범적으로 만든다. 변경 가능성이많은 모델에 적합
  • Waterfall(폭포수 모델): 계획수립->요구분석->설계->개발/구현->테스트->유지보수 (TOP-Down)
  • Incremental(증분형): 일부 기능을 하나씩 개발한 후 붙여간다.
  • Evolutional(진화형): 지속적인 보안 테스트 등등 진화형이라는데 초점
  • Spiral(나선형): 목표설정->위험분석->구현및 테스트->고객평가 및 다음단계 수립 (키워드: 위험최소화, 점직적)
  • 품질 목표
    • Correctness (정확성=크렉트): 사용자의 요구 기능을 충족시키는 정보
    • Reliability (신뢰성=릴라이어볼): 정확하고 일관된 결과를 얻기 위해 요구된 기능을 오류 없이 수행하는 정도
    • Efficiency (효율성=이피션씨): 요구되는 기능을 수행하기 위해 필요한 자원의 소요 정도
    • integrity (무결성=인테그리트): 허용되지 않는 사용이나 자료의 변경을 제어하는 정도
    • Usabilirty (용이성=유즈벨러리): 사용에 필요한 노력을 최소화 하고 쉽게 사용할 수 있는 정도
    • Maintainability (유지보수성=메인테인밸러리): 변경 및 오류 사항의 수정에 대한 노력을 최소화하는 정도
    • Flexibility (유연성=플락스밸러리): 소프트웨어를 얼마만큼 쉽게 수정할 수 있는가 하는 정도
    • Testability (시험역량=테스트밸러리): 의도된 기능을 수행하도록 보장하기 위해 프로그램을 시험할 수 있는 정도
    • Port (이식성=포트밸러리): 다양한 하드웨어 환경에서도 운용 가능하도록 쉽게 수정될 수 있는 정도
    • interoperability (상호 운용성=인털아폴밸러리): 다른 소프트웨어와 정보를 교환할 수 있는 정도
  • 역공학(Reverse Engineering)
    • 기존 소프트웨어를 분석하여 소프트웨어 개발 과정과 데이터 처리 과정을 설명하는 분석 및 설계 정보를 재발견하거나 다시 만들어 내는 작업이다.
    • 정공학과는 반대 방향으로 기존 코드를 복구하는 방법
    • 대상 소프트웨어가 있어야 하며 이로부터 작업이 시작된다
    • 기존 소르트웨어의구성 요소와 그 관계를 파악하여 설계도를 추출하거나, 구현또는 독립적인 추상화된 표현을 만든다
    • 코드 역공학: 코드 -> 흐름도 -> 자료 구조도 -> 자료흐름도 순으로 재생함
    • 데이터 역공학: 코드 -> 자료 사전 -> 개체 관계도 순으로 재생함
    • 역공학의가장 간단하고 오래된 형태는 재문서화(Re-documentation)이다.
  • 정형 기술 검토의 검토 지침 사항 (FTR = Formal Technical Review)
    • 제품의 검토에만 집중
    • 문제 영역을 명확히 표현
    • 해결책이나 개선책에 대해서는 논하지 말라
    • 참가자의 수를 제한하고 사전 준비를 강요하라
    • 자원과 시간 일정을 할당하라
    • 모든 검토자들을 위해 의미 있는 훈련을 행하라
    • 검토자들은 사전에 작성한 메모들을 공유하라
    • 검토의 과정과 결과를 재검토하라
  • Cogesion (응집도)
    • 정보 은닉 개념을 확장한 것으로 모듈 안의 요소들이 서로 관련되어 있는 정도, 즉 모듈이 독립적인 기능으로 정의되어 있는 정도를 의미한다.
    • 독립적인 모듈이 되기 위해서는 각 모듈의 응집도가 강해야 한다
    • 응집도의 종류 (강남 >약함)
      • 기능적 응집도 > 순차적 응집도 > 교환(통신)적 응집도 > 절차적 응집도 > 시간적 응집도 > 논리적 응집도 > 우연적 응집도
      • Functional > Sequential > Communication > Procedural > Temporal > Logical > Coincidental
  • 유지보수의 유형 (Maintenance)
    • Corrective (수정=트렉트): 수리, 교정, 정정, 하자보수
    • Adaptive (적응=어답터): 환경적응, 조저 보수
    • Perfective (완전화=퍼펙트): 기능개선, 기능 보수
    • Preventive (예방=리벤트): 미래에 유지보수를 용이하게 하거나 기능을 향상시키기 위해 소프트웨어를 변경하는 활동
  • 화이트 박스 테스트
    • 모둘의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 검사하여 검사 사례를 설계하는 방법
    • 설계된 절차에 초점을 둔 구조적 테스트로 테스트 과정의 초기에 적용
    • 모듈안의 작동을 직접 관칠
    • 원시 코드의 모든 문장을 한번이상 수행
    • 각 조건에서 참과 거짓의 모든 논리적 결정이 적어도 한번 이상 실행
    • 테스트 기법
      • 기초 경로 검사
      • 제어 구조 검사 (조건 검사, 루프 검사, 데이터 흐름 검사)
  • 블랙 박스 테스트
    • 소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증 하는 검사로서, 기능 검사 라고 한다
    • 테스트 후반 과정에 진행되며, 누락된 기능 부정확한 기능 인터페이스 오류 등을 발견하기위해 사용
    • 테스트 기법
      • 동치 분할 검사 = Equivalence Partitioning Testing
      • 경계값 분석 = Boundary Value Analysis
      • 원인-효과 그래프 검사 = Cause-effect graphing testing
      • 오류 에측 검사 = Fault based testing
      • 비교 검사 = Comparison Testing
  • CASE (Computer Aided Software Engineering)
    • 소프트웨어 개발 과정에서 전체 또는 일부를 컴퓨터와 전용 소프트웨어 개발 도구를 사용하여 자동화 하는 것
    • CASE 사용의 이점
      • 소프트웨어 개발 시간을 단측 및 개발 비용 절감
      • 자동화된 기법을 통해 소프트웨어 품질 향상
      • 소프트웨어 생산성 향상되고 생산, 운용 활동을 효과적으로 관리 통제
      • 품질과 일관성을 효과적으로 제어할 수 있다.
      • 소프트웨어 개발의 모든 단계에 걸친 표준을확립할 수 있다.
      • 소프트웨어 모듈의재사용성이 향상된다.
  • 프로젝트 관리를 위한 3P (3대 요소)
    • People: 프로젝트 관리에서 가장 기본이 되는 인적 자원
    • Problem: 사용자 입장에서 문제를 분석하여 인식함
    • Process: 소프크웨어 개발에 필요한 전체적인 작업 계획
  • Coupling (결합도)
    • 결합도는 모듈 간에 상호 의존하는 정도를 의미 (중요 모듈간!)
    • 독립적인 모듈이 되기위해서는 각 모듈 간의 결합도가 약해야 하며 의존하는 모듈이 적어야한다.
    • 결합도 순서 (약함 < 강함)
      • 자료 < 스탭프 < 제어 < 외부 < 공통 < 내용
  • 시스템 구성요소
  • 자료 흐름도의 구성 요소
  • 자료사전에 사용되는 표기 기호