marko 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +12 -0
  3. data/.rubocop.yml +45 -0
  4. data/CHANGELOG.md +10 -4
  5. data/Dockerfile +11 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +17 -31
  8. data/Rakefile +2 -11
  9. data/exe/marko +4 -22
  10. data/lib/basic.rb +27 -0
  11. data/lib/marko/chain.rb +44 -0
  12. data/lib/marko/cli.rb +119 -129
  13. data/lib/marko/config.rb +30 -20
  14. data/lib/marko/errors.rb +38 -0
  15. data/lib/marko/model/markup.rb +33 -0
  16. data/lib/marko/model/topic.rb +126 -0
  17. data/lib/marko/model/tree_node.rb +34 -0
  18. data/lib/marko/model.rb +10 -0
  19. data/lib/marko/parser/metadata.rb +28 -0
  20. data/lib/marko/parser/source.rb +52 -0
  21. data/lib/marko/parser/topic.rb +33 -0
  22. data/lib/marko/parser.rb +8 -19
  23. data/lib/marko/renderers/artifact.rb +29 -0
  24. data/lib/marko/renderers/content.rb +37 -0
  25. data/lib/marko/renderers/link.rb +19 -0
  26. data/lib/marko/renderers/metadata.rb +34 -0
  27. data/lib/marko/renderers/nested_list.rb +21 -0
  28. data/lib/marko/renderers/nested_tree.rb +22 -0
  29. data/lib/marko/renderers/renderer.rb +17 -0
  30. data/lib/marko/renderers/title.rb +16 -0
  31. data/lib/marko/renderers/topic.rb +24 -0
  32. data/lib/marko/renderers/url.rb +16 -0
  33. data/lib/marko/renderers.rb +17 -0
  34. data/lib/marko/scanner.rb +39 -0
  35. data/lib/marko/tasks/assemble.rb +52 -0
  36. data/lib/marko/tasks/compile.rb +19 -0
  37. data/lib/marko/tasks/load.rb +13 -0
  38. data/lib/marko/tasks/parse.rb +27 -0
  39. data/lib/marko/tasks/scan.rb +18 -0
  40. data/lib/marko/tasks/validate.rb +32 -0
  41. data/lib/marko/tasks.rb +13 -0
  42. data/lib/marko/validators/lost_index.rb +21 -0
  43. data/lib/marko/validators/lost_links.rb +25 -0
  44. data/lib/marko/validators/lost_parent.rb +21 -0
  45. data/lib/marko/validators/non_unique_id.rb +23 -0
  46. data/lib/marko/validators.rb +11 -0
  47. data/lib/marko/version.rb +1 -3
  48. data/lib/marko.rb +11 -43
  49. metadata +47 -85
  50. data/Gemfile +0 -10
  51. data/Gemfile.lock +0 -23
  52. data/STORY.md +0 -44
  53. data/_layouts/footer.md +0 -4
  54. data/_layouts/header.md +0 -3
  55. data/_layouts/layout.html +0 -73
  56. data/_layouts/robots.txt.erb +0 -4
  57. data/_layouts/sitemap.xml.erb +0 -20
  58. data/_layouts/styles.css +0 -92
  59. data/docs/changelog.html +0 -74
  60. data/docs/css/styles.css +0 -92
  61. data/docs/index.html +0 -297
  62. data/docs/readme.html +0 -297
  63. data/docs/robots.txt +0 -4
  64. data/docs/sitemap.xml +0 -30
  65. data/docs/story.html +0 -132
  66. data/lib/assets/demo/README.md +0 -13
  67. data/lib/assets/demo/src/fr/assemble.md +0 -27
  68. data/lib/assets/demo/src/fr/compile.md +0 -25
  69. data/lib/assets/demo/src/fr/markup.md +0 -111
  70. data/lib/assets/demo/src/fr/storage.md +0 -16
  71. data/lib/assets/demo/src/fr/treenode.md +0 -34
  72. data/lib/assets/demo/src/index.md +0 -34
  73. data/lib/assets/demo/src/intro.md +0 -98
  74. data/lib/assets/demo/src/ui/cli.md +0 -26
  75. data/lib/assets/demo/src/ui/gem.md +0 -14
  76. data/lib/assets/demo/src/ur/uc.create.project.md +0 -8
  77. data/lib/assets/demo/src/ur/uc.general.flow.md +0 -14
  78. data/lib/assets/init/README.md +0 -61
  79. data/lib/assets/init/Rakefile +0 -100
  80. data/lib/assets/init/tt/custom.md.tt +0 -19
  81. data/lib/assets/init/tt/default.md.tt +0 -4
  82. data/lib/assets/samples/0_index.md +0 -14
  83. data/lib/assets/samples/1_intro.md +0 -55
  84. data/lib/assets/samples/2_stakh.md +0 -21
  85. data/lib/assets/samples/3_actors.md +0 -10
  86. data/lib/assets/samples/4_cases.md +0 -53
  87. data/lib/assets/samples/5_entities.md +0 -18
  88. data/lib/assets/samples/6_concerns.md +0 -60
  89. data/lib/assets/samples/SRS-IEEE-830-1998.md +0 -293
  90. data/lib/assets/samples/SRS-RUP.md +0 -283
  91. data/lib/assets/samples/business-case.md +0 -116
  92. data/lib/assets/samples/ears.md +0 -112
  93. data/lib/assets/samples/gen_punch_domain.rb +0 -183
  94. data/lib/assets/samples/requirements.md +0 -105
  95. data/lib/assets/samples/stakeholders.png +0 -0
  96. data/lib/assets/samples/vision.md +0 -191
  97. data/lib/marko/artifact.rb +0 -5
  98. data/lib/marko/assembler.rb +0 -83
  99. data/lib/marko/compiler.rb +0 -16
  100. data/lib/marko/gadgets/pluggable.rb +0 -55
  101. data/lib/marko/gadgets/sentry.rb +0 -66
  102. data/lib/marko/gadgets/service.rb +0 -52
  103. data/lib/marko/gadgets.rb +0 -3
  104. data/lib/marko/loader.rb +0 -38
  105. data/lib/marko/markup/compiler.rb +0 -30
  106. data/lib/marko/markup/decorator.rb +0 -80
  107. data/lib/marko/markup/macro.rb +0 -176
  108. data/lib/marko/markup/parser.rb +0 -122
  109. data/lib/marko/markup/storage.rb +0 -118
  110. data/lib/marko/markup/validator.rb +0 -101
  111. data/lib/marko/markup.rb +0 -24
  112. data/lib/marko/services/assemble.rb +0 -16
  113. data/lib/marko/services/compile.rb +0 -30
  114. data/lib/marko/services.rb +0 -2
  115. data/lib/marko/storage.rb +0 -36
  116. data/lib/marko/tree_node.rb +0 -129
  117. data/lib/marko/validator.rb +0 -19
  118. data/marko.gemspec +0 -44
  119. data/sancho.yml +0 -6
