728x90

Software Engineering 13

소프트웨어 모듈 결합도와 응집도

결합도와 응집도는 소프트웨어 설계의 핵심 원칙으로, 소프트웨어의 품질, 유지 보수성, 확장성 및 재사용성에 중요한 영향을 미칩니다. 이 두 가지 요소가 올바르게 관리되면 소프트웨어 시스템은 더 효율적이고 신뢰성 있게 작동할 수 있습니다. 결합도의 영향: 낮은 결합도: 낮은 결합도를 가진 모듈은 다른 모듈과의 상호 의존성이 낮기 때문에 독립적으로 개발, 테스트 및 유지 보수할 수 있습니다. 이는 소프트웨어 시스템을 변경하기 쉽게 만들어 새로운 요구 사항을 쉽게 수용할 수 있게 합니다. 높은 결합도: 높은 결합도는 모듈 간의 강한 의존성을 나타내며, 하나의 모듈을 변경할 때 다른 모듈에도 영향을 미칩니다. 이로 인해 버그를 수정하거나 새로운 기능을 추가하는 것이 어렵고 위험해집니다. 응집도의 영향: 높은 응..

소프트웨어 공학(Software Engineering)

소프트웨어 공학은 소프트웨어의 개발, 운영, 유지 관리에 관한 체계적인 접근방법을 연구하는 학문입니다. 이는 공학의 원칙을 소프트웨어의 생명주기 전반에 적용하는 것을 포함하며, 필요한 소프트웨어를 구축하는 데 필요한 표준화된 방법을 제공합니다. 소프트웨어 공학은 아래와 같은 주요 분야를 포함합니다: 요구사항 분석: 소프트웨어가 해결해야 하는 문제와 요구사항을 명확히 이해하는 것입니다. 설계: 소프트웨어의 구조와 동작을 계획하고 설계하는 것입니다. 구현: 설계된 소프트웨어를 실제로 코딩하여 개발하는 것입니다. 테스팅: 소프트웨어가 올바르게 작동하고 요구사항을 충족하는지 확인하는 것입니다. 유지 관리: 개발된 소프트웨어를 지속적으로 업데이트하고 개선하는 것입니다. 프로젝트 관리: 프로젝트의 일정, 비용, 품..

AOP(Aspect Oriented Programming)

AOP(Aspect Oriented Programming)은 컴퓨터 프로그래밍의 한 패러다임으로, 광범위한 모듈(Aspect)을 캡슐화하고 프로그램의 다른 부분으로부터 분리하는 데 사용됩니다. 이는 프로그램이 직면하는 관심사의 분리(Separation of Concerns)를 실현하며, 코드의 모듈성을 증가시킵니다. "Aspect"는 여러 클래스나 함수를 거치는 공통 기능 또는 관심사를 나타냅니다. 로깅, 트랜잭션 관리, 보안 등이 그 예시로, 이들은 시스템의 여러 부분에서 반복적으로 등장하는데, 이러한 코드의 중복을 줄이고, 각 부분의 책임을 명확하게 하기 위해 AOP가 사용됩니다. AOP는 다음과 같은 주요 개념을 포함합니다: Aspect: 프로그램의 여러 부분에서 걸쳐 공통으로 사용되는 기능을 캡슐..

RUP(Rational Unified Process)

RUP(Rational Unified Process)는 반복적이고 진행형(incremental)인 소프트웨어 개발 프로세스로, 요구 사항, 분석, 설계, 구현, 테스트 및 배포와 같은 전체 소프트웨어 개발 생명주기를 관리합니다. IBM에서 개발한 RUP은 객체 지향적인 접근 방식을 사용하며, UML(Unified Modeling Language)을 모델링 언어로 사용합니다. 특징: 1. 반복적이고 진행형 프로세스: RUP은 프로젝트를 여러 반복(iteration)으로 나누어 수행하며, 각 반복에서는 개발 과정 전체를 작은 단위로 수행합니다. 이로 인해 프로젝트 초기에 발견되지 않은 문제나 요구 사항 변경에 더 쉽게 대응할 수 있습니다. 2. 위험 중심 접근: RUP은 프로젝트의 초기 단계에서 가장 중요한..

UML(Unified Modeling Language)

Unified Modeling Language (UML)은 소프트웨어 공학에서 시스템의 구조와 동작을 시각적으로 표현하기 위한 표준화된 모델링 언어입니다. UML은 시스템의 다양한 측면을 나타내기 위해 다양한 다이어그램 유형을 제공하며, 이를 통해 소프트웨어 개발자들이 소프트웨어 설계, 분석 및 문서화에 도움을 받습니다. UML은 1997년 Object Management Group (OMG)에 의해 표준화되었습니다. 역사 UML은 1990년대 중반부터 발전하였습니다. 다양한 시스템 모델링 언어와 방법론들이 사용되었지만, 통합된 표준이 없어 효율성과 상호 운용성의 문제가 있었습니다. 이러한 배경에서, 그래디 부치(Grady Booch), 제임스 럼바(James Rumbaugh), 이바코브 제이콥슨(Iva..

Daily Scrum과 Standup Meeting: Agile에서의 차이점, 유사점

Daily Scrum과 Standup Meeting은 애자일 개발 프로세스에서 자주 사용되는 두 가지 미팅 방식입니다. 이 두 방식의 차이점, 유사점, 비교, 규칙, 의제, 그리고 질문들에 대해 알아봅니다. - Daily Scrum: Scrum 프레임워크에서 사용되는 이 미팅은 매일 진행되며, 팀원들이 프로젝트의 현재 상황, 진행 중인 작업, 그리고 잠재적인 문제를 빠르게 공유합니다. 이 미팅은 일반적으로 15분 이내로 진행되어야 하며, Scrum Master가 주도합니다. - Standup Meeting: 애자일 개발 프로세스에서 사용되는 이 미팅은 팀원들이 서서 진행하여 빠르게 상태를 공유하고, 미팅 시간을 짧게 유지합니다. 이 미팅은 일반적으로 매일 아침에 진행되며, 각 팀원은 진행 중인 작업, 완..

나선형(Spiral) 모델 개발 방법론

나선형(Spiral) 모델은 소프트웨어 개발 방법론 중 하나로, 반복적이고 점진적인 개발 프로세스를 사용하여 소프트웨어를 개발합니다. 1980년대에 Barry Boehm이 제안한 이 방법론은 위험 관리와 요구사항 변경에 대한 유연성을 강조하며, 소프트웨어 개발 과정에서 발생할 수 있는 문제와 리스크를 줄이는 데 초점을 맞춥니다. 나선형 모델의 핵심 구성 요소는 다음과 같습니다: 1. 계획(Planning): 프로젝트의 목표를 설정하고, 요구사항을 정의하며, 일정과 예산을 계획하는 단계입니다. 2. 위험 분석(Risk Analysis): 프로젝트에서 발생할 수 있는 위험을 파악하고, 이를 분석하여 가능한 해결책을 찾고 대응 방안을 계획하는 단계입니다. 3. 엔지니어링(Engineering): 실제 소프트웨..

스크럼(Scrum)

Scrum은 Agile 소프트웨어 개발 방법론 중 하나로, 반복적이고 증분적인 개발 프로세스를 통해 소프트웨어 프로젝트를 관리하고 개발하는데 초점을 맞춥니다. Scrum은 빠르게 변화하는 요구사항에 대응할 수 있는 유연성과 효율성을 제공하며, 프로젝트의 전체적인 관리를 개선합니다. Scrum 개발 방법론의 핵심 요소와 원칙은 다음과 같습니다: 스프린트 (Sprint): 스프린트는 일정 기간 (일반적으로 2-4주) 동안 진행되는 개발 사이클입니다. 각 스프린트는 프로젝트의 일부 기능을 개발하고 완성하는 것을 목표로 합니다. 제품 백로그 (Product Backlog): 제품 백로그는 프로젝트의 모든 요구사항과 기능을 우선순위별로 정리한 목록입니다. 제품 소유자 (Product Owner)가 이를 관리하며,..

사용자 스토리(user stories)

User Stories Applied는 Mike Cohn이 저술한 책으로, Agile 소프트웨어 개발 프로세스에서 사용자 스토리(user stories)를 효과적으로 작성하고 관리하는 방법에 대해 다룹니다. 사용자 스토리는 요구사항을 기술하는 간결한 방식으로, 프로젝트의 목표와 기능을 사용자의 관점에서 이해하기 쉽게 표현합니다. 사용자 스토리는 일반적으로 다음과 같은 형식을 따릅니다: As a , I want so that . 예를 들어, "As a customer, I want to reset my password so that I can access my account if I forget my current password." User Stories Applied에서는 사용자 스토리를 효과적으로 작..

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

Lean 소프트웨어 개발(Lean Software Development)은 소프트웨어 개발 프로세스를 효율적이고 가치 있는 방식으로 개선하기 위한 방법론입니다. 이 방법론은 도요타 생산 시스템에서 영감을 받아, 기존의 Lean 생산 철학을 소프트웨어 개발에 적용한 것입니다. Lean 소프트웨어 개발의 핵심 원칙은 다음과 같습니다. 제거할 가치가 없는 것에 대한 명확한 인식 (Eliminate waste): Lean 개발에서는 프로세스에서 불필요한 요소를 제거하여 효율성을 높이는 것을 목표로 합니다. 예를 들어, 불필요한 문서화, 남용되는 기능, 미리 작업하는 것 등을 최소화합니다. 직접 가치 창조를 위한 작업 강조 (Amplify learning): 개발팀은 지속적인 학습과 개선에 중점을 두어야 합니다...

MDA(Model Driven Architecture)

모델 주도 아키텍처(Model Driven Architecture, MDA)는 모델이 중심이 되는 소프트웨어 설계 방법론으로, OMG(Object Management Group)에 의해 개발되었습니다. MDA의 주요 목표는 비즈니스 로직을 이해하고 표현하는 것에 집중하며, 특정 기술에 의존하지 않는 포괄적인 모델을 생성하는 것입니다. MDA의 접근 방식은 다음 세 가지 단계로 구분됩니다. CIM (Computation Independent Model): 이 단계에서는 비즈니스 로직과 요구 사항을 모델링합니다. 기술적인 세부사항을 고려하지 않고, 시스템이 어떤 일을 수행해야 하는지에 초점을 맞춥니다. PIM (Platform Independent Model): 이 단계에서는 시스템의 기능을 모델링하되, 특..

소프트웨어 유지보수

"소프트웨어 유지보수"는 이미 개발되고 배포된 소프트웨어의 성능을 개선하거나, 오류를 수정하거나, 기능을 업데이트하거나, 소프트웨어가 최신 환경에서 잘 작동하도록 하는 등의 작업을 포함합니다. 이는 소프트월의 수명 주기에 중요한 단계로, 개발된 소프트웨어가 지속적으로 사용 가능하고 효과적으로 작동하도록 보장합니다. 소프트웨어 유지보수의 필요성 기술 변화 대응: 기술 환경은 계속 변화하고 발전하며, 소프트웨어는 이러한 변화에 적응해야 합니다. 운영체제, 하드웨어, 보안 요구사항 등이 업데이트되거나 변경될 때마다 소프트웨어는 이러한 변화에 맞추어 업데이트되거나 수정되어야 합니다. 사용자 요구사항 충족: 사용자의 요구사항은 시간이 지나면서 변할 수 있습니다. 새로운 기능이 필요하거나 기존 기능을 개선하거나 최..

Code Craft 요약 – 좋은 프로그래머 나쁜 프로그래머

1. 방어하기 좋은 프로그래머 - 자기 코드가 튼튼한지 신경을 씁니다. - 모든 추측을 방어적 코드안에 명시적으로 캡처해서 표현합니다. - 가비지가 입력되었을 때에도 잘 정의된 동작이 실행되기를 원합니다. - 코드를 작성하면서 그 코드에 대해 신중히 생각합니다. - 다른 사람의 어리석음으로부터 코드가 자신을 보호하도록 작성합니다. 나쁜 프로그래머 - 자기 코드 안에서 잘못된 일이 발생할 수도 있다는 사실을 생각하고 싶어 하지 않습니다. - 고장을 일으킬 수도 있는 코드를 통합하라고 내주고, 다른 사람이 대신 정리해 주기를 바랍니다. - 코드의 사용법에 대한 중요한 정보를 자기 머리 속에만 넣어둠으로써, 쉽게 잊어버릴 수 있게 합니다. - 거의 생각을 하지 않고 코드를 작성하기 때문에, 결국 예측할 수 없..

728x90