SRS/tools/template/specific.md

4.0 KiB

3. 상세요구사항(Specific Requirements)

3.1. 외부 인터페이스 요구사항(External interface requirements)

해당되지 않음.

3.2. 기능 요구사항(Functional requirements)

<%~ it.issues.map(i => ### (#${i.number}) ${i.title}\n${i.body.replaceAll("\r\n","\n")}).join("\n\n") %>

3.3. 성능 요구사항(Performance requirements)

  1. 최소 1000 RPS를 보장해야한다.
  2. 첫 로드후 로딩하면 0.5s 이내에 동작해야합니다
  3. 동시 편집 이용자를 5명까지는 허용해야 합니다.
  4. 적어도 400개의 파일을 관리할 수 있어야 합니다.

3.4. 논리적 데이터베이스 요구사항(Logical database requirements)

erDiagram
    User {
        int id
        string accessToken
        date expiredAt
    }
    User ||--o{ Permission : has
    Permission {
        string name
        string path
    }

단순하게 공유를 위한 User 구조만 있다.

3.5. 설계 제약사항(Design constraints)

2.1.1. 에서 언급했듯이 다음 브라우저에서 동작해야 한다.

  • Chrome 버전 61 이상
  • Firefox 버전 60 이상
  • Edge 버전 79 이상
  • Safari 버전 11 이상
  • Chrome for Android 버전 100 이상
  • Samsung internet 버전 8.2 이상

그리고 모바일에서도 큰 불편함 없이 원활히 동작해야 한다.

3.5.1. 표준 준수(Standards compliance)

해당되지 않음.

3.6. 소프트웨어 시스템 속성(Software system attributes)

해당되지 않음.

3.7. 상세 요구사항의 구성(Organizing the specific requirements)

3.7.1. 객체(Objects)

다음과 같은 UML을 그릴 수 있다.

classDiagram
    class Document{
        - URL path
        - string[] tags
        
        + renderChunk()
        + remove()
        + addTag(name: string)
        + deleteTag(name: string)
        + async share(option: ShareOption): URL
        + renderNavigator()
    }
    class Chunk{
        - id_t id
        - Content data
        - bool focused
        - pos_t cursorPos

        + focus(index: number)
        + unfocus(index: number)
        + remove(index: number)
        + insertBefore()
        + draw()
        + drawPreview()
        + autoComplete(ctx: AutoCompleteContext)
        + swapWith(p : Chunk)
        + edit()
    }
    Document "1" <-- "n" Chunk : List
    class Fileview{
        + listDirectory(path: URL)
        + open(path: URL)
        + remove(path: URL)
        + create(path: URL)
        + upload(file: Uint8Array| FileStream)
        + download(path: URL)
        + export(path: URL, option: ExportOption)
    }
    Fileview <.. Document : create
    class StashList{
        Content[] stash
        int maxStash
        createFromServer()
        push(c: Content)
        pop()
    }
    class DnDManager{
        + dropTo(Fileview)
        + dropTo(Document)
        + dropTo(Stash)
        + dragFrom(Fileview)
        + dragFrom(Document)
        + dragFrom(Stash)
    }
    DnDManager <.. Fileview : param
    DnDManager <.. Document : param
    DnDManager <.. StashList : param
    class SearchManager{
        search(query,option)
    }
    SearchManager <.. Document : return
classDiagram
    class Management{
        login(auth:Auth)
        setServerConfigure(config: Configure)
        setLocale(lang: string)
        setTheme(theme: string)
        getLocale()
        getTheme()
        getServerConfigure()
    }
    class Extension{
        registerPlugin(plugin: Plugin)
    }

Chunk는 문서를 이루는 기본적인 단위이다. 글의 문단이라고 생각 할 수 있다. Document는 그런 Chunk의 리스트이다. FileView는 파일에 접근하고 Document를 열 수 있는 파일 브라우저이다. StashList는 단순한 파일이나 텍스트 등을 임시로 저장하고 꺼내쓰는 컨테이너이다.

3.7.2. 사용자 인터페이스 상세

interface

다음과 같이 컴포넌트가 배치될 것이다. 배치될 컴포넌트는 Treeview, Chunk, ChunkList, Appbar, GeneralDialogue, Drawer, ContextMenu, StashList가 있다.