@@ -1,16 +0,0 @@
1
- # Sources Storage
2
- {{id: .storage, parent: fr}}
3
-
4
- The system shall provide a storage for artifact sources. The storage must provide the following features:
5
-
6
- - Create a new project
7
- - Remove project
8
- - Get the list of project sources
9
- - Get project source
10
-
11
- @@skip
12
-
13
- At this stage only option will be developed - the filesystem storage. Other options that should be considered for future stages are
14
-
15
- - Database storage (SQL and NoSQL)
16
- - Confluence Wiki
@@ -1,34 +0,0 @@
1
- # TreeNode
2
- {{id: .treenode, parent: fr}}
3
-
4
- The system shall provide `Node` entity with the following properties that provide the following attributes:
5
-
6
- Property Type *..n Default Description
7
- --------- ------ ---- ------- -----------
8
- id String 1 "" Node identifier
9
- parent Node 1 null Parent node reference
10
- title String 1 "" Node title
11
- meta Hash 1 {} Node metadata
12
- body String 1 "" Node body
13
- items Node 0..n [] Child node reference
14
-
15
- ## Tree Metadata
16
- {{id: .tree}}
17
-
18
- To assemble the project artifact from nodes placed among several source files, the system shall provide the following optional tree metadata attributes:
19
-
20
- Attribute Type 0..n Description
21
- ----------- ------ ---- --------------
22
- id String 0..1 Unique node id
23
- parent String 0..1 Parent id
24
- order_index String 0..1 Children ids delimited by space
25
-
26
- ## Source Metadata
27
- {{id: .orig}}
28
-
29
- During source file parsing, the system must store the following node origin information:
30
-
31
- Attribute Type 0..n Description
32
- ----------- ------ ---- --------------
33
- origin String 1 Source filename
34
- lineno String 1 Number of line
@@ -1,34 +0,0 @@
1
- # Intro
2
- {{id: intro}}
3
-
4
- # Users
5
- {{id: usr}}
6
-
7
- The users of the system are different people who play for authoring various sorts of technical documentation. It might be a technical writer, business/systems analyst, developer, etc.
8
-
9
- # User Requirements
10
- {{id: ur, order_index: uc}}
11
-
12
- ## Use Cases
13
- {{id: uc, order_index: .create.project .general.flow}}
14
-
15
- # Functional Requirements
16
- {{id: fr, order_index: .treenode .markup .storage .assemble .compile}}
17
-
18
- # Interface Requirements
19
- {{id: ui, order_index: .cli .gem}}
20
-
21
- # Assumptions and Dependencies
22
- {{id: as}}
23
-
24
- ##
25
-
26
- The system requires a user interface for managing markup sources. It is assumed that users utilize any text editor of their choice.
27
-
28
- ##
29
-
30
- The system requires tools for collaboration on artifacts by several authors simultaneously. Because of the plain text nature of the markup sources, It is assumed using Git for managing the artifact sources repository.
31
-
32
- ##
33
-
34
- The system requires the compilation of artifacts into deliverables in form of well-supported formats like pdf, doc, etc. It is assumed using Pandoc for creating deliverables.
@@ -1,98 +0,0 @@
1
- # Purpose
2
- {{parent: intro}}
3
-
4
- The main purpose of this document is to provide a comprehensive demo project for Marko gem. The other technical purpose is to have Marko Sandbox for testing and development.
5
-
6
- # Problem
7
- {{parent: intro}}
8
-
9
- There are a few alternatives for authors who work on bulky software artifacts like requirements specification. They can apply one of the following tools
10
-
11
- @@todo find a few popular requirements management tools
12
- @@todo find a few popular Tex alternatives
13
-
14
- - a particular requirements management tool, like Doors
15
- - a Word Processor, like Microsoft Word, Libra Office, or Google Docs;
16
- - an elaborate publishing system, like Tex;
17
- - or just using a simple Wiki system, like Confluence or Redmine.
18
-
19
- A requirements management tool might seem to be the best choice there because it is tailored exactly for the required process. But it certainly will be a "hard way" from a cost and time perspective, an elaborate and expensive solution requiring personnel to be trained and vendor support.
20
-
21
- Although deliverable artifacts could be seen as a usual document structured and expressed in headers and paragraphs, the meaning of each of those can be different. So word processors and wiki systems might be the perfect choice for presenting artifact deliverables, but they lack of semantic fails for content development and management. The best of them provide a scripting language for document processing, but it is usually too complicated and again lacks particular entities' semantics (stakeholders, requirements, constraints, etc.)
22
-
23
- Designing documents of hundreds of pages in word processors brings some peculiar drawbacks. The software tends to become "bulky" in operating, consuming too many system resources and responding with delays; tend to be fragile with styles.
24
-
25
- __The problem of__ the lack of simple tools and approaches for writing software artifacts __affects__ technical writers who develop and manage the artifacts __the impact of which is__ they tend to choose a publishing tool or a word processor that does not fit well to work on software artifacts causing lots of manual work and maybe other confusing things like "bulky" documents __a successful solution would be__ the tool that will provide
26
-
27
- - a plain text markup for writing artifact items, that will be easy to read for humans, and processed by machines;
28
- - a "semantics" layer to distinguish artifact items (actors, requirements, etc.) from supported text
29
- - the ability to automate tasks based on processing content according to its semantic value;
30
- - the ability to build a convenient presentation of the artifact (pdf, doc, odt);
31
- - will not depend on OS platform and any proprietary format or software.
32
-
33
- @@skip
34
-
35
- It provides a statement summarizing the problem being solved by the project.
36
-
37
- __The problem of__ [describe the problem]
38
- __affects__ [the stakeholders affected by the problem]
39
- __the impact of which is__ [what is the impact of the problem?]
40
- __a successful solution would be__ [list some key benefits of a successful solution]
41
-
42
- # Product
43
- {{parent: intro}}
44
-
45
- @@todo redesign the product statement for "who" section
46
-
47
- __For__ authors of software artifacts __who__ need a reliable and repeatable process of managing big software artifacts __the__ Marko Markup Compiler is a free open source software __that__ brings a "docs-as-code" approach with efficient plain markup for artifact sources, @@todo templates, CLI, Rake ..
48
-
49
- @@skip
50
-
51
- __For__ [target customer]
52
- __Who__ [statement of the need or opportunity]
53
- __The__ [product name] is a [product category]
54
- __That__ [key benefit, compelling reason to buy]
55
- __Unlike__ [primary competitive alternative]
56
- __Our product__ [statement of primary differentiation]
57
-
58
- # Scope
59
- {{parent: intro}}
60
-
61
- The developing system will consist of
62
-
63
- - the simple plain markup for writing the artifact sources;
64
- - the repository of artifact sources;
65
- - the algorithm for assembling the artifact from sources;
66
- - the markup for templates for publishing the artifact;
67
- - the command line interface for compiling the artifact into deliverables based on the templates
68
- - the Ruby Gem that presents the artifact as the collection o items that can be easily visited for tasks automation;
69
- - the demo project that will help the customers to adopt the approach and design their own solutions based on the approach.
70
-
71
- # Definitions
72
- {{parent: intro}}
73
-
74
- CLI
75
-
76
- : Command-line interface
77
-
78
- ERB
79
-
80
- : Ruby Templating system
81
-
82
- # References
83
- {{parent: intro}}
84
-
85
- 1. [Markdown Guide](https://www.markdownguide.org/)
86
- 2. [Pandoc User's Guide](https://pandoc.org/MANUAL.html)
87
- 3. [Git User's Manual](https://git-scm.com/docs/user-manual.html)
88
-
89
- # Overview
90
- {{parent: intro}}
91
-
92
- The remaining sections of this document provide user- and functional requirements of the system.
93
-
94
- The [[usr]] chapter introduces users of the system.
95
-
96
- The next chapter [[ur]] introduces users requirements that establish the context for the functional requirements.
97
-
98
- The following chapter [[fr]] describes detailed requirements for functions and user interfaces.
@@ -1,26 +0,0 @@
1
- # Command-line interface
2
- {{id: .cli, parent: ui}}
3
-
4
- The system shall provide a command-line interface. The interface must provide the following commands:
5
-
6
- @@list
7
-
8
- ## Create a new project
9
-
10
- The system shall provide the `new PROJECT` command. When the user requests the `new PROJECT` command, the system
11
-
12
- - ensures that `PROJECT` folder does not exist or fails
13
- - creates `PROJECT` folder and copies required files for new project
14
- - reports the user about success
15
-
16
- ## Compile artifact
17
-
18
- The system shall provide the `compile [-t TEMPALTE] [-o FILENAME]` command. When the user requests the `compile` command, the system
19
-
20
- - ensures that current directory is `Marko Project` directory, or fails
21
- - load `template`,
22
- - load from the `TEMPLATE` parameter when provided
23
- - or load default template when not
24
- - creates `tree` by using [[fr.assemble]]
25
- - compiles the tree by [[fr.compile]].(`tree`, `template`, `filename`)
26
- - reports the user about success
@@ -1,14 +0,0 @@
1
- # Gem interface
2
- {{id: .gem, parent: ui}}
3
-
4
- The system shall provide Ruby Gem with the following functions
5
-
6
- @@list
7
-
8
- ## Marko.assemble
9
-
10
- @@todo define Marko.assemble
11
-
12
- ## Marko.compile
13
-
14
- @@todo define Marko.compile
@@ -1,8 +0,0 @@
1
- # Create a new project
2
- {{id: uc.create.project, parent: uc}}
3
-
4
- __Main Flow__
5
-
6
- 1. The user requests the system to create a new project passing a project folder for new project.
7
- 2. The system checks for project folder to be unique. When folder with the same name exists already, the system reports it to the user and the scenario is finished.
8
- 3. The system creates the project folder and furnish it with project structure.
@@ -1,14 +0,0 @@
1
- # General Marko Flow
2
- {{id: uc.general.flow, parent: uc}}
3
-
4
- __Prerequisites__
5
-
6
- 1. The user inside Marko project (see [[uc.create.project]])
7
-
8
- __Main Flow__
9
-
10
- 1. The user creates and makes changes to the sources of the project. [outside the system]
11
- 2. The user requests the system to `compile` the artifact.
12
- 3. The system assembles the artifact from source files.
13
- 4. The system checks the artifact and reports the errors to the user if any.
14
- 5. The system returns the assembled artifact.
@@ -1,61 +0,0 @@
1
- % Marko Demo Project
2
-
3
- Welcome to your new [Marko](https://github.com/nvoynov/marko) project!
4
-
5
- # Structure
6
-
7
- This project has the following structure:
8
-
9
- - [bin/](bin/) - output folder
10
- - [bin/assets/](bin/assets/) - assets folder
11
- - [src/](src/) - markup sources
12
- - [tt/](tt/) - templates
13
- - [marko.yml](marko.yml) - project configuration
14
- - [Rakefile](Rakefile) - Rakefile
15
- - [README.md](README.md)
16
-
17
- # Interface
18
-
19
- Run `marko` command in your console to see basic command-line interface.
20
-
21
- Extend it yourself through Rakefile
22
-
23
- # Git Repository
24
-
25
- [Git How To](https://githowto.com/)
26
-
27
- Incorporates changes from a remote repository:
28
-
29
- git pull
30
-
31
- Create a new branch to start any activity with the repository:
32
-
33
- git branch <branch_name>
34
-
35
- Make changes and commit your work:
36
-
37
- git add .
38
- git commit -m "branch_name - commit description"
39
-
40
- When your changes finished, incorporate changes from the remote repository and merge the `master` branch to your `branch_name`:
41
-
42
- git checkout master
43
- git pull
44
- git checkout <branch_name>
45
- git merge master
46
-
47
- Resolve all conflicts and commit changes:
48
-
49
- git add .
50
- git commit -m "branch_name conflicts resolved"
51
-
52
- Merge your changes to the `master` branch:
53
-
54
- git checkout master
55
- git merge <branch_name>
56
-
57
- Push your changes to the remote repository:
58
-
59
- git push
60
-
61
- Create a merge request if you are not allowed to push to the `master` branch.
@@ -1,100 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'marko'
4
- require 'marko/markup'
5
-
6
- namespace :marko do
7
-
8
- # @todo pandoc: bin/arfifact.docx: openBinaryFile: permission denied (Permission denied)
9
- # Success! Find the artifact in bin/arfifact.docx
10
- #
11
- desc 'Publish the artifact'
12
- task :publish do
13
- output = 'bin/arfifact'
14
- `marko c -o #{output}.md`
15
- pandoc = `pandoc #{output}.md -o #{output}.docx`
16
- File.delete("#{output}.md")
17
- puts "Success! Find the artifact in #{output}.docx"
18
- end
19
-
20
- desc 'Print table of contents'
21
- task :toc, :query do |t, args|
22
- args.with_defaults(query: '')
23
- tree = Marko.assemble
24
- query = args.query
25
- unless query.empty?
26
- tree = tree.find_node(query)
27
- unless tree
28
- puts "Nothing to be printed!"
29
- abort
30
- end
31
- tree.orphan!
32
- end
33
- tree.each do |n|
34
- if n.root?
35
- puts "% #{n.title}" if n.root?
36
- next
37
- end
38
- title = n.title.empty? ? n.id : n.title
39
- puts '#' * n.nesting_level + " #{title} ##{n.id}"
40
- end
41
- end
42
-
43
- desc 'Print @@todo'
44
- task :todo do
45
- tree = Marko.assemble
46
- tree.to_a.drop(1)
47
- .select{|n| n.body =~ /@@todo/}
48
- .each{|n|
49
- list = n.body
50
- .scan(/@@todo.*$/)
51
- .map{_1.sub(/@@todo/, '')}
52
- .map{" #{_1.strip}"}
53
- .join(?\n)
54
- puts n[:origin]
55
- puts list
56
- puts
57
- }
58
- end
59
-
60
- def datestamp
61
- Time.new.strftime('%Y%m%d')
62
- end
63
-
64
- def timestamp
65
- Time.new.to_s
66
- end
67
-
68
- desc 'Punch meeting munutes'
69
- task :mm, :extra do |t, args|
70
- args.with_defaults(extra: '')
71
- extra = args.extra
72
- Dir.mkdir('mm') unless Dir.exist?('mm')
73
- body = MINUTES % timestamp
74
- name = "minutes-#{datestamp}#{extra.empty? ? '' : ?_ + extra}.md"
75
- name = File.join('mm', name)
76
- errm = "Minutes exists already. Maybe you can provide [EXTRA]?"
77
- fail errm if File.exist?(name)
78
- File.write(name, body)
79
- end
80
-
81
- MINUTES = <<~EOF.freeze
82
- %% Meeting Minutes %s
83
-
84
- # Attendants
85
-
86
- 1.
87
- 2.
88
-
89
- # Questions
90
-
91
- 1.
92
- 2.
93
-
94
- # Decisions
95
-
96
- 1.
97
- 2.
98
- EOF
99
-
100
- end
@@ -1,19 +0,0 @@
1
- %# Marko custom template
2
- %
3
- % if !defined?(custom?)
4
- % def custom?(node)
5
- % %w[u s f].any?{|t| node.id == t || node.belongs_to?(t)}
6
- % end
7
- %
8
- % def custom!(node)
9
- % lnkfu = proc{|e| node.find_node(e)&.ref || "[#{e}](#404)" }
10
- % subfu = proc{|s| s.split(?\s).map(&lnkfu).join(', ')}
11
- % node[:depend] = subfu.(node[:depend]) if node[:depend]
12
- % node[:satisfy] = subfu.(node[:satisfy]) if node[:satisfy]
13
- % end
14
- % end
15
- %
16
- % @model.each do |node|
17
- % custom!(node) if custom?(node)
18
- <%= node.text %>
19
- % end
@@ -1,4 +0,0 @@
1
- %# Marko default template
2
- % @model.each do |node|
3
- <%= node.text %>
4
- % end
@@ -1,14 +0,0 @@
1
- # Marko. Software Requirements Specification
2
- {{id: root, order_index: intro stakh actors fr nf fa as}}
3
-
4
- ## Functional requirements
5
- {{id: fr, order_index: .uc .en}}
6
-
7
- ## Interface Requirements
8
- {{id: fa}}
9
-
10
- ## Non-functional requirements
11
- {{id: nf}}
12
-
13
- ## Assumptions and Dependencies
14
- {{id: as}}
@@ -1,55 +0,0 @@
1
- # Introduction
2
- {{id: intro, parent: root}}
3
-
4
- ## Purpose
5
-
6
- The purpose of this document is to provide software requirements specification for @@todo
7
-
8
- ## Problem
9
-
10
- @@skip provide concise statements summarizing the problems that the project should solve
11
-
12
- __The problem of__ [describe the problem]
13
- __affects__ [the stakeholders affected by the problem]
14
- __the impact of which is__ [what is the impact of the problem?]
15
- __a successful solution would be__ [list some key benefits of a successful solution]
16
-
17
- ## Product
18
-
19
- @@skip product statement
20
-
21
- __For__ [target customer]
22
- __Who__ [statement of the need or opportunity]
23
- __The__ [product name] is a [product category]
24
- __That__ [key benefit, compelling reason to buy]
25
- __Unlike__ [primary competitive alternative]
26
- __Our product__ [statement of primary differentiation]
27
-
28
- ## Scope
29
-
30
- @@todo define the scope of the project, web-site, micorservice, etc.
31
-
32
- ## Definitions
33
-
34
- @@skip place some core definitions here
35
-
36
- CLI
37
-
38
- : Command-line interface
39
-
40
- ## References
41
-
42
- @@skip provide some references
43
-
44
- - [Marko](https://github.com/nvoynov/marko)
45
- - [Punch](https://github.com/nvoynov/punch)
46
-
47
- ## Overview
48
-
49
- The next two chapters describe stakeholders ([[stakeholders]]) and users ([[actors]]) of the system.
50
-
51
- The following section [[fr]] provides functional requirements, that starts from use cases ([[fr.uc]]), proceeds with other functional requirements and finishes with data requirements ([[fr.en]]).
52
-
53
- [[fa]] section defines required user interface.
54
-
55
- [[concern]] section provides the domain concerns.
@@ -1,21 +0,0 @@
1
- # Stakeholders
2
- {{id: stakeholders, parent: root}}
3
-
4
- @@skip
5
-
6
- - Regulator
7
- - Purchaser
8
- - Sponsor
9
- - Politician
10
- - The Public
11
-
12
- `ISO 42010`. The following stakeholders shall be considered and when applicable, identified in the architecture description:
13
-
14
- - users of the system;
15
- - operators of the system;
16
- - acquirers of the system;
17
- - owners of the system;
18
- - suppliers of the system;
19
- - developers of the system;
20
- - builders of the system;
21
- - maintainers of the system.
@@ -1,10 +0,0 @@
1
- # Actors
2
- {{id: actors, parent: root}}
3
-
4
- @@list
5
-
6
- ## User
7
- {{id: .user}}
8
-
9
- ## Admin
10
- {{id: .admin}}
@@ -1,53 +0,0 @@
1
- # Use Cases
2
- {{id: uc, parent: root}}
3
-
4
- @@tree
5
-
6
- @@skip # Some Use Case
7
- {{id: .some, parent: uc}}
8
-
9
- **Actors and their Goals**
10
-
11
- 1. User, wants to get some value
12
- 2. System, wants to ensure some policies
13
-
14
- **Guarantee**
15
-
16
- [Succeed]{.underline}
17
-
18
- - one
19
- - two
20
-
21
- [Failed]{.underline}
22
-
23
- - one
24
- - two
25
-
26
- **Extend**
27
-
28
- - no use case extensions
29
- @@todo - [\[fr.uc]]
30
-
31
- **Include**
32
-
33
- - no use case inlcusions
34
- @@todo - [\[fr.uc]]
35
-
36
- **Main flow**
37
-
38
- 1.
39
- 2.
40
-
41
- **Extension**
42
-
43
- [1a] something faulty
44
-
45
- 1. one
46
- 2. two
47
-
48
- **Data**
49
-
50
- [Entities:]{.underline}
51
-
52
- @@todo - [\[fr.ent.]];
53
- @@todo - [\[fr.ent.]].
@@ -1,18 +0,0 @@
1
- # Entities
2
- {{id: .en, parent: fr}}
3
-
4
- The system utilizes the following entities:
5
-
6
- @@list
7
-
8
- @@skip ## Entity "Sample"
9
- {{id: .sample, parent: fr.en}}
10
-
11
- The entity should provide the following properties:
12
-
13
- Property | Type | Multiplicity | Description
14
- -------- | ---- | ------------ | -----------
15
- id | UUID | 1 | unique identifier
16
- title | text | 1 | title
17
-
18
- Table: Entity "Sample"
@@ -1,60 +0,0 @@
1
- # Domain concern
2
- {{id: concern, parent: root}}
3
-
4
- - Mergers and acquisitions
5
- - Time to market
6
- - User satisfaction
7
- - Competitive advantage
8
- - Time and budget
9
-
10
- ## Architecture Characteristics
11
-
12
- Also known as "quality characteristics" or "non-functional requirements"
13
-
14
- Domain Concern Architecture characteristics
15
- ------------------------ -----------------------------
16
- Mergers and acquisitions Interoperability, scalability, adaptability, extensibility
17
- Time to market Agility, testability, deployability
18
- User satisfaction Performance, availability, fault tolerance, testability, deployability, agility, security
19
- Competitive advantage Agility, testability, deployability, scalability, availability, fault tolerance
20
- Time and budget Simplicity, feasibility
21
-
22
- ### Operational
23
-
24
- Term Definition
25
- ------------------ ---------------------------
26
- Availability How long the system will need to be available (if 24/7, steps need to be in place to allow the system to be up and running quickly in case of any failure).
27
- Continuity Disaster recovery capability.
28
- Performance Includes stress testing, peak analysis, analysis of the frequency of functions used, capacity required, and response times. Performance acceptance sometimes requires an exercise of its own, taking months to complete.
29
- Recoverability Business continuity requirements (e.g., in case of a disaster, how quickly is the system required to be online again?). This will affect the backup strategy and requirements for duplicated hardware.
30
- Reliability/safety Assess if the system needs to be fail-safe, or if it is mission critical in a way that affects lives. If it fails, will it cost the company large sums of money?
31
- Robustness Ability to handle error and boundary conditions while running if the internet connection goes down or if there’s a power outage or hardware failure.
32
- Scalability Ability for the system to perform and operate as the number of users or requests increases
33
-
34
- ### Structural
35
-
36
- Term Definition
37
- --------------------- ----------
38
- Configurability Ability for the end users to easily change aspects of the software’s configuration (through usable interfaces).
39
- Extensibility How important it is to plug new pieces of functionality in.
40
- Installability Ease of system installation on all necessary platforms.
41
- Leverageability/reuse Ability to leverage common components across multiple products.
42
- Localization Support for multiple languages on entry/query screens in data fields; on reports, multibyte character requirements and units of measure or currencies.
43
- Maintainability How easy it is to apply changes and enhance the system?
44
- Portability Does the system need to run on more than one platform? (For example, does the frontend need to run against Oracle as well as SAP DB?
45
- Supportability What level of technical support is needed by the application? What level of logging and other facilities are required to debug errors in the system?
46
- Upgradeability Ability to easily/quickly upgrade from a previous version of this application/solution to a newer version on servers and clients
47
-
48
- ### Cross-cutting
49
-
50
- Term Definition
51
- -------------- ------------------------------
52
- Accessibility Access to all your users, including those with disabilities like colorblindness or hearing loss.
53
- Archivability Will the data need to be archived or deleted after a period of time? (For example, customer accounts are to be deleted after three months or marked as obsolete and archived to a secondary database for future access.)
54
- Authentication Security requirements to ensure users are who they say they are.
55
- Authorization Security requirements to ensure users can access only certain functions within the application (by use case, subsystem, webpage, business rule, field level, etc.).
56
- Legal What legislative constraints is the system operating in (data protection, Sarbanes Oxley, GDPR, etc.)? What reservation rights does the company require? Any regulations regarding the way the application is to be built or deployed?
57
- Privacy Ability to hide transactions from internal company employees (encrypted transactions so even DBAs and network architects cannot see them).
58
- Security Does the data need to be encrypted in the database? Encrypted for network communication between internal systems? What type of authentication needs to be in place for remote user access?
59
- Supportability What level of technical support is needed by the application? What level of logging and other facilities are required to debug errors in the system?
60
- Usability Level of training required for users to achieve their goals with the application/solution.