[Software Engineering] 소프트웨어 엔지니어링이란?

DU·2024년 7월 8일

Software-Engineering

목록 보기
1/4
post-thumbnail

Software란 무엇인가?

  • Software는 ⇒ computer program / config file / system doc / user doc
    • Computer Programs (코딩파일)
    • Configuration Files ( 구성 파일 )
    • System Documentation
      • 요구사항 스펙, 디자인 다이어그램, 클래스 다이어그램, 테스팅, 버그리포터
    • User Documentation
      • 매뉴얼, 개발자가 만들어야함
      • 도외시 하는 경우 많음
      • 코딩만 하는 것이 아니라 사용 설명서까지 만들어야함
    • 등을 포함해야한다.
  • 새로운 Software는 2가지 방법에 의해 만들어진다.
    • Developing new programs from scratch
      • 아무것도 없는 상태에서 본인이 작성하는 것
    • Reusing existing software
      • 기존에 있던 software를 reuse함

Software products는 …

  • Generic
    • 일반적인 Software, 누구에게나 open 되어있는 Software
    • Software를 사기를 원하는 모든 customer에게 팔기위해 개발
      • Example . Excel or Word , CAD Software
  • Customized
    • 특정 고객이 원하는 스펙으로 software를 만듦
      • Example . e-commerce software, real-time transportation tracking software
  • Generic, Customized 둘 다 사용할 수 있다.
    • Example . ERP (Enterprise Resources Planning , 기업의 전산관리 시스템 ) Software
      • 인사, 재무, 구매, … 등을 종합적으로 관리하는 시스템
      • 제일 유명한 회사 = SAP
  • 누가 Software specification을 결정하는가?
    • Generic Software : Developer
    • Customized Software : Customer
      • 홍익 앱 = customized
      • 구분하는 것 굉장히 중요하다.
      • Generic은 회사
      • Customized은 customer

Software Engineering 이란 무엇인가?

  • Software 생산의 모든 측면을 고려
    • 전문적인 Software 개발을 위한 tools , methods, theories들을 포함
  • Cost-Effective한 software development를 고려 (비용 대비 퀄리티를 높이는 개발을 하자)
    • Cost vs Quality 를 Balancing하는 것이 Engineering이다.
    • 같은 cost면 quality를 높여야한다.
    • 같은 quality면 cost를 낮춰야한다
    • Cost -Effective

Demands of software engineering

  • 산업 자체가 디지털화 되어가고 있음
  • Software 복잡도가 더욱 복잡해 지고 있다
    • 끊임없는 요구상황 발생

Software Engineering의 중요성

  • 점점 더 Software Engineering이 중요해진다.
  • 장기적으로 본다면 훨씬 더 싸고 빠르게 하기 위해서는 Software Engineering 기술들이 중요하다
    • 혼자하는 것이 훨씬 더 쉽지만 장기적으로 보면 혼자하는 것이 훨씬 더 비싸고 신뢰도가 떨어진다.

Software Engineering과 Computer Science의 차이점

  • Computer Science
    • 이론 , 기초적인 문제 고려
  • Software Engineering
    • 실용적인 문제 (이론 얘기가 아닌) 실제 개발하는데 필요한 것들
  • 그렇다고 Computer Science가 필요 없는 것이 아님

Software Process란 무엇인가?

  • 개발 혹은 software 의 진화를 목표로 하는 행위
  • Software process들의 일반적인 activies 들 :
    • Specification
      • 요구사항, 기능들을 명시화한 것
      • Software가 무엇을 해야하는지 그리고 software의 제약들을 명시
    • Design and implementation ( Development)
      • 자연어로 작성한 것을 코드로 옮기는 것
    • Validation ( Testing ) ⇒ verification(돌아가는지 검증) / validation(요구사항에 맞는지 검증)
      • Software가 의도했던 대로 동작하는지 확인
    • Evolution (Maintenance)
      • 소비자, market의 요구사항을 지속적으로 반영하여 진화 시키고 유지 보수하는 것

Software Engineering의 비용

  • 개발(Specification, Design and implementation) 에 대략 60 % 의 비용
  • Testing에 대략 40 %의 비용
    • 그 중 Implementation ( coding) 에는 20 %의 비용이 차지한다.
    • 장기적인 system을 바란다면, 유지 보수 비용은 개발 비용의 몇 배를 차지한다.
  • 비용의 결정
    • 개발되는 system의 타입, 유형
    • performance와 system 신뢰도의 특성

Acitivy cost distribution

Software Engineering diversity and fundamentals

  • 다양한 유형의 소프트웨어 시스템이 있으며 이들 모두에 적용할 수 있는 보편적인 소프트웨어 엔지니어링 기술 세트는 없습니다. ( no universal set of software engineering techniques)
    • Software 개발을 위해 ad hoc approaches를 사용하라
  • 일부 기본 원칙은 사용되는 Software Engineering 기술에 관계없이 모든 유형의 소프트웨어에 적용됩니다.
    • 관리되며 이해되는 software를 사용해야한다.
    • 요구사항들을 이해하는 것과 software를 design하는 것이 중요하다.
    • 새로운 software를 사용하는 것보다 이미 개발 된 software를 사용해야한다.

Good software의 특성들은 무엇인가?

  • Maintainability (유지 보수성)
    • 유지 보수하기 쉬운 software
      • 어떻게 ? 설계 및 구조를 잘 하면 된다.
    • 소비자의 요구에 맞춰 진화하기 위해 작성되어야한다.
  • Dependability
    • 의존성 ( 신뢰성 ) 이 높은 software
    • Availability, reliability, security , safety and integrity를 갖추고 있는 Software
    • Availability (가용성) : 서비스를 위해 ready 되어 있다 == 서비스가 항상 준비되어있다.
      • 즉, 사용자가 시스템을 필요로 할 때 항상 사용 가능한지 여부를 나타냅니다
    • Reliabilty (신뢰성 ) : 서비스를 시작하면 서비스가 중단되지 않고 끝까지 처리해 줄 수 있다
    • Security ( 보안성 ) : 외부의 공격에 대해 방어할 수 있는 능력 ( 해킹)
    • Safety ( 안정성 ) : Software를 사용하였을 떄 데이터가 망가지거나 부작용이 생기는 일이 없다. ( 데이터 유출)
    • Integrity (무결성 ) : 틀린 것이 없는 상태, 했던 연산들이 반영되어 있음, 잘못된 걸로 변경된 것이 없음, 정상적인 연산에 의해서만 바뀌어져 있는 상태, 결함이 없는 상태
  • Efficiency
    • 효율성
    • 목적에 잘 부합한다, 들인 노력에 비해 결과가 좋다 ,System resources를 낭비하지 않는다.
  • Acceptability
    • 수용성
    • 디자인 되어 있던 것 대로 유저에 의해 수용되어야 한다.

0개의 댓글