Intelligent Data Analysis RSS 태그 관리 글쓰기 방명록
Software Engineering/Week 1 (2)
2022-11-09 15:36:56

소프트웨어는 기능, 개발 과정 그리고 하드웨어 환경에 따른 분류로 나뉠 수 있다. 

 

  • 기능적 분류
    • 응용 S/W
    • 시스템 S/W
    • 임베디드 S/W
  • 개발 과정에 따른 분류
    • Prototype
    • Product
    • Package
  • 하드웨어 환경에 따른 분류
    • 분산 시스템 S/W
    • PC & Workstation
    • 모바일 S/W

 

이 분류 외에 소프트웨어의 성격에 따른 분류도 나눌 수 있다. 

  • System Software
  • Business Application Software
  • Engineering/Scientific Software
  • Real-time software
  • Embedded Software
  • Web applications
  • Artificial Intelligent Software
  • Ubiquitos

 

[System Software]

시스템 소프트웨어는 응용 프로그램을 실행하기 위해 기본이 되는 소프트웨어를 의미하며 unix, windows와 mac os 등이 있다. 또한 컴파일러와 에디터 같은 몇몇 시스템 소프트웨어는 복잡한 과정을 독립적으로 수행하기도 하며 컴퓨터의 성능을 좌우하기도 한다. 기본적으로 C/C++ 기반 언어로 작성되어있다.

 

[Business Application Software]

비지니스 응용 소프트웨어는 사업 관계에서 사용하기 유용한 시스템을 의미하며 대학 포털 시스템, 이지바로 등이 있다. 일반적으로 공통 이해관계를 가진 다수의 사용자가 하나의 시스템에 접속하여 활동함으로 대용량 데이터베이스와 연동되어 있는 경우가 많으며 클라이언트-서버 구조를 가져 웹을 통한 접속이 가능하다. 기본적으로 웹 어플리케이션에 최적화 되어있는 Java를 사용하며 C/C++도 큰 비중을 차지한다.

 

[Real-Time Software]

실시간 처리가 가능해야 하는 소프트웨어로 THAAD와 같은 전시 상황에 쓰이는 경우가 많다. 언어 의미 그대로 실시간 처리가 가능해야 함으로 고급 언어 중 가장 빠른 실행 속도를 가지는 C/C++로 작성되어있다. 근대에서는 Real-Time이라는 별도의 소프트웨어보다는 인공지능 분야에 적용하여 자율주행과 같은 시너지를 내기도 한다.

 

[engineering/Scientific Software]

수치 데이터를 다루는 소프트웨어이다. 일반적으로 물리, 통계, 선형대수 등에서 많이 사용된다. 주로 사용되는 언어는 C/C++과 수치해석에 특화 된 R, Matlab과 Fortran을 사용한다. 이 분야 또한 인공지능 분야에 적용하여 시너지를 내기도 한다.

 

[Embedded Software]

read-only 메모리의 컨트롤과 시스템 컨트롤을 수행하는 소프트웨어이다. 제한적이거나 중요한 기능을 수행한다. 우리가 실생활에 사용하는 휴대폰, 차량과 로봇등에 사용된다. 

 

[Artificiatl Intelligent Software]

인공지능 분야의 소프트웨어이다. 4차 산업 혁명의 주 축인 인공지능을 이용하여 회귀, 분류와 군집화 등의 작업을 수행하며 빅데이터 처리 시 높은 수준의 평가 지표를 산출 할 수 있다. 패턴 인식, 자연어 처리, 테이블 데이터 처리 등 다방면에 접목할 수 있다. 주로 사용되는 언어는 Python이고 몇몇 인공지능 모델은 C를 사용하여 추론 시간을 대폭 향상시키기도 한다. 

 

'Software Engineering > Week 1' 카테고리의 다른 글

What is software?  (0) 2022.11.07
2022-11-07 18:27:57

통상 소프트웨어와 프로그램은 같은 의미로 쓰이곤 한다. 그러나 엄밀히 말하자면 두 단어는 다른 뜻을 가지고 있다.

 

  • Program : A set of instructions written by any programming language
  • Software : Programs, data and associated documentation

위 정의에서 말하듯 소프트웨어는 high-level 언어로 짜여진 프로그램과 데이터를 연결한 document이자 상품이다.

 

소프트웨어 상품은 특정 고객 또는 일반 시장을 위해 개발된다. 따라서 일반적(Generic)인 특성을 띌수도, 맞춤화된(Bespoke)특성을 띌수도 있다. 

 

소프트웨어 개발 프로젝트가 시작된다면 아래와 같은 절차를 거쳐 구현하는 것이 바람직하다.

 

Fig 1. 소프트웨어 개발 주기

각 단계별로 수행되어야 하는 목표를 알아보자. 

 

  • 요구사항 정의
    • 클라이언트와 대화를 통해 요구사항 도출
  • 분석(명세)
    • 클라이언트의 요구사항 분석 및 명세 문서의 형태로 표현
    • 소프트웨어 프로젝트 관리 계획이 작성됨
  • 설계
    • 아키텍쳐 설계
      • 상품을 모듈이라 불리는 컴포넌트로 분리
    • 상세 설계
      • 모듈 알고리즘 및 UI/UX 설계
      • 상품이 어떻게 수행되는지 기술한 설계 문서 작성
  • 구현
    • 컴포넌트를 하나의 시스템으로 통합하고 전체적인 테스트 진행
    • 상품의 기능이 정확하게 구현될 경우 클라이언트가 수행 테스트 수행
    • 상품이 클라이언트에 의해 승인되고 실제 운용상태에 들어가기 직전 단계임
  • 유지보수
    • 상품이 클라이언트에게 인도되고 승인 테스트를 마친 이후 부터 상품을 수정하는 모든 활동 의미
      • 완전적 유지보수(prefective maintenance) : 약 60.3% 
      • 적응적 유지보수(adaptive maintenance) : 약 18.2%
      • 수정적 유지보수(corrective maintenance) : 약 17.4%

 

잘 짜여진 소프트웨어 개발 주기를 통해 만들어진 상품은 클라이언트의 만족도를 높게 받을 수 있을 뿐만 아니라 유지보수 시 필요한 시간적, 공간적 자원을 절약할 수 있다.

 

우리는 소프트웨어의 특성을 파악해 위와 같은 주기를 계획할 수 있다. 

 

  • Testability
  • Conformity / Changeability
  • Longevity
  • Duplicability
  • Application dependability

 

소프트웨어는 test가 가능하다. 구현 단계에서 이를 통해 시스템적인 오류 및 결측 사항을 확인할 수 있을 뿐만 아니라 버그와 보안 취약점과 같은 문제 또한 수정 가능하다. 

 

소프트웨어는 언제든 교체가 가능하다. 현업에서 사용중인 수 많은 소프트웨어는 지속적인 업데이트를 요구한다. 그러나 소프트웨어를 업데이트 하는 과정에서 우리가 서비스 센터에 방문해 해야하는 등의 추가적인 지연 없이 클릭 몇번으로 가능하다. 이 특성은 소프트웨어 개발자 뿐만 아니라 소비자 또한 만족도가 높은 소프트웨어의 특징이다.

 

소프트웨어는 닳지 않는다. 따라서 오랜 기간을 사용해도 성능에 변화가 없다. 사실 이 특징은 온전히 '소프트 웨어' 에만 초점을 맞춘 특징이지 소프트웨어를 운용하는 하드웨어는 수명이 존재한다. 

 

소프트웨어는 덮어쓰기가 가능하다. 다른 사람이 배포한 코드를 우리 문제에 맞게 수정해 사용할 수 있어 업무의 효율성이 증가한다.

 

소프트웨어는 어플리케이션에 의존해야 한다. 소프트웨어의 특성상 보이지 않기 때문에(invisible) UI/UX 등과 연동된 통합 어플리케이션으로 결과를 출력해야한다. 따라서 어플리케이션에 의존적일 수 밖에 없다.

 

 

 

 

 

 

'Software Engineering > Week 1' 카테고리의 다른 글

Classification of S/W  (0) 2022.11.09