분류 전체보기
-
컴포넌트 사양 - 구조설계서 작성(4/4)사이드 프로젝트/이기적인 총무 2018. 3. 24. 12:33
시스템구조에서 소프트웨어의 전반 구조를 추상적으로 정리 했다면 컴포넌트 사양에서는 전반 구조를 구체적으로 채우는 작업을 하게 된다. 앞선 작업에서는 클래스의 이름과 역할을 간단히 소개하고 속성(Attribute)와 동작(Operation) 칸은 비워 두었다면 지금부터는 직접 코드 상에서 구현하게 될 클래스의 함수의 이름과 속성을 명시하고 각각의 사용 목적, 기능을 설명해야 한다. 함수 내부 코드만 없을 뿐 헤더 파일에 전역 변수 명과 함수를 선언하는 것과 동일 하다. 클래스 내부 속성을 구체적으로 작성하고 난 후에는 각 클래스들의 시스템 동작하는 형태 결정한다. 여기서 말하는 '동작 형태'란 프로세스, 쓰레드 또는 핸드러와 같이 시스템 상에서 특정 작업을 수행하는 주체의 종류를 말한다. 다소 전문적인 용..
-
시스템 구조 - 구조설계서 작성(3/4)사이드 프로젝트/이기적인 총무 2018. 3. 12. 23:16
소프트웨어 구조설계서 작성 과정은 그림을 그리는 것과 비슷하다. 문서의 앞부분인 기능적/비기능적 요구사항을 도출하고 사용자 화면을 구상하는 작업은 어떤 그림을 그릴지 고민하는 작업으로 볼 수 있고 시스템 구조와 컴포넌트 사양을 작성하는 일은 앞에서 구상한 그림을 직접 도화지에 표현하는 작업으로 볼 수 있다. 표현하는 작업은 스케치 작업과 스케치 한 바탕에 색을 칠하는 작업으로 나눌 수 있는데 이중 시스템 구조를 작성하는 일은 스케치 하는 작업에 해당한다. 전체 그림의 윤곽을 그리는 스케치 작업처럼 시스템 구조를 작성하는 일 또한 거시적인 시각에서 동작하는 소프트웨어의 전반적인 틀을 짜는 작업이다. 스케치는 한 번 마무리 되면 다시 되돌리기가 어렵다. 색을 입히는 도중 그림 상에서 배치가 마음에 안들면 도..
-
소프트웨어는 직관적이지 않다카테고리 없음 2018. 2. 11. 11:54
참으로 이상합니다. 다른 모든 이들이 불가능 할 것이라고 여겼던 사업영역을 과감하게 투자해서 세계적인 반도체, 스마트폰, TV를 만들어낸 국내 S기업이 유독 소프트웨어에서 만큼은 이전과 같은 빛을 보지 못하고 있습니다. 안드로이드와 ioS의 대항마로 야심차게 내놓은 Tizen은 2017년 인도 출시를 끝으로 역사의 뒤안길로 사라지고 있고 스마트폰에 전용 버튼까지 만들어가며 '음성 인식 비서'를 자처한 빅스비는 '불편하고 기대에 못미친다'는 사용자들의 원성을 받고 있습니다. 어깨를 나란히 한다는 기업들은 인공지능 시장에서 알파고와 알렉사를 만들고 있는데 S기업의 존재감은 미미합니다. 도대체 소프트웨어를 개발하는 것이 뭐길래 뭐든 '한다' 하면 정상 근처에 도달하던 기업이 유독 이 영역 만큼은 힘을 쓰지 못..
-
UI 문서 - 구조설계서 작성(2/4)사이드 프로젝트/이기적인 총무 2018. 2. 8. 10:58
앞 포스트에선 이기적인 총무 소프트웨어를 만들게된 계기(시스템 개요)와 시스템이 제공하는 기능 및 품질(요구사항)에 대해서 소개했다면 지금부터는 앞 문서에서 설명한 소프트웨어가 사용자에게 화면으로 보여지는 형태를 정리한 문서, 즉 User Interface 가이드 문서(이하 UI 문서)를 만들어야 한다. 개발자가 아닌 일반인들도 들어보진 못했어도 한번 쯤은 봤을 것이다. 주로 전자제품을 산 후 사용설명서에서 접해보게 된다. 겨울철이니 가습기를 예로 들어 보자. 가습기 사용 설명서에는 어떤 단추를 눌러야 가습기를 실행 할 수 있으며 분무량을 조절하는 버튼은 어디 있는지 그리고 세척 할때는 어떤 부품들을 분해해서 세척할 수 있는지 설명되어 있다. 아무런 안내가 없으면 사용자가 직관적으로 판단해야하는데 전자제..
-
기능적/비기능적 요구사항 - 구조설계서 작성 (1/4)사이드 프로젝트/이기적인 총무 2018. 2. 4. 13:06
소프트웨어 설계 문서는 프로그래밍 언어의 문법처럼 반드시 따라야하는 규칙이 있는것은 아니다. 설계 문서의 주 목적은 소프트웨어 시스템을 모르는 사람에게 설명하는 것이므로 어떤 양식을 사용하든 위 목적에 충분히 부합한다면 잘 작성한 설계 문서라고 할 수 있다. 그러나 '충분히 설명할 수 있는 문서'라는 기준은 애매모호하다. 문서를 작성한 사람이나 소프트웨어를 개발한 사람은 전문적인 용어에 익숙하고 객체들 사이의 관계를 명확히 이해하고 있기 때문에 시스템을 추상화한 다이어그램을 이해하는것이 어렵지 않겠지만 시스템을 경험하지 못한 사람에겐 전문적인 용어는 외계어일 것이고 다이어그램은 초현실주의 작품으로 보이게 된다. 설계자와 독자의 간극을 해소하고자 오래 전부터 학계에서는 '어떤 문서가 바람직한 소프트웨어 문..
-
ARM64 리눅스 부팅 초기 어셈블리 코드 분석(head.S) (2/2)개발/컴퓨터사이언스 2018. 1. 27. 17:18
앞 포스팅에서 다루지 못한 부분들을 마저 분석해보자. 처음에는 ARM 어쎔 코드도 생소했고 Exception Level 개념도 없어 많이 헤맸는데 이젠 어느정도 훈련도 되어 있고 앞에서 했던 것들 보다 내용 도 적을 뿐만 아니라 상대적으로 익숙한 작업들이라 쉽다. 4. setup_boot_mode_flag set_cpu_boot_mode_flag: adr_lx1, __boot_cpu_mode cmpw0, #BOOT_CPU_MODE_EL2 b.ne1f addx1, x1, #4 1:strw0, [x1]// This CPU has booted in EL1 dmbsy dcivac, x1// Invalidate potentially stale cache line ret 현재 실행 되고 있는 cpu의 Excepti..
-
이기적인 총무 리팩토링 - Database 관리 부분사이드 프로젝트/이기적인 총무 2018. 1. 21. 15:50
구조설계서에 시스템에서 사용할 클래스 다이어그램을 그리다 보니 작성한 내용 그대로 실제로 시스템이 적용 할 수 있을지 의문이었다. 문서의 내용은 그럴듯 한데 여기에 안드로이드 시스템 특유의 feature들을 넣다보면 중간에 엉키게 되는 부분이 상당수 있을 것 같은 느낌이 드었다. 나중에 반복해서 고치는것 보단 직접 먼저 코드를 수정한 후 현실 가능성을 검증하고 옮기는 것이 나을것 같아 예전부터 가장 먼저 손대기로 했었던 DatabaseHelper 클래스를 리팩토링 했다. 수정전 DatabaseHelper.java 클래스는 이랬다. 그림 1. 초기 DatabaseHelper 클래스 다이어그램 DatabaseHelper 클래스는 이름 그래도 이기적인 총무의 데이터베이스를 관리할 수 있는 기능을 제공하는 클래..
-
ARM64 리눅스 부팅 초기 어셈블리 코드 분석(head.S) (1/2)개발/컴퓨터사이언스 2018. 1. 17. 23:54
최근에 ARM 64bit 리눅스의 초기 부팅 어셈블리 코드(arch/arm64/kernel/head.S)를 분석할 일이 있었다. 학교 다닐 때 x86 어셈블리로 코딩을 해본적도 있고 예전에 ARM 32bit miniOS 초기 부분도 분석해본 경험이 있어서 금방 할 줄 알았는데... ldr 같은 기본적인 명령어도 오랜만에 보니 생소했고 ARM 64bit만의 고유한 레지스터가 있어 레퍼런스를 뒤적거리면서 찾게 되다 보니 생각보다 오랜 시간이 소요됐다. ARM32와 ARM64가 원래 겹치는 영역이 별로 없는건지 아니면 내 머릿속에 남아 있는게 별로 없어서 겹칠게 없어진건지. 고생한 만큼 쉽게 잊혀질 수 있기 때문에(응?) 포스트로 이번에 공부한 내용들을 짧게나마 정리해보려한다. 1. ENTRY(stext) E..