Software Engineering
Software engineering is concerned with theories, methods and tools for professional and cost-effective software development.
(* 소프트웨어 공학은 전문적이고 효율적인 소프트웨어 개발을 위한 이론들이나 방법론들, 도구들을 다루는 학문입니다.)
Software costs is more to maintain than to develop
(* 소프트웨어는 비용은 개발보다 유지 보수에 더 든다.)
여기서 cost-effective는 금전적인 비용뿐 아니라 인적자원의 비용등 여러가지 요소들을 포함하는 개념입니다. Software Quality Attributes라고 불리는 품질 속성들이 이에 해당합니다.
이런 소프트웨어 공학은 아래의 3가지 특징을 가질때 비로소 필요해집니다:
- Large System
- Team Development(* 단체 개발)
- Reuse(* 코드 복사같은 작은 reuse말고, 이를 수정하고 디버깅하는 큰 reuse를 포함하는 개념)
Types of Software Products
소프트웨어 제품의 종류에 따라 개발 및 방법론들이 달라질 수 있습니다.
- Generic Software: stand-alone system that are marketed and sold to any customer who wishes to buy them
대부분은 PC 소프트웨어나들은 제네릭 소프트웨어에 속합니다. 제네릭 소프트웨어는 개발자가 requirements specification의 책임이 있습니다. 즉, 개발자에 의해 소프트웨어의 변경에 대한 결정이 이루어집니다.
정말 간단하게 돈주고 사는 소프트웨어는 Generic Software라고 볼 수 있습니다.
- Customized Software: Software that is commisioned by a specific customer to meet their own needs
Embedded된 통제 시스템이나 항공 통제 시스템, 교통 모니터링 시스템 등이 Customized Software에 속합니다. Customized Software는 개발자가 아닌 그 소프트웨어의 소비자에게 Software specification의 책임이 있습니다. 즉, 소프트웨어 변경에 대한 결정에 소비자에게 있습니다.
그렇다면 은행에서 Teller가 사용하는 "은행시스템"은 어떤 SW일까요?
Customized Software입니다. 은행이라는 소비자에 맞춰 만들어진 소프트웨어이기 때문입니다.
그렇다면 "인터넷 뱅킹 어플"은 어떤 SW일까요?
Generic Software입니다. 해당 어플을 사용하는 소비자에 의해 소프트웨어가 변경되거나 하지 않기 때문입니다.
Essential Attributes of Good Software Products
앞서 말했던 소프트웨어 품질 속성들에 해당하는 것들입니다. 아래의 4가지는 정말 대표적인 속성들이고, 정말 많은 속성들이 존재합니다. 반드시 아래의 요소들을 모두 만족시킬필요는 없고, 구상 단계에서 소프트웨어 공학자들이 협의 후 만족해야하는 속성들을 결정합니다:
- Maintainability: Software should be written in such wat so that it can evolve to meet the changing needs of customers. This is a critical attribute because software change is inevitable in changing business environments
유지보수성입니다. 소프트웨어의 변경은 사업 환경에서는 불가피하기 때문에 소프트웨어의 변경 가능성, 유지 보수성은 매우 중요한 요소입니다.
- Dependability: Software dependability includes a range of characteristics including reliablity, security and safety. Dependable software should not cause physical or economic damage in the event of system failure.
믿을 수 있는 소프트웨어입니다. 신뢰성이나 보안, 안정성과 같은 요소들이 세부 요소로 존재합니다. 하지만 perfomence와 같은 요소들과 trade-off관계인 경우가 많기 때문에 사전에 해당 속성의 만족도를 정확히 정해야합니다.
- Efficiency: Software should not make wasteful use of system resources such as memory and processor cycles. Efficiency therefore includes responsiveness, processing time, memory utilization, etc.
효율성입니다. 소프트웨어는 불필요한 전력이나 메모리 사용, 비용이나 인적 자원의 사용등을 해서는 안됩니다.
- Acceptability: Software must be acceptable to the type of users for which it is designed. This means that it must be understandable, usable and compatible with other system that they use
받아들일 수 있는 소프트웨어입니다. 소비자의 환경이나 시스템에서 이해가능하고, 사용가능한 소프트웨어를 만들어야합니다. 엉뚱하거나 사용하지 않는 기능이 있는 등의 소프트웨어를 만드는 것을 지양해야합니다.
또 다른 품질 속성들은 아래의 링크에 있습니다:
https://en.wikipedia.org/wiki/List_of_system_quality_attributes
다시 Software Engineering
Software engineering is an engineering discipline that is concerned with all aspects of software production from the early stages of system specification through to maintaining the system after it has gone into use
(* 다시말해 소프트웨어 공학은 초기 단계의 시스템 구체화부터 소프트웨어가 실제 사용한 후 그 시스템을 유지보수하는 단계까지에 대한 소프트웨어의 모든 측면을 고려하는 공학 규율(?)을 말한다.)
- Engineering discipline: Using appropriate theories and methods to solve problems bearing in mind organizational and financial constraints
이때 Engineering discipline이란 여러 제약들을 견디며 문제를 해결할 수 있는 방법론이나 이론들을 사용하는 것입니다.
- All aspects of software production: Not just technical process of development, but also project management and the development of tools, methods, etc. to support software production
이때 소프트웨어 제작의 모든 측면이란 그저 기술적인 과정뿐만 아니라 프로젝트 관리, 개발 도구, 방법론등 소프트웨어 제작을 지원해주는 모든 것을 말합니다.
'[학교 수업] > [학교 수업] Software Engineering' 카테고리의 다른 글
[Software Engineering] 4주차 (2) (1) | 2024.09.27 |
---|---|
[Software Engineering] 4주차 (1) (0) | 2024.09.23 |
[Software Engineering] 3주차 (2) (0) | 2024.09.20 |
[Software Engineering] 2주차 (2) (0) | 2024.09.13 |
[Software Engineering] 2주차 (1) (0) | 2024.09.09 |