Professional Engineer/SE11 Metamorphic Testing(메타몰픽 테스트) 메타몰픽 테스트(Metamorphic Testing, MT)1. 정의메타몰픽 테스트(MT)는 정확한 기대 출력값(테스트 오라클)이 존재하지 않거나 알기 어려운 소프트웨어의 테스트에 활용되는 기법으로, 입력과 출력 간에 유지되어야 할 **메타몰픽 관계(Metamorphic Relation, MR)**를 정의하고, 이 관계가 성립하는지 검증하여 오류를 발견하는 소프트웨어 테스트 방법이다.이 기법은 과학 계산, 최적화, 머신러닝, 기상 시뮬레이션 등 복잡한 프로그램에서 특히 유용하며, 출력 값 자체가 아닌 입력 간의 관계를 테스트 기준으로 삼는다는 특징이 있다.2. 등장 배경일부 소프트웨어는 일반적인 테스트 방법에서 요구하는 **테스트 오라클(Test Oracle)**을 설계하기 어렵다. 예를 들어, 기상.. 2025. 2. 11. 개발자라면 반드시 알아야 할 안티패턴(anti-pattern) 완벽 정리! 개발자라면 반드시 알아야 할 안티패턴(anti-pattern) 완벽 정리!소프트웨어 개발 과정에서 피해야 할 "실패의 패턴"을 알고 있나요? 안티패턴(anti-pattern)은 흔히들 간과하지만, 결국 개발 생산성과 코드 품질을 떨어뜨리는 치명적인 문제로 발전할 수 있습니다. 이번 포스팅에서는 개발, 설계, 아키텍처에서의 주요 안티패턴과 이를 방지하기 위한 팁을 소개합니다. 1. 개발 안티패턴 (Development Anti-patterns)1️⃣ Spaghetti Code (스파게티 코드)정의: 구조 없이 복잡하게 얽힌 코드로 인해 유지보수가 어렵고 디버깅이 악몽이 되는 코드.문제점: 가독성 저하, 유지보수 비용 증가, 새로운 요구사항 반영의 어려움.예방 방법: 코드를 모듈화하고, 명확한 코딩 규칙 및.. 2024. 12. 20. RAD(Rapid Application Development) 정의- 2~3개월 동안의 짧은 개발 주기 동안 개발 툴을 적극적으로 사용하여 소프트웨어를 개발하는 프로세스 모형 키워드- JRP, JAD, Construction Phase, Cutover, Time-Boxing 메커니즘 기술요소구성요소설명JRP (요구분석정의)- Joint Requirement Planning- 분석단계로 사용자와 함께 요구사항을 분석하고 계획을 세우는 단계JAD (사용자설계)- Joint Application Design- 설계단계로 사용자와 함께 개략적 모델링 이후 설계를 진행- 빠른 구현을 위한 CASE Tool 활용Construction Phase- SDLC의 개발 Task와 유사Cut Over- 대상 시스템의 설계와 개발을 완료하고 테스트한 후 운영에 필요한 매뉴얼 2024. 9. 24. 반복적 개발(증분형/진화형 개발모델) 정의- 사용자의 요구사항 일부분 혹은 제품의 일부분을 반복적으로 개발하여 고품질의 최종 시스템으로 완성해 가는 모델 키워드- 점증적 반복, 증분형 (요구사항 명확, 병행), 진화형 (요구 불명확, N단계 진화) 메커니즘증분형 개발모델[정의]사용자 요구사항 또는 제품의 일부분을 반복적으로 개발하면서 대상범위를 확대해 최종제품을 완성하는 방법[특징]1. 병렬 개발 수행 가능2. 고객요구사항 반영 진화형 개발모델[정의]시스템이 가지는 여러 구성요소의 핵심 부분을 개발한 후 각 구성 요소를 지속적으로 발전시켜 나가는 방법 [특징]1. 프로토타입2. 고객요구사항 정의가 어려운 경우 항목증분형 모형진화적 모형정의폭포수 모형에 반복적 수행 개념을 결합, 증분을 반복하여 최종 시스템을 구현하는 개발 모형핵심 요구사항을.. 2024. 9. 24. Spiral 모델 정의- 시스템 개발 중 생기는 위험을 최소화하기 위해 나선을 돌면서 점진적으로 개발하는 모델 키워드- 계획 및 정의, 위험분석, 개발, 고객의 평가, 위험 최소화 메커니즘① 계획 및 정의 → ② 위험분석 → ③ 개발 → ④ 고객 평가 단계를 반복하여 점진적으로 개발기술요소계획 및 정의 단계(Planning and Definition) - 초기 요구분석 및 프로젝트 계획 수립 - 프로젝트 위험 식별 및 상세 관리 계획 수립 - 프로세스 각 단계에 대한 목표수립 - 프로젝트 단계별 계획서 - Risk Check List 위험분석 단계(Risk Analysis) - 위험 분석·평가하여 감소시키는 활동 - 식별된 위험의 종류에 따라 상세 분류 수행 - 위험 분석서 - 상세 분석서 개발 단계(Engineering.. 2024. 9. 24. 프로토타입 모델 정의- 사용자의 요구사항을 충분히 분석할 목적으로 짧은 시간 내에 시제품을 개발하여 평가한 후 구현하는 점진적 개발 모델 키워드- 프로토타입(시제품), 의사소통, 실험적 프로토타입, 진화적 프로토타입 메커니즘 기술요소계획수립 - 시스템 개발 계획 수립하고, 시스템의 전체적인 수립 - 시스템정의서 - 프로젝트 계획서 요구분석과 정의 - 고객의 요구사항을 정리하고 명세화 하는 단계로 명세화 방법으로 프로토타입을 사용 - 요구분석서 - 요구사항정의서 - 프로토타입 식별 Prototype(개발/개선) - 핵심기능을 가지고 구현 프로토타입의 대상선정하고 방향 및 내용을 명세화 한 설계서로 프로토타입을 구축 - 프로토타입 설계서 Prototype(검토/평가) - 개발된 프로토타입에 대한 고객의 평가를 실시하여, .. 2024. 9. 24. 폭포수 모델(애자일 비교) 정의- 분석, 설계, 개발, 구현, 시험 및 유지보수 과정을 단계별로 구분하여 순차적으로 접근하는 방법 키워드- 순차적, 산출물중심, 단계적 테스팅, 정식변경절차 수행(Frozen Delivery), 고전적 모델 메커니즘 기술요소장점 관리 용이 - 간결하고 이해하기 쉬움 체계적 문서화 - 단계별 정형화된 접근법으로 체계적 문서화 가능 변화가 적은 프로젝트 - 요구사항 변화가 적은 프로젝트에 적합 - 비교적 소규모 프로젝트 개발에 유리 단점 단계적 진행 - 앞 단계가 끝날 때까지 대기, 개발완료전에 사용자가 원하는 것을 정확 히 알 수 없음 오류/변경에 취약 - 단계 결과물이 완벽하지 않으면 다음 단계에 오류가 전파, 요구사항 변경시 전체일정에 부담 폭포수 모델과 애자일 모델의 비교핵심요소 - Pha.. 2024. 9. 24. 좋은 소프트웨어의 조건 정의- 좋은 소프트웨어는 ‘사용자의 요구사항을 만족’하고 ‘정확하게 동작’하며 ‘쉬운 사용방법’과 ‘좋은 코드’로 개발된 소프트웨어 메커니즘 기술요소정확성(Correctness) - 기능적으로 맞게 동작하는가, 표준에 적합한가? - 요구 분석서의 기능과 일치하는지 점검 신뢰성(Reliability) - 소프트웨어가 주어진 기간 동안 바르게 작동할 확률 - 오류 발생 확률에 반비례 - 정확성 제공하기 위한 필요조건 강인성(Robustness) - 요구 명세에 표시하지 않은 상황(오류 입력)에서도 제대로 작동하는 성질 성능(Performance) - 수행 속도, 데이터/트랜잭션 처리량 - 알고리즘의 시간 복잡도 - 시뮬레이션, 스트레스 테스트 사용 용이성(Usability) - 시스템을 친근하게 느.. 2024. 9. 24. 소프트웨어 공학 정의 및 발전 원리 정의- 소프트웨어의 개발, 운용, 유지보수 등의 생명 주기 전반을 소프트웨어 원리, 지식, 도구 등을 적용하여, 체계적이고 서술적이며 정량적으로 다루는 학문으로, 소프트웨어 제품 개발에 공학적 기법을 적용한 공학 키워드- 소프트웨어 공학 지식 체계(SWEBOK)(Software Engineering Body of Knowledge), 소프트웨어 원리, 지식, 도구 메커니즘 기술요소비가시성(Invisibility) - 소프트웨어의 생산물 구조가 외부에 노출되지 않고 코드에 내재되어 있음 복잡성(Complexity) - 정형적 구조가 없어 개발과정이 복잡하고 전산화 대상 업무, 소프트웨어 시스템 자체가 난해함.- 비규칙적, 비정규적 변경성(Changeability) - 필요에 따라 항상 수정이 가능(진화.. 2024. 9. 24. 정보 은닉(Information Hiding) 내부 구현정보, 데이터 보호위해 은닉개체의 공용 인터페이스로만 접근가능한 특징1. 클래스 정의: - 관련 데이터와 메서드를 그룹화하여 클래스를 생성합니다. - 추상화: 복잡한 시스템에서 핵심적인 개념이나 기능을 추출합니다. 2. 접근 제어자 사용: - private, protected, public 등의 접근 제어자로 멤버의 가시성을 제한합니다. 3. 캡슐화 적용: - 데이터(속성)를 private으로 선언합니다. - public 메서드(getter/setter)를 통해 데이터에 접근합니다. - 데이터와 그 데이터를 처리하는 메서드를 하나의 단위로 묶습니다. 4. 추상 클래스 및 메서드 정의: - 추상화를 구현하기 위해 추상 클래스와 추상 메서드를 사용합니다. .. 2024. 8. 2. 이전 1 2 다음