개발
-
소프트웨어 개발자에게 어떤게 요구사항일까개발/생각 2024. 2. 18. 12:57
소프트웨어 개발 중 만나는 여러 문제가 있다. 그 중 하나인 요구 사항을 제시하는 사람과 요구를 분석하는 사람, 두 사람도 모르는 문제. 미지의 영역에 대한 부분에 집중해본다. 개요 개발을 요청하는 사람이 정말 완벽한 체계를 설계 해온다면 개발자는 작업만 하면 된다. 하지만 대부분의 경우 요구 사항을 토대로 실제 요구를 채굴해내어야 한다. 요구 사항은 요구하는 기능 깊숙한 곳에 숨어있다. 그러면 어떡해야하죠..? 요구사항이 들어오면, 그 요구사항의 의도를 파악하고, 확장 가능한 설계로 나누고, 그 설계의 세부 동작을 설정 가능하도록 분석해내어 요구사항을 채굴해낼 수 있다. 요구사항 예시 다섯가지를 확인해보려 한다. 요구사항 기능의 응답시간은 500ms 이하여야 한다. 대화 상자의 배경은 회색이다. 애플리..
-
방어적 프로그래밍 - 널 객체 패턴 사용해보기개발/디자인패턴 2023. 9. 18. 10:10
여러 언어에서 NULL(혹은 nil) 은 어떤 키에 값이 존재하지 않는다는 뜻으로 사용한다. 이 비어있는 키에 NULL 검사 외의 다른 방법으로 접근하려고 하면, 대부분 Null Pointer Exception 을 던진다. NULL 을 포함한 객체를 생성하고 전달하면 항상 NULL을 참조하는 예외가 발생할 수 있다. 조심하면 된다. 쓰기전에 검사하면 된다 라고 할 수 있지만 설계에 조금만 신경쓰면 예방할 수 있는 방법이 있으니 이 방법을 활용해보자. 언어는 타입스크립트로 작성했다. export class Inventory { ... getItemQuantity(itemNumber: number) { return this.getItem(itemNumber).getAmount(); } ... protecte..
-
error: expected initializer before ‘namespace’ 해결일기개발/C, C++ 2022. 8. 12. 13:45
꽤 작성하던 코드가 갑자기 빌드가 안된다. In file included from include/log.h:3:0, from src/main.cpp:13: /usr/include/c++/4.8.2/sstream:41:1: error: expected initializer before ‘namespace’ namespace std _GLIBCXX_VISIBILITY(default) 대체 무슨 문제인가 하고 찾다가 함수나 구조체 등 무언가 선언이 완료되지 않으면 주로 발생하다는 글을 보고 찾아보았다. 내 코드의 경우 main.cpp의 13번째 줄까지는 전부 include 선언이다. 13번 째 줄도 log.h를 include하는 내용이다. 그렇다는 것은, 13번째 이전 줄의 헤더 파일 어딘가에 선언이 완료되지..
-
C++에 google test를 테스트 프로젝트에 적용해보기개발/C, C++ 2022. 8. 11. 12:03
테스트 구조는 알았고, 사내에 테스트를 적용을 마쳤다. 이해한 내용을 정리해서 테스트 프로젝트를 하나 작성하고, 이 아이를 "단위 테스트가 없던 프로젝트" 에서 "단위 테스트가 포함된 프로젝트" 로 바꾸는 과정을 살펴보자 CentOS 7 google-test 단위 테스트가 없는 상태의 프로젝트와 단위 테스트를 포함한 프로젝트를 각각 첨부한다. 코드는 직접 내려받아서 make 하고 make test 를 통해 테스트 바이너리까지 빌드할 수 있도록 만들어두었다 github에서 확인하기 https://github.com/BearMett/UnitTestTester GitHub - BearMett/UnitTestTester: 프로젝트의 테스트 코드 적용기 프로젝트의 테스트 코드 적용기. Contribute to B..
-
shebang 작성하기개발/환경 2022. 6. 17. 16:44
스크립트를 작성할 때 버릇처럼 적는 한줄이 있다. #!/bin/bash #!/bin/expect #!/bin/python3 이 구문은 shebang 이라는 구문인데, 간단하게는 실행할 때 어떤 스크립트인지 명시하는 부분이라고 생각해도 된다. (영문, 국문 위키백과) 이 글에서는 shebang 을 작성할 때 고려할만한 내용을 작성한다. 대부분의 경우 bash script나 expect script를 작성할땐 이 shebang을 어떻게 표기할지 고려할 필요가 없다. bash는 대부분의 환경이 /bin/bash에 있을것이며 expect는 설치가 보장되어있지 않다면 패키지를 같이 보내서 설치하라고 하면 그만이니 이 문제를 고민하게 된 원인은 python 덕분이었다. python3.7버전의 소스를 내려받아 특정 ..
-
svn에서 __pycache__ 와 .pyc ignore하기개발/환경 2022. 6. 17. 09:56
현재 경로의 svn에 ignore 추가하기 svn propset -R svn:ignore *.pyc . svn propset -R svn:ignore __pycache__ . -R은 Recursive . 은 현재 경로를 뜻한다 이 글이 필요한 사람 중, 이미 svn에 commit 한 사람도 있을것이다. 해결법이 필요하다. pycache와 pyc 파일을 찾아 삭제하고 에서 rm 하기 find . -name "*.pyc" | xargs svn rm #--force find 로 찾은 .pyc 파일을 svn rm 의 인자로 넘겨주면 된다. 필요한 경우 #--force 의 주석을 풀고 강제 적용 가능 find . -name __pycache__ -type d | xargs svn rm #--force 디렉토리도 ..
-
객체 지향이 추구하는것을 이해하고 클래스를 설계하기 위한 지식, 디자인 패턴개발/생각 2022. 5. 16. 17:33
책은 생각 정리에 큰 도움이 된다. 내가 객체지향을 아는데 몰랐던 이유를 이제 조금 알게 되었다. 객체 지향 언어 (Object-oriented programming, OOP) 객체 지향에 대한 이야기는 개발을 공부할 때, 어떤 경로로든 알게 된다. 심지어 대학교에서도 가르쳐주는 개념이다. 하지만 그 깊이와 그 중요성을 알려주는 곳이 적을 뿐더러, 이해의 필요성을 호소하는 사람은 더더욱 없었다. 하물며 지금의 내가 공부할 때 당시의 나에게 가르쳐주려고 시도했다 한들 그 필요성을 제대로 깨달을 수 있었을까? 클래스, 객체(인스턴스), 메서드(메소드), 메시지 객체 지향의 구성 요소의 사전적인 의미는 누구나 배운다. 이게 무엇이냐 물었을 때 그럴싸한 대답을 할 수 있다. 속성과 행위, 그리고 그 연관 관계들..
-
google test 로 C++ 단위 테스트 진행기개발/C, C++ 2022. 5. 8. 15:26
테스트 코드를 도입해야겠다고 생각하고, 순전히 하루정도 정말 테스트 코드에 대한 고민을 할 기회가 생겼다. 리눅스 환경에서 C++ 의 테스트 코드를 작성할 때, 어떤 개념으로 이 테스트 코드가 동작하는지 내가 이해한 바를 적어두려고 한다. 환경은 CentOS 7에 c++ 11 테스트는 google test 를 사용하기로 했다. 테스트 프로젝트로 단위 테스트가 없는 프로젝트에 단위 테스트를 넣는 과정은 이 글을 참고하면 된다. 예제 프로젝트에 테스트 코드를 추가하는 과정과 동작을 직접 확인할 수 있다. https://bearnet.tistory.com/22 myclass.o dbconn.cpp -(컴파일)--> dbconn.o main.cpp -(컴파일)--> main.o myclass.o dbconn.o..