Software System 은 추상적이고, 물리적엔 제약이 구속받지 않는다. 따라서, 적용에 한계가 없으며 시간이 지날수록 복잡해지는 특성을 가지고 있다. 많은 Software Engineering이 실패하는 이유는 크게 다음과 같은 2가지 이유가 있다.
1) Increasing system complexity
2) Failure to use software engineering methods
1.1 Professional software development
SE(Software Engineering)는 개발자를 위한 것이 아닌, 그것을 사용하는 일반적인 사람들을 위한 것이다. software는 program뿐만 아니라, documentation, libraries, support websites, configuation data 등 program을 위해 필요한 모든 것들을 포함한다.
software product는 두가지 종류가 있다.
1) Generic products : 개발조직에 의해서 개발됨, 고객이 speciification에 관여하지 않음
2) Customized software : 특정 고객을 위해 개발됨, 고객이 specification에 관여함
많은 소프트웨어가 Generic base로 개발되고, 그것을 특정 고객에게 맞춰서 Customized되는 형태로 개발된다.
1.1.1 Software engineering
SE란, software system specification부터 maintanance까지 이르는 전과정에 대한 engineering이다.
이것은 특정 환경에서 주어진 예산과 시간을 고려하여 요구되는 quality를 생산하는 것과 관련된다. 장기적인 관점에서 SE를 도입하는 것은 비용측면에서 효율적이며, 높아지는 소프트웨어의 의존성에 따라 요구되는 신뢰성을 높일 수 있다.
시스템적인 측면에서, SE는 software process라고도 불리며, 다음과 같은 과정을 가리킨다.
1) specifictation -> development -> validation -> evolution
SE는 computer science, system engineer과도 밀접한 관련이 있다. SE는 소트트웨어라는 컴퓨터시스템의 일부분을 다루기 때문에, 하부에 존재하는 computer science인 컴퓨터 이론과 방법론이 적용된다. 또한, sofrware로 구성된 시스템을 엔지니링 하는것이 궁극적인 목표이기 때문에 hardware devleopment, policy, process design과 같은 system engineer도 적용된다. 하지만, universal한 기법은 존재하지 않으며, 다음과 같은 요소를 고려하여 다른 기법을 적용하여야 한다.
1) Heterogeneity(이질성), 2) Busniess and social change, 3) Security and trust, 4) Scale
1.1.2 Software engineering diversity
이러한 다양성에 따라서, software system은 다음과 같은 요소로 분류될 수 있으며, 분명한 경계가 존재하지는 않는다.
1) Stand-alone application : personal computer 또는 mobile device에서 실행
2) Interactive transaction-based applications : web application과 같이 remote computer에서 실행
3) Enbedded control systems : hardware device를 control하고 manage
4) Batch processing systems : 일괄적으로 거대한 batch작업을 처리
5) Entertainment systems : 사용자를 즐겁게 하기 위함, 게임 등
6) Systems for modeling and simulation : 과학자나 엔지니어를 위해 물리적인 프로세스나 상황을 모델링
7) Data collection and analysis systems : Data를 모으고, 분석하는 시스템
8) Systems of systems : ERP System과 같이, 여러 software system으로 구성된 시스템
1.1.3 Internet software engineering
인터넷의 발달은, 실제로 원격의 웹 서버에 software를 두고 서비스하는 형태로 바뀜으로서 사용자 각각의 PC에 software를 설치할 필요성을 없앴다. 이러한 web-based 와 service-oriented 개념은 필수적인 것이 되었다.
1.2 Software engineering ethics
소프트웨어 산업의 발달과 커져가는 의존성에 맞춰 software engineering을 하는 사람들은 일종의 윤리의식을 갖추어야 한다. 우리는 전문성을 갖추어야 하고, 유능해야하고, 올바른 방식으로 소프트웨어를 사용해야 한다. 이러한 것들에 대한 추가적인 것들은 ACM/IEEE Code of Ethics와 같은 문서에서도 찾아볼 수 있다.
'프로그래밍 > Software Engineering(소프트웨어 엔지니어링)' 카테고리의 다른 글
5. System modeling (0) | 2023.05.29 |
---|---|
4. Requirement engineering (0) | 2023.05.29 |
3. Agile software development (0) | 2023.05.06 |
2. Software processes (0) | 2023.04.30 |