Software Engineering 6

Agile (애자일) 개발방법론

애자일(Agile) 폭포수(Waterfall)와 같은 전통적인 계획 중심 방법론은 초기 계획을 적용하기엔 진행과정에서 변수가 너무 많다. 이러한 규정된 프로세스가 효과를 발휘하려면 입력 값(요구사항)이 명확해야 하는데, 요구사항이 다양하고 복잡하기에 현실적으로 무리가 있다. 이를 보완하기 위해 나선형 모델같은 프로세스가 등장하였고, 변화를 수용하고 주기적인 점검을 하지만 모델이 복잡하고 비용이 많이 들며 프로젝트 관리가 힘든 단점이 존재했다. 1990년대부터는 가볍고 실용적인 프로세스 방법론이 등장하였고, 2000년대부터 Agile 방법론으로 통합되었다. Agile 방법론은 소프트웨어 개발 방법에 있어서 아무런 계획이 없는 개발 방법과 계획이 지나치게 많은 개발 방법들 사이에서 타협점을 찾고자 하는 방법..

Code Review (코드 리뷰)

코드리뷰(Code Review) Code Review is systematic examination (often known as peer review) of computer source code without running code 목적 오류 가능성을 찾아서 해결 SW품질과 개발자 스킬 향상 장점 개발 초기의 실수를 발견하고 수정가능 (결함 잠재 발견율이 테스팅보다 두배 큼) 전체적인 품질 향상 상호 신뢰, 동기부여, 전문성 확보 팀의 경험과 지식 공유 개발자의 스킬 향상 개선된 디자인 발견 가독성 높은 코드 단점 시간/리소스 소요 사전작업 코드품질의 중요성 인식 체계적인 요구사항, 설계활동 전개 코딩스타일 준수 사후작업 자동화 테스트 전개를 통한 코드리뷰 보완 리뷰 내용을 바탕으로 테스트 보강 저자를 ..

DevOps (데브옵스)

DevOps에 대해 알아보자. 최근 DevOps라는 용어가 많이 언급되고 있고, 내가 하고 있는 업무도 굳이 분류하자면 DevOps에 가까운 것 같아서 정리해본다. 용어는 개발의 Dev와 운영의 Ops가 합쳐져서 파생된 용어이다. 개발(Dev)은 고객에게 변경내역을 빠르게 적용하기를 원하고, 운영(Ops)는 안정적인 서비스를 위해 이를 꺼려한다. 따라서 개발과 운영의 중간에서 이를 극복하기 위해 등장한것이 DevOps이다. 소통, 융합을 강조한 SW개발방법론이며, 빠르고 효율적으로 배포하는 것을 목적으로 한다. 아래는 DevOps를 검색하면 많이 볼 수 있는 그림들 클라우드 환경이 등장하면서 이 역할은 더 중요해졌다. DevOps 엔지니어로 성장하기 위해서는 애자일, 형상관리, CI/CD, 자동화, 테스..

정적분석 툴 선별시 고려할 사항

정적분석 툴 선별시 고려사항 False Positive : 실제로 오류가 존재하지 않지만 오류라고 보고하는 경우 True Negative : 실제 오류가 존재하지 않고 보고도 안하는 경우 False Negative : 실제로 오류가 존재하지만 오류가 없다고 보고하는 경우 True Positive : 실제 오류가 존재해서 보고하는 경우 p'(Predicted) n'(Predicted) p(Actual) True Positive False Negative n(Actual) False Positive True Negative 대부분의 정적분석 도구는 False positive와 True negative를 모두 가지고 있음 좋은 정적분석 도구는 오탐(false positive) 과 미탐(false negativ..

SW 개발환경 (dev, staging, production)

SW 개발환경 웹 개발을 진행하면서 서비스 품질을 위해 배포 환경이 중요하다는 것을 깨닫게 되었다. 각 환경을 분리해서 개발과 테스트를 진행해야 효율적이고 빠르게 릴리즈가 가능하고 팀원간 혼선도 줄어들게 된다. 분류를 어떻게 나누냐는 각 팀마다 다르겠지만 일반적으로는 아래와 같이 4단계로 나뉜다. 더 복잡하게는 Integration과 Testing(QC) 등으로도 분류할 수 있는 것 같다. Environment Description Local 각 개발자가 작업하는 개발환경 Development 각 개발자들의 커밋을 합쳐서 테스트해볼 수 있는 환경 Staging Production 서버와 동일한 환경을 만들어서 비기능적인 부분에 집중하는 환경 Production 실제 고객에게 서비스되는 환경 기존에 회사에..