Software Process
Introduction
The software process
- 소프트웨어 과정(Software Process)은 소프트웨어 시스템을 개발하기 위해 필요한 일련의 구조화된 활동들로 구성됩니다.
- 다양한 소프트웨어 과정이 존재하지만 모든 과정은 다음과 같은 공통적인 단계를 포함합니다
- Specification (명세, Requirements): 시스템이 무엇을 해야 하는지 정의합니다.
- 설계 및 구현(Design and implementation): 시스템의 구조를 정의하고 시스템을 구현합니다.
- 검증 (Validation): 시스템이 고객의 요구사항을 충족하는지 확인합니다.
- 진화 (Evolution): 고객의 변화하는 요구에 따라 시스템을 변경합니다.
- 시험 문제!
- 소프트웨어 프로세스 모델은 프로세스의 추상적 표현입니다. 이는 특정 관점에서 프로세스의 설명을 제시합니다
Software process descriptions(소프트웨어 개발 활동 계획서)
- 개발 활동 계획서 : Activities + Orders
- 다음 요소들 또한 포함해야 함
- Products : 개발 활동의 결과
- Roles : 프로세스에 참여하는 각 개인이나 팀의 역할
- Pre- and post-conditions(사전 조건과 사후 조건) : 구현 전 후로 만족해야 할 조건
Plan-driven and agile process
- Plan-driven processes
- 프로세스에 필요한 모든 활동을 계획하고, 진행 정도는 현재 진행 정도와 계획을 대비하여 측정한다
- Agile processes
- 점진적으로 계획을 추가해 나가고, 변화하는 고객의 요구사항을 반영하여 개발 프로세스를 변경하기 쉽다
- 실무에선, 두 가지 요소가 혼재된 프로세스를 구성하여 실행한다
- 어떤 process가 옳고 그르다고 할 수 없음
Software process models
- The waterfall model(폭포수형 모델)
- Plan-driven model.
- 명세와 개발이 명확히 분리 되있다.
- (개발 중에 명세 수정이 안되며, 개발을 한다는 것은 명세가 확정된 것을 의미한다.)
- Incremental development(점진적 모형)
- 명세, 개발 및 검증(Validation)이 모두 함께 반복되어 일어난다.
- Integration and configuration - plan-driven or agile
- 계획 주도 방식 또는 애자일 방식으로 진행할 수 있으며, 이 모델은 기존에 구성 가능한 컴포넌트들로 시스템을 조립합니다
- 접근법은 주로 재사용 가능한 컴포넌트가 많을 때 유용하며, 빠르게 시스템을 구축할 수 있습니다.
- ex) 외부 api를 가져와서 develop를 하는 경우
- 실무에서는 이러한 모델들의 요소를 조합하여 사용하는 경우가 많습니다
The waterfall model
- 이 모델의 기본 원칙 : 하나의 단계가 완전히 끝나야 다음 단계로 넘어갈 수 있다
- 각 단계는 특정 산출물을 생성합니다. 이 산출물은 문서 형태일 수 있으며, 생성된 문서는 다음 단계의 입력 자료로 사용됩니다
Waterfall model의 문제점
- 워터폴 모델에서 프로젝트를 구분된 명확한 단계로 나누는 것은 유연성이 부족하여 고객의 요구사항 변화에 대응하기 어렵다는 단점이 있다
- 그러므로 요구사항이 아주 명확한 경우와 변화가 거의 일어나지 않는 경우에 적합한 모델이다.
- 그러나 현실에는 요구사항이 fix되는 일이 드물다.
- waterfall model은 시스템이 여러 사이트에서 개발되는 대규모 시스템 엔지니어링 프로젝트에 주로 사용된다.
- 이러한 상황에서는 폭포수 모델의 계획 중심 특성(plan-driven nature)이 작업을 조정하는데 도움이 된다.
Incremental development
Incremental development benefits
고객 요구사항 변경을 수용하는 비용이 절감된다.
- 다시 분석하고, 작성해야 하는 문서의 양이 waterfall model보다 훨씬 적다.
- (waterfall model은 최종산출물이 나온 다음에야 요구사항 및 변경사항 수정이 가능하며 그동안 자원 소모가 크다.)
이미 진행된 개발 작업에 대한 고객 피드백을 더 쉽게 얻는다.
- 고객은 소프트웨어 시연에 의견을 줄 수 있고, 얼마나 많이 구현되었는지 확인이 가능하다.
- (초기버전~중간버전을 고객이 계속 접할 수 있고 그에 따라 피드백이 빠르게 들어올 수 있다.)
고객에게 유용한 소프트웨어를 빠르게 전달하고 배포하는 것이 가능하다.
- 고객은 waterfall model보다 더 빨리 소프트웨어가 제공하는 가치를 경험하고 실제로 사용해 볼 수 있다.
- (핵심적인 것을 먼저 구현한 후 세부적인 것은 이후 수정할 수 있다.)
Incremental development problems
프로세스가 가시적이지 않다.
- 관리자는 진척도를 확인하기 위한 정기적인 중간산출물이 필요하다. 그러나 시스템이 빨리 개발되어야 한다면, 시스템의 모든 버전을 반영한 문서를 작성하는 것은 비용 측면에서 비효율적이다.
- cf) specification list를 가지고 개발하는 plan-driven 방식
새로운 증가분이 반영되면서 시스템 구조를 훼손시키는 경향이 있다.
- 소프트웨어 개선을 위해 리팩토링하는데 시간과 돈을 들이지 않으면, 정기적인 변경으로 인해 구조가 손상되는 경향이 있다. 시스템에 새로운 기능을 추가하는 작업은 하면 할수록 더 어렵고 많은 비용이 들어간다.
Integration and configuration
- 소프트웨어 재사용을 바탕으로 한 통합 및 구성은 기존의 컴포넌트나 애플리케이션 시스템들로부터 시스템을 통합하는 방식입니다
- 이런 기존 컴포넌트들은 종종 COTS(Commercial-off-the-shelf, 기존에 있는 것을 그대로 가져다 쓰는) 시스템이라고 불립니다.
- 재사용된 요소들은 사용자의 요구사항에 맞게 그들의 행동과 기능을 조정하기 위해 구성될 수 있습니다
- 현재 많은 유형의 비즈니스 시스템을 구축하는 표준 접근법으로 ReUse가 널리 사용되고 있습니다
Types of reusable software
- Stand-alone application systems (COTS)
- 특정 환경에서 사용하기 위해 구성된 독립 실행형 애플리케이션입니다. 예를 들어, 사무용 소프트웨어나 그래픽 디자인 툴 등이 이에 해당됩니다.
- Collections of objects
- 컴포넌트 프레임워크(예: PyGame)와 통합되어 개발된 객체들의 집합입니다. 이러한 패키지는 특정 애플리케이션에 쉽게 통합되어 기능을 확장할 수 있습니다.
- Web services
- 서비스 표준에 따라 개발되며 원격 호출이 가능한 웹 서비스입니다. 이를 통해 다양한 애플리케이션에서 공통의 기능을 웹 기반으로 이용할 수 있습니다.
- ex) kakao map api
- 심지어 entire systems 자체도 reusable software로 간주될 수 있다
- AWS와 같은 클라우드 서비스, Docker나 같은 컨테이지원 기술
Reuse-oriented software engineering model
장점
- 개발해야하는 소프트웨어의 양을 줄인다.
- 비용과 risk가 감소한다.
- 소프트웨어를 고객에게 더 빨리 전달하여 배포할 수 있다
단점
- 요구사항의 타협이 불가피: 재사용된 요소들은 때때로 특정 사용자의 실제 필요를 완벽히 만족시키지 못할 수 있으며, 이로 인해 시스템이 사용자의 진정한 요구를 충족시키지 못할 수 있습니다
- 재사용된 시스템 요소의 진화에 대한 통제력 상실: 재사용된 요소들은 그 소유권이나 제어가 외부에 있을 수 있기 때문에, 이 요소들의 업데이트나 변화를 직접 관리하는 것이 어려워질 수 있습니다.
- ex) GPT 토큰 당 가격 인상
Process activities
실제 소프트웨어 개발 과정은 기술적, 협업적, 관리적 활동들이 서로 얽혀 있는 일련의 순서로 이루어집니다. 이러한 활동들의 전반적인 목표는 소프트웨어 시스템을 명세화하고, 설계하며, 구현하고, 테스트하는 것입니다.
소프트웨어 개발의 네 가지 기본적인 프로세스 활동은 명세(specification), 설계 및 구현(design and implementation), 검증(validation), 그리고 진화(evolution)입니다. 이 활동들은 각기 다른 개발 프로세스에서 다르게 조직됩니다.
예를 들어, 워터폴 모델에서는 이러한 활동들이 순차적으로 조직되어 각 단계가 완료된 후 다음 단계로 진행됩니다. 반면에, 증분 개발(incremental development)에서는 이 활동들이 서로 교차하며 진행됩니다. 즉, 명세, 설계, 구현 및 테스트 단계가 반복적으로 이루어지며 서로 얽혀 있어 프로젝트의 유연성을 높이고, 신속한 피드백에 기반하여 개선을 진행할 수 있습니다.
Software specification
시스템을 개발하기 위해 어떤 서비스가 필요한지를 이해하고 정의하며, 시스템의 운영과 개발에 대한 제약사항을 찾아내는 프로세스
Requirements engineering process
1. 요구사항 도출 및 분석(Requirements elicitation and analysis):
시스템에 대한 설명을 바탕으로, 시스템 이해관계자들이 시스템에 대해 요구하거나 기대하는 바를 파악합니다. 이 단계에서는 다양한 이해관계자의 요구사항과 기대를 수집하고 분석합니다.
2. 요구사항 명세(Requirements specification):
사용자 요구사항과 시스템 요구사항을 구체적으로 정의합니다. 이 명세 과정을 통해 요구사항이 문서화되며, 이 문서는 개발 과정에서 중요한 참고 자료로 사용됩니다.
3. 요구사항 검증(Requirements validation):
요구사항 문서의 타당성을 검토합니다. 이 단계는 수집된 요구사항이 실제 사용자의 필요를 정확히 반영하고 있는지 확인하며, 요구사항이 명확하고 실행 가능한지 점검합니다.
Software design and implementation
system specifiation을 실행가능한 시스템으로 전환하는 과정
Software design
- specification을 실현하는 소프트웨어 구조를 설계하는 것이다.
Implementation
- 소프트웨어 구조를 실행 가능한 프로그램으로 변환하는 것이다.
설계와 구현은 밀접하게 연관되어 있으며 중첩될 수 있다.
A general model of the design process
Design activities
Architectual design:
시스템의 전체 구조, 주요 구성 요소(subsystems나 modules), 이들의 관계 및 배포 방법을 식별하는 단계이다.
Interface design:
시스템 컴포넌트들 사이의 인터페이스 정의를 디자인하는 단계이다.
Component slection and design:
재사용할 수 있는 컴포넌트를 찾고, 재사용할 수 없다면 각 시스템 구성 요소의 작동 방식을 설계하는 단계이다.
Database design:
시스템의 데이터 구조를 설계하고 데이터베이스에서 어떻게 표현할 지 결정하는 단계이다.
System implementation
시스템 구현은 소프트웨어를 개발하거나 애플리케이션 시스템을 구성함으로써 이루어집니다. 다음은 시스템 구현 과정의 주요 측면들입니다:
1. Design and implementation : 대부분의 소프트웨어 시스템 유형에서 설계와 구현은 교차하는 활동입니다. 즉, 설계가 진행되는 동안 구현도 병행하여 이루어지며, 설계 변경사항이 구현에 신속하게 반영될 수 있습니다.
2. 프로그래밍: 프로그래밍은 주로 개인적인 활동으로, 표준화된 과정이 없습니다. 각 개발자가 주어진 문제를 해결하기 위해 자신만의 방법과 스타일로 코드를 작성합니다. 알잘딱
3. 디버깅: 디버깅은 프로그램의 결함을 찾고 이를 수정하는 활동입니다. 개발 과정에서 발생할 수 있는 오류나 버그를 식별하고, 그 원인을 분석하여 적절한 수정을 통해 문제를 해결합니다. 개발비용의 50-70% 정도를 투자할 정도로 중요!
Software verification & validation
검증(verification) 및 확인(validation)은 시스템이 주어진 명세를 잘 따르고 있다는 것과 시스템 고객의 요구사항을 만족시키고 있다는 것을 보이기 위한 것이다.
verification:
제대로 작동하는지? 버그 없이 잘 돌아가는지?
validation:
고객을 만족시키는지?
- 소프트웨어 검증은 체크와 리뷰 과정, 그리고 시스템 테스팅을 포함합니다
- 시스템 테스팅은 시스템을 실행하고, 시스템에 의해 처리될 실제 데이터의 사양에서 파생된 테스트 케이스를 사용하여 테스트하는 과정입니다.
- 소프트웨어 테스팅은 검증 및 검사(V & V) 활동에서 가장 일반적으로 사용되는 방법입니다. (나중에 다룸)
Testing stages
1. 컴포넌트 테스팅(Component testing)
개별 컴포넌트를 독립적으로 테스트합니다. 이 컴포넌트들은 함수, 객체 또는 이러한 요소들의 일관된 그룹일 수 있습니다. 컴포넌트 테스팅의 목적은 각 부품이 정상적으로 기능하는지 확인하고, 초기 결함을 발견하여 수정하는 것입니다.
2. 시스템 테스팅(System testing)
시스템 전체를 테스트합니다. 이 단계에서는 시스템의 모든 컴포넌트가 통합된 상태에서의 작동을 검사하며, 특히 시스템의 출현 특성(emergent properties)을 테스팅하는 것이 중요합니다. 출현 특성이란 개별 컴포넌트에서는 볼 수 없는, 시스템 전체로서만 나타나는 특성을 의미합니다.
3. 사용자 테스팅(User testing, 또는 수용 테스팅 Acceptance testing)
고객의 데이터를 사용하여 테스트를 진행합니다. 이 단계의 목적은 시스템이 고객의 요구사항을 충족하는지 확인하는 것입니다. 고객이 실제 사용 조건에서 시스템을 평가하게 함으로써, 시스템이 시장에 출시되기 전에 최종 사용자의 요구를 만족시킬 수 있는지 검증합니다. (ex. Beta test)
Software evolution
- 소프트웨어는 본질적으로 유연하며 변경될 수 있다.
- 변화하는 비즈니스 환경으로 요구사항이 변경됨에 따라, 비즈니스를 지원하는 소프트웨어도 진화하고 변경되어야 한다.
- 개발과 유지보수 사이에 구분이 있었지만,
- 이는 점점 덜 중요해지고 있습니다. 왜냐하면 시스템이 완전히 새로워지고 있기 때문입니다.
- ex) DevOps
(이 슬라이드는 소프트웨어 개발과 유지보수의 전통적인 구분이 더 이상 중요하지 않다고 주장하면서, DevOps와 같은 새로운 방법론이 소프트웨어 개발 생태계에서 중요해지고 있음을 강조합니다.)
Coping with change
- 모든 큰 소프트웨어 프로젝트에서 변화는 불가피합니다.
- 비즈니스 변화는 새로운 및 변경된 시스템 요구사항을 가져옵니다.
- 새로운 기술은 구현을 개선할 수 있는 새로운 가능성을 열어줍니다.
- 플랫폼 변경은 애플리케이션 변경을 요구합니다
- 변화는 재작업을 초래하므로, 변화의 비용은 재분석 요구사항(예: 요구사항 재분석)뿐만 아니라
- 새로운 기능을 구현하는 비용도 포함합니다.- rework의 Cost는 측정하기 어려운 경향이 있음(maintability가 낮을 수록 cost는 증가함)
(이 슬라이드는 소프트웨어 개발에서 변화가 일상적이며, 이에 따라 비용과 요구사항 분석을 재검토하는 등의 재작업이 필요함을 설명하고 있습니다.)
- rework의 Cost는 측정하기 어려운 경향이 있음(maintability가 낮을 수록 cost는 증가함)
Reducing the costs of rework
변화 예측(Change anticipation): 소프트웨어 프로세스가 중요한 재작업이 필요하기 전에 가능한 변화를 예측할 수 있는 활동을 포함합니다.
- 예를 들어, 시스템의 핵심 기능을 고객에게 보여주기 위한 프로토타입 시스템이 개발될 수 있습니다.
변화 수용(Change tolerance): 프로세스가 상대적으로 낮은 비용으로 변화를 수용할 수 있도록 설계됩니다.
- 이는 보통 점진적 개발의 어떤 형태를 포함합니다.
- 제안된 변화는 아직 개발되지 않은 증분(Increment)에서 구현될 수 있습니다.
- 만약 이것이 불가능하다면, 시스템의 작은 부분만이 변화를 통합하기 위해 변경될 수 있습니다.
이 슬라이드는 소프트웨어 개발 과정에서 변화에 대비하고 이를 수용하는 방법에 초점을 맞추고 있으며, 재작업이 필요할 때 발생하는 비용을 줄이는 전략에 대해 설명하고 있습니다.
Coping with changing requirements
- 시스템 프로토타이핑(System prototyping)
- 프로토타입은 고객의 요구사항과 디자인 결정의 실행 가능성을 빠르게 확인하기 위해 개발됩니다.
- 이 접근법은 변화 예측을 지원합니다.
- 증분적 배포(Incremental delivery)
- 시스템 증분은 고객에게 의견과 실험을 위해 전달됩니다.
- 이는 변화 수용을 지원합니다.
이 슬라이드는 소프트웨어 개발에서 변화를 예측하고 수용하는 두 가지 전략인 프로토타이핑과 증분적 배포에 대해 설명하고 있습니다. 프로토타이핑은 초기 단계에서 고객의 요구사항을 이해하고 디자인의 실행 가능성을 탐색하는 데 도움을 줍니다. 증분적 배포는 개발 과정에서 지속적으로 고객의 피드백을 받아 개선할 수 있게 하여, 변화에 대한 유연성을 높이고 비용을 절감할 수 있도록 합니다.
Software prototyping
프로토타입은 제품의 아이디어를 시연하고, 디자인 선택 사항들을 시도해볼 수 있는 시스템의 초기 버전이다.
프로토타입은 다음과 같이 사용될 수 있다:
- requirements engineering process에서 시스템 요구사항 도출과 검증에 도움을 준다.
- design process에서 소프트웨어에서 선택 가능한 옵션을 탐색하거나 UI 개발을 위해 사용한다
- 연속 테스트를 실행하기 위한 테스트 프로세스에서
• 두 가지 버전의 시스템이 동일한 사양으로 비교됩니다.
Benefits of Prototyping
사용자의 실제 요구사항에 가까워질 수 있다.
maintablility가 향상됨
사용성이 향상된다.
디자인 품질이 향상된다.
개발 노력이 감소한다.(프로토 타입 개발에 effort 많이 투자하면 이 의미가 없어짐)
Prototype development
- 신속한 프로토타이핑 언어 또는 도구를 기반으로 할 수 있다.
- 기능을 생략하는 것을 포함할 수 있다
- 프로토타입은 잘 이해되지 않는 제품 영역에 초점을 맞춰야 한다.
- 오류 검사 및 복구는 프로토타입에 포함되지 않을 수 있다.
- 비기능 요구사항보다 기능 요구사항에 중점을 두어야 한다.
Throw-away protytypes
프로토타입은 생산 시스템의 좋은 기반이 아니므로 개발 후 폐기해야 한다. (프로토타입을 base로 개발하지 말고 따로 개발해야 한다)
- 비기능 요구사항을 충족하도록 시스템을 조정하는 것은 불가능할 수 있다.
- 프로토타입은 일반적으로 문서화되지 않는다.
- 프로토타입 구조는 일반적으로 급격한 변경으로 인해 저하된다.
- 프로토타입은 일반적인 조직의 품질 표준을 충족하지 못할 수 있다.
Incremental delivery
- 시스템을 한 번에 제공하는 대신, 개발과 인도를 증분으로 나누고, 개발을 마친 증가분 일부를 고객에게 전달한다.
- 사용자 요구 사항에 우선 순위를 정하고 가장 높은 우선 순위 요구 사항이 초기 증분에 포함된다.
- 우선 순위에 따라 개발 후 update 한다
- 일단 증분에 대한 개발이 시작되면, 추가적으로 요구 사항을 분석할 수 있지만, 현재 증분에 대해서는 요구 사항이 동결된다.
Incremental development and delivery
- 증분 개발(Incremental development)
- 시스템을 단계적으로 개발하며, 각 단계를 평가한 후에야 다음 단계의 개발로 넘어갑니다.
- 이 방식은 애자일 방법론에서 자주 사용되며,
- 사용자나 고객의 대리인이 진행하는 평가를 통해 이루어집니다.
- 증분 배포(Incremental delivery)
- 개발된 증분을 실 사용자에게 배포하여 사용하게 합니다.
- 이를 통해 소프트웨어의 실제 사용에 대한 더 현실적인 평가가 가능해집니다.
- 증분이 기존 시스템의 기능을 덜 포함하고 있을 때, 기존 시스템을 대체하기 어려울 수 있습니다.
즉, 증분 개발과 배포는 소프트웨어를 조금씩 개발하고, 각 부분이 완성될 때마다 실제 환경에서 테스트하고 평가함으로써 전체 소프트웨어의 개발을 효과적으로 관리하고 위험을 줄이는 방법입니다.
Incremental delivery advantages
- 각 증분으로 고객 가치를 제공할 수 있어서 시스템 기능성을 더 일찍 사용할 수 있습니다.
- 초기 증분들이 후속 증분들에 대한 요구사항을 도출하는 데 도움이 되는 프로토타입 역할을 합니다.
- 전체 프로젝트 실패의 위험을 낮춥니다.
- 가장 높은 우선순위를 가진 시스템 서비스들이 대개 가장 많은 테스트를 받습니다.
- 이는 보통 더 일찍 배송되고, 이후 증분과 함께 다시 테스트되기 때문입니다.
Incremental delivery problems
- 대부분의 시스템은 시스템의 다양한 부분에서 사용되는 기본 기능들을 필요로 합니다.
- 요구사항이 증분이 구현될 때까지 상세하게 정의되지 않기 때문에,
- 모든 증분에 필요한 공통 기능을 식별하기 어려울 수 있습니다.
- 반복적인 프로세스의 본질은 소프트웨어와 함께 명세가 개발된다는 것입니다. (develop -> feedback 에 따라 명세가 change)
- 그러나 이것은 많은 조직의 구매 모델과 충돌할 수 있습니다.
- 완전한 시스템 명세는 시스템 개발 계약의 일부입니다. (보통 계약을 맺어 진행하는 방식이 다수라, incremental 개발 방식이 부적합한 경우가 있다)
Software Development and LLMS
- 대규모 언어 모델(Large Language Model, LLM)은 방대한 양의 데이터와 매개변수로 훈련된 머신러닝 모델입니다.
- 이러한 모델을 사용하여, 코드 생성 기능을 제공하는 서비스들이 개발되었습니다.
- 예를 들어, Copilot, ChatGPT, Bing, Gemini 등이 있습니다.
- 이러한 서비스들은 자연어 설명을 작동 코드로 변환할 수 있습니다.
- 이들이 기존 코드와 설명으로부터 훈련되었기 때문에, 넓은 관점에서 코드 재사용으로 간주될 수 있습니다.
- 또한, 이러한 서비스들은 요구사항 공학, 설계, 테스팅 등 다른 개발 활동을 지원하고 있습니다.
Advantages of using LLM
- 다른 소프트웨어 재사용 방법들과 달리, 대규모 언어 모델(LLMs)은 직접 사용자의 목적에 맞는 작동 코드를 생성할 수 있습니다.
- 이러한 재사용 방식은 소프트웨어 발견과 평가 시간뿐만 아니라 요구사항을 정교하게 다듬는 시간을 절약할 수 있습니다.
- 요구사항 명세와 컴포넌트 적응, 검증을 포함하는 재사용 지향적 개발이 가능합니다.
- 우리는 소프트웨어 개발에 있어서 "어떻게"보다는 "무엇을"에 집중할 수 있습니다.
- 무엇을 해야 하는지 알고 있다면, 특히 많은 표준 코드와 컴포넌트를 작성하는데 드는 시간을 크게 절약할 수 있습니다.
Issues on using LLM
- LM은 확률에 기반하여 내용(텍스트, 코드, 심지어 이미지)을 단순히 생성합니다.
- 생성된 내용이 매우 잘 작성되었을지라도, 그것이 논리적 근거를 가지고 있지는 않습니다.
- 사람과 달리 실제로 '생각'할 수 없습니다.
- 따라서, 제공된 내용이 잘못되었을 가능성을 항상 고려해야 합니다.
- 적절한 검사 없이 사용하고 싶지 않을 것입니다.
- 또한, 프롬프트에 입력하는 모든 데이터가 공개될 수 있고 철회되지 않을 수 있다는 것을 이해해야 합니다.
- 결코 특정하거나 민감한 데이터나 코드를 입력하지 마세요.
Two approaches
- 소프트웨어 개발에서 LLM을 사용하는 두 가지 주요 접근법을 고려할 수 있습니다.
- 예제에서 배우기: 요구사항을 충족시키기 위해 예제를 요청합니다. 그 예제들로부터 배우고, 필요한 구성요소들을 직접 작성합니다.
- 코드를 보고 프로그래머가 이해해서, 직접 작성하는 것
- 설명하고 검증하기: 설명에 맞는 코드를 생성하도록 요청합니다. 생성된 코드를 검증하고 직접 사용합니다.
- 생성한 코드가 원하는 기능을 하는지만 확인해서 사용한다
- 예제에서 배우기: 요구사항을 충족시키기 위해 예제를 요청합니다. 그 예제들로부터 배우고, 필요한 구성요소들을 직접 작성합니다.
Involved Software Activities
- LLM은 구현을 위해서만 사용되는 것일까요? - 아니오, 그렇지 않습니다.
- 거의 모든 소프트웨어 개발 활동에서 LLM을 활용할 수 있습니다.
- 예: 요구사항 공학, 아키텍처 설계, 코드 검사, 테스팅, 디버깅 등.
- 물론 LLM을 사용하는 것이 효과적이고 효율적인지 여부는 다른 문제입니다.
- 그러므로 LLM을 사용하여 생산성을 어떻게 높일 수 있는지 이해해야 합니다.
- 단순히 책임을 회피하기 위해 사용해서는 안 됩니다!
Summary
- 소프트웨어 프로세스 모델은 일반적으로 네 가지 소프트웨어 활동과 관련이 있습니다.
- Specification, Design and Implementation, Validation and Evolution
- 모델 간의 차이점은 활동이 프로세스 모델 내에서 어떻게 배치되는지에 기반합니다.
- 소프트웨어 변화는 불가피합니다.
- 따라서 우리는 이러한 변화에 어떻게 대처할지 알아야 합니다.
- 변화 예측, 변화 수용, 프로토타이핑, 증분 배송.
- 따라서 우리는 이러한 변화에 어떻게 대처할지 알아야 합니다.
'소프트웨어 공학 > Theorem' 카테고리의 다른 글
[소프트웨어 공학] 06&07. Architecture Design / Design and Implementation (0) | 2024.04.13 |
---|---|
[소프트웨어 공학] 05. Requirements engineering (0) | 2024.04.13 |
[소프트웨어 공학] 04. Quality Configuration and Management (0) | 2024.04.13 |
[소프트웨어 공학] 03. Agile Software Development (0) | 2024.04.13 |
[소프트웨어 공학] 01. Software Project Management (0) | 2024.04.10 |