3.5 KiB
3.5 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)
- 최소 1000 RPS를 보장해야한다.
- 첫 로드후 로딩하면 0.5s 이내에 동작해야합니다
- 동시 편집 이용자를 5명까지는 허용해야 합니다.
- 적어도 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)
}