observe_db

[소프트웨어공학] #1 Software Quality and Principle 본문

학교 공부/소프트웨어공학(3-2)

[소프트웨어공학] #1 Software Quality and Principle

쩡윤 2023. 9. 8. 21:51

9/7, 9/12

 

소프트웨어 공학의 핵심은 "소통" 이다.

 

1-1: What is software?

 

현재 소프트웨어의 모습들.

금융, 노트북, 스마트폰, 이동수단, 건물, 비행기, 의료 등등등

 

developed nations는 소프트웨어에 의존한다.

많은 시스템들이 소프트웨어에 의해 컨트롤됨.

소프트웨어 공학은 전문적인 소프트웨어 개발을 위한 이론, 방법 그리고 도구들과 관련있다.

모든 선진국에서 소프트웨어 표현의 지출은 GNP(Gross Nation Product)의 중요한 부분이다.

 

소프트웨어의 정의

Program: 명령어의 집합(set/collection of instructions)

Software: Program과 개발 과정에서 만들어지는 모든 산출물들(자료구조, DB, 테스트 결과, 문서, 메뉴얼 등)

 

소프트웨어의 특징(HW와 비교)

1) 개별적 능력이 생산성에 영향을 준다.

manufacture하지 않다.

=>대량 생산 불가.

development함.

=>새로운 것을 만드는 과정

 

2) Failure rate

하드웨어는 초기에 높은 실패율을 보이고, 안정되었다가, 시간이 지나면 노화와 환경에 의해 고장이 늘어나게 된다.

소프트웨어는 부분에 의한 고장이 일어나지 않는다.

이상적으로는 초반 고장만 있고, 고장율이 줄어들어야한다.

소프트웨어는 요구사항을 반영하여 업데이트가 일어나고, 실패율이 늘어나고 안정되는 것을 반복한다.

이런 과정속에서 품질이 점차 떨어지게 되고, 마지막엔 유지와 폐기중 선택하게 된다.

 

3)풀어야할 문제들

-소프트웨어 개발의 늦은 발전

-사용자 요구 증가

-관리방법의 부재

 

4) 비용

-HW보다 크다.

-유지보수비용이 개발 비용보다 크다

-비용 효율이 좋은 소프트웨어 개발과 관련되어있다.

 

5) 문제점

-늘어나는 요구

-복잡성 증가

-난이도 상승

-같은 툴 사용

-같은 방법(method) 유지

-같은 Human resource

 

실패의 주요 원인

1. 시스템 복잡도 증가

2. 소프트웨어 공학 방법의 적용문제

 

 

1-2 What is engineering?

engineering: 과학적인 원리들을 사용하는 여러가지에 사용하는 학문.

(과학적인 원리들을 '찾아내는'것이 science)

procedure(단계)와 standard(표준)을 가진다.

 

Software Engineering은 Software + Engineering

개발할 때에 공학적 방법을 적용하는 것.

- 개발의 어려움을 해결하고,

- 생산성을 향상시키고

- 만족도를 증가시킨다.

 

공학 규범(Engineering discipline): 문제를 해결하기 위해 적절한 이론이나 방법을 사용하는 것

개발의 기술적 과정과 프로젝트 관리, 개발 툴과 방법들을 포함함.

 

중요성

소프트웨어의 의존성-의존가능성, 신뢰성, 경제성, 속도

비용 절감: 많은 비용이 소프트웨어의 변경에서 발생.

 

 

1-3 Characteristics of developing software

 

Software specification(명세화): 소프트웨어의 제약사항과 연산 정의.

Software development(개발): 소프트웨어 설계 및 프로그래밍

Software validation(검증): 고객 요구사항을 보장하는지 확인

Software evolution(진화): 고객 및 시장 요구사항 반영(유지보수)

 

 

소프트웨어에 영향을 끼치는 주제들

Heterogeneity(이질성): 단순히 하나의 환경이 아니라, 여러가지 환경(네트워크, 모바일 등등)에서 운영할 수 있어야한다.

Business and social change(비즈니스와 사회 변화): 이들은 빠르게 변화하기 때문에, 개발도 같이 빨라진다.

Security and trust(보안과 신뢰)

Scale(규모): 점점 커지는 중

 

 

1-4 Details of Software Engineering

소프트웨어란? 컴퓨터 프로그램과 그에 관련된 문서

좋은 소프트웨어의 속성은? 요구된 기능을 제대로 수행하고, 유지관리 가능, 의존성, 사용가능

소프트웨어 공학이란? 공학적 관점을 소프트웨어 활동에 적용하는 것.

소프트웨어 공학의 기능적 활동은? 소프트웨어 사양, 개발, 검증 및 발전

소프트웨어 공학과 컴퓨터 과학의 차이점은? CS는 이론과 기초에 초점을 맞춤.(이학임. 알고리즘, 자료구조 같은)

소프트웨어 공학과 시스템 공학의 차이점은? 시스템 공학이 더 넓은 범위. 하드웨어도 포함하는 개념.

소프트웨어 공학이 마주하는 주요한 도전은? 다양성 증가, 전송시간 감소, 신뢰있는 소프트웨어의 개발

소프트웨어 공학의 비용은 어떠한가? 60%가 개발, 40%가 테스트로 사용. 유지보수가 많은 비율.(인건비도 꽤 큼)

소프트웨어 공학 기술과 방법중 가장 최고는? 각 상황마다 다른 기술을 사용해야함.

웹 기반 소프트웨어 공학? 고려할거 많음

 

일반적)그것을 원하는 어떤 고객이든 구매 가능/회사주도

커스텀)특정 고객을 위해 만들어짐/고객주도

 

좋은 소프트웨어의 핵심 속성들

Maintainability(유지보수성): 유지보수를 얼마나 쉽게 할 수 있는지

Dependability and security(확실성과 보안성): 안정적+보안

Efficiency(효율성): 개발자 능력에 크게 의존함.

Acceptability(수용성): 이해가능성.(UI/UX)

 

 

1-5 Divergence of Software

종류 방법은 다양하다.

여러가지 중에 해당 프로젝트에 맞는 방법을 찾아야한다.

 

어플리케이션 타입

- 독립형 어플: 오프라인에서도 가능.

- 대화형 Sw(상호작용 필요): 네트워크 or 터미널 기반

- 임베디드 컨트롤 시스템: 하드웨어 장치에 내장

- 일괄처리 시스템(batch processing): 한번에 처리(ex. 전기요금 계산)

- 엔터테이먼트: 게임, 넷플릭스

- 모델링/시뮬레이션 시스템: 과학자나 공학자가 실세계/상황을 실험하기 위해 사용

- 데이터 수집

- SoS(System of systems): 시스템을 통합하는 시스템(복합시스템)

 

다양한 요구를 적용하는 것.

 

 

1-6 Software engineering ehtics

윤리 의식을 갖춰야한다.

ex) 다크앤다커사건

 

Confidentiality(비밀유지)

Competence(능력): 능력껏 일해라. 가능한거만..

Intellectual property rights(지적재산권)

Computer misuse(컴퓨터 남용)

 

Comments