[SE] Software Engineering and Software Development Process

parkheeddong·2023년 3월 23일
0

Software Engineering

목록 보기
1/19

1. Program and Software

프로그램이 컴퓨터에 의해 실행되는 instruction들의 집합이라면, 소프트웨어는 프로그램을 비롯하여 소프트웨어 개발과 관련된 모든 문서들을 의미한다. 즉 테스팅 결과, 유저 매뉴얼, 각 개발단계별 문서들도 소프트웨어라고 할 수 있다.

2. Software in Academia

학계에서도 논문을 작성할 때 단순 프로그램 코드만을 기재하는 것이 아니라 소프트웨어를 잘 사용할 수 있게 하도록 4가지 사항을 요구한다.

1) Readme File : 이 소프트웨어가 어떤 목적을 가지고 있는 무엇인지 설명하는 메인 파일

2) Requirements File : 소프트웨어 환경과 하드웨어 환경에 대한 요구사항을 기술하는 파일

3) License File : 라이센스에 대한 파일

4) Install File : 간단한 사용 예시와 설치 방법을 기재한 파일

3. 소프트웨어 공학 기술의 필요성

사람들이 소프트웨어공학적 방법과 기술을 사용하지 않고 프로그램을 작성하는 것은 쉽지만, 결과적으로 그 소프트웨어의 비용은 더욱더 비싸지고 신뢰성은 더 낮을 것이다. 소프트웨어는 개발하는 비용보다 유지 비용이 더 크기 때문에, 소프트웨어공학 기술을 활용하여 처음부터 프로그램을 잘 작성하는 것이 효율적이다. 소프트웨어의 크기는 점점 가파르게 증가하며 복잡해지고 있기 때문에 믿을 수 있는 시스템을 경제적이고 빠르게 개발하기 위해 소프트웨어공학적 기술의 필요성은 점점 더 커지고 있다. 초기 단계에 작성한 Engineering Discipline은 소프트웨어 생산 뿐 아니라 실제 사용되고 유지하는 과정에까지 영향을 미치게 된다. 즉 소프트웨어의 생산은 단순히 기술적 개발과정 뿐 아니라 프로젝트 관리부터 개발 툴과 방법을 비롯한 전체적 과정을 아우른다.

4. Software 개발의 프로세스

1) Software Specification (소프트웨어 설명서/명세서)

고객과 엔지니어가 소프트웨어가 무엇인지, 그리고 소프트웨어의 제약조건을 정의하는 과정

2) Software Development (소프트웨어 개발)

소프트웨어를 디자인하고 프로그래밍하는 단계

3) Software Validation (소프트웨어 검증)

소프트웨어가 고객이 원하던 것인지 체크하는 단계

4) Software Evolution (소프트웨어 발전)

소프트웨어가 고객과 시장의 수요를 반영하여 변경되는 단계

5. 소프트웨어에 영향을 주는 이슈

1) Heterogeneity : 비균질성

소프트웨어는 다양한 타입의 컴퓨터와 모바일 디바이스를 포함해서, 광역성을 가진 시스템으로 작동할 것을 요구받는다.

2) Business and Social Changes

비즈니스와 사회가 급격하게 변화하고 있기 때문에,소프트웨어는 현존하는 소프트웨어를 더 빠르게 발전된 소프트웨어로 발전시켜야 한다.

3) Security and Trust : 보안과 신뢰

소프트웨어는 우리의 삶과 밀접히 관련되어 있기 때문에 소프트웨어를 사람들이 신뢰할 수 있는 것은 중요한 문제이다. 최악의 소프트웨어 버그라고 불리는 Therac-25는 소프트웨어 버그로 인해 방사선 양을 과다하게 하여 많은 환자들을 죽음에 이르게 했다.

6. 시스템에 따른 소프트웨어공학 기술

소프트웨어공학적 기술들은 각각 다른 시스템에게 다른 기술들이 적절하다. 예를 들어 게임과 같이 빠른 업데이트가 필요한 경우와, 원자력 발전소와 같이 안전이 상당히 중요한 시스템의 경우에는 다른 기술이 필요하다.

7. 소프트웨어 프로덕트

1) Generic Products

일반적 대중을 대상으로 한 프로덕트로서, 구매를 원하는 소비자들에게 마케팅되고 팔리는 독립체계(Stand-Alone systems)이다. 개발자가 주도권을 가진다.
예를 들어 워드 프로세서, 드로잉 패키지, 프로젝트 관리 툴 등의 PC 소프트웨어가 있다.

2) Customized Products

특정 고객을 대상으로 한 프로덕트로서, 특정 고객층들의 니즈를 반영하기 위해 의뢰를 받은 소프트웨어이다. 특정 고객의 요구사항들이 주도권을 가진다.
Air Traffic Control software, traffic monitoring system, embedded control system 등이 그 예이다.

=> 이러한 프로덕트 타입 간의 간극은 점점 희미해지고 있다.

8. 좋은 소프트웨어의 특징

1) Maintainability

소프트웨어는 고객들의 변화하는 니즈를 만족시키기 위한 방향으로 진화해야 한다. 이러한 소프트웨어 변화는 필수적이기 때문에, 리팩토링이 가능한 구조가 좋은 소프트웨어이다.

2) Dependability and Security

소프트웨어에 대한 Dependability(신뢰성)은 보안, 안전 등 여러 특징들을 아우른다. 믿을 수 있는 소프트웨어는 시스템 실패로 인해 물리적이거나 경제적 데미지를 발생시켜서는 안된다. 더불어 악성 사용자가 시스템에 접근하거나 해를 끼치지 않도록 해야 한다.

3) Efficiency

소프트웨어는 메모리를 비롯한 시스템 자원을 낭비하지 않도록 해야한다. 따라서 효율성은 responsiveness, processing time 등을 포함한다.

4) Acceptability

소프트웨어는 유저들에게 acceptable해야 한다. 즉 이해가 가능해야 하고, 사용할 만 하고, 다른 시스템과 호환이 가능해야 한다.

9. 소프트웨어 엔지니어링 윤리

소프트웨어 엔지니어링은 단순히 기술적인 스킬을 적용하는 것을 넘어서 보다 브도르한 책임이 필요하다. 엔지니어들은 정직하게, 그리고 윤리적으로 개발해야 하며 단순히 법을 지키는 것이 아니라 도덕적으로 옳은 원칙들을 지켜야 한다. 예를 들어 엔지니어들은 회사의 비밀 유지를 하거나, 오버 셀링을 하지 않아야하며, 지적재산권을 준수해야 한다.

0개의 댓글