본문 바로가기

Computer Science304

SW 공학 기초 (3) 품질 메트릭 조건 분기의 수/조건 분기의 깊이 정도/분기문으로 발생하는 실행 경로/논리연산자 개수 TDD의 원칙 테스트를 통과할 만큼만 코드를 생성함 Validation : 올바른 제품을 만들고 있는가 Verification : 올바른 방향으로 빌딩하고 있는가 명세서에 없는 기능이 포함된 것을 찾아내는 것은 Verification 명세서에 누락된 사용자 요구사항을 발견하는 것은 Validation 단계별 테스트 가장 기본적인 단위 테스트 Integration test 알파 테스트/베타 테스트 블랙박스 테스트 화이트박스 테스트 : 구조 기반 테스트 코드 커버리지 프로세스 모델 프로세스 : 왓 방법론 : 왓 + 하우 스크럼에서 Sprint의 의미 : 작은 단위의 개발 업무를 단기간 내에 전력 질주하여 개발한.. 2021. 6. 8.
SW 공학 기초 (2) 아키텍처 패턴 레이어의 재사용성 향상, 레이어 간의 명확한 분리가 어려움, 레이어의 적절한 개수나 규모를 정하는 것이 어려움. MVC pattern 이 해결책을 적용할 때 고려해야 하는 제한 사항이 있는지/해결 과정에서 발생하는 단점을 수용할 수 있는지를 고민해야 함 예제로 보는 아키텍쳐 Cloud 기반의 MSA 환경에서는 모든 것이 변화 함. 설계 우연적 응집. 논리적, 시간적, 절차적, 교환적, 순차적, 기능적 응집 모듈 간의 결합은 느슨하게, 모듈 내 구성 요소들 간의 응집은 강하게 객체 지향 설계의 원칙 디자인 패턴 많은 개발자들이 경험상 체득한 설계 지식을 검증하고 이를 추상화함 상세 설계 정확도/효율성/가독성 클린 코드 개발자에 의해서 명명이 가능한 모든 식별을 위한 이름 작성 규칙 코드리뷰/.. 2021. 6. 8.
SW 공학 기초 (1) 소프트웨어공학의 필요성 sw code lines 수 https://www.visualcapitalist.com/millions-lines-of-code/ How Many Millions of Lines of Code Does It Take? How many lines of code does it take to run a fighter jet, the Large Hadron Collider, a web browser, or Facebook? See the amounts compared in this data viz. www.visualcapitalist.com 소프트웨어 프로세스 요구사항 -> 아키텍쳐 -> 설계 -> 구현 -> 테스트 요구사항 요구사항의 역할 기능 요구 사항 비기능 요구 사항 : 시스템이.. 2021. 6. 8.
SW 품질 향상을 위한 코드 정적분석 (2) 오픈소스를 활용한 코드 규모 분석 cloc 오픈소스를 활용한 함수 라인수 및 복잡도 분석 PWD graphiz doxygen 룰 기반 정적분석 CppCheck 2021. 6. 7.
SW 품질 향상을 위한 코드 정적분석 (1) 소프트웨어 제품 품질 보증 소프트웨어 품질 : 소프트웨어가 기능, 성능 및 만족도에 있어서 명시된 요구사항 및 내재된 요구사항을 얼마나 충족하는 가를 나타내는 소프웨어 특성의 총체 Verification : 소프트웨어가 정확한 요구사항에 부합하여 구현되었음을 보장하는 활동 Validation : 소프트웨어가 고객이 의도한 요구사항에 따라 구현되었음을 보장하는 활동 정적인 방법 : 동료검토 (인스펙션, 워크스루, 데스크체크) / 도구를 이용한 정적 분석 (룰 기반) 규모 관련 지표 라인 수 : 보통 공백을 제외한 라인 수 의미 주석 비율 : 특정 도메인에서 주로 측정 함수 라인 수 : 길면 소스코드 이해의 어려움 복잡도와 테스트 커버리지 지표 순환 복잡도가 높으면 코드 이해가 어려움 자동차 분야 기능 안전.. 2021. 6. 7.
연산자 오버로딩 #include using namespace std; class NUMBOX { private: int num1, num2; public: NUMBOX(int num1, int num2) : num1(num1), num2(num2) { } void ShowNuber() { cout 2021. 5. 29.
Jenkins를 활용한 SW 통합 및 배포 관리 개념 (2) CPP 빌드를 위한 Item 생성1 소스코드 관리 빌드를 이해 소스코드 저장소에서 소스코드를 가져오는 설정. Git의 경우 Granch 지정이 중요함. 빌드를 언제 수행할 것인지 지정. Build periodically와 Poll SCM의 일정 지정은 cron 표기법을 사용함. CppCheck - 정적분석 도구 연동1 안좋은 방식이라 알려진 코드의 발견. 컴파일 에러는 아니지만, 나중에 문제를 발생시킬 수 있는 코드 탐지. 룰 코드 정적 분석. 예를 들어 Connection 열었으면 명시적으로 닫았는지, int i 의미없는 변수 이름을 생성하여 사용하고 있는지. 매개변수를 많이 사용하였는지. case 마다 break; 문을 잘 사용했는지, final에서 return 금지했는지, 빈 if 문장은 피했는지 .. 2021. 5. 22.
Jenkins를 활용한 SW 통합 및 배포 관리 개념 (1) 지속 통합 도구 - Jenkins 웹 기반 오픈소스 CI 도구 점유율 약 70% 버전관리 도구에서 최신 리비전을 체크아웃 받아, 주어진 명령대로 빌드하여, 결과를 게시/전달함 Jenkins 운영을 위한 서버 준비 Azure로 window10을 원격접속으로 접속함 자바 설치, Tomcat 8, git, visual studio 2019용 Build Tools 환경 변수 path에 추가함 Jenkins 설치 port 8080 -> 8081 FIrwall Exception : jenkins JENKINS_HOME value 를 변경함 Service : Jenkins -> restart localhost:8081 으로 웹접속 가능함 was상에 jenkins war파일을 실행하는 방식 WAR 사용 1. jenki.. 2021. 5. 22.
Clean Code를 위한 Code Refactoring "Code Refactoring의 개념" - 티끌 모아 태산 - 특별한 활동이 아님 - 단위테스트까지 ㄱㄱ "Code Bad Smell" - 중복 코드 - 긴 메소드 - 큰 클래스 - 파라미터가 너무 많음 - Divergent change 관련 없어 보이는 메소드 같이 수정됨 => Extract Class - Shotgun Surgery : 단일 기능 변경 요구사항에 대해 다수의 클래스를 수정 해야 함 => extract method - Refused Bequest : 상속 받은 부모 클래스의 기능을 사용하지 않음 - Primitive Obsession : 클래스를 활용하지 않고, 원시 데이터 타입만 고집하여 사용 - Message Chains : 긴 메소드 연쇄 호출이 있음 "Code Refactori.. 2021. 5. 14.