2017년 2월 27일 월요일

첫 SHA-1 충돌 사례 공개

본 글은 제가 아래 원본을 읽고 나서 번역한 글입니다. 혹시나 번역이 잘못되었거나 이렇게 번역하는 것이 올바르지 않은 것이면 말씀해주세요. 조치하겠습니다!

https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html

This blog is the translation of "" from Google security blog.
If this blog violates copyrights or anything else, please let me know.
----------------------------------------------------------------------------------------------------------------------------------

2017년 2월 23일

본문 작성자: Marc Stevens (CWI Amsterdam), Elie Bursztein (Google), Pierre Karpman (CWI Amsterdam), Ange Albertini (Google), Yarik Markov (Google), Alex Petit Bianco (Google), Clement Baisse (Google)

 SHA-1과 같은 암호화 해시 함수는 암호를 사용하는 사람들에게는 다용도 칼(swiss army knife)이다. 브라우저 보안, 코드 저장 관리 그리고 심지어 스토리지 내 파일 중복을 검사할 때에도 사용되기 때문이다. 암호화 해시 함수란 큰 용량의 데이터를 암호화하여 메세지 조각(Message digest)로 만드는 함수를 나타내며, 보안이라는 목적에 맞게, 동일한 메세지 조각을 만드는 다른 데이터는 산술적으로 존재하지 않는다. 하지만 시간이 지나면서 해시 함수의 수학적인 치명점이나 컴퓨터의 나날이 좋아지는 산술 능력 때문에 이러한 보안이라는 기존 목적이 깨질 수 있음이 밝혀져 왔다.

 SHA-1이 처음 소개된 지 20여년이 지난 오늘날, 우리는 처음으로 실제 SHA-1 충돌을 발생시킬 수 있는 기술을 공개하려 한다. 이는 구글과 암스테르담 CWI 연구소 공동으로 진행된 2년 동안의 연구 결과물이다. 우리는 어떻게 SHA-1 충돌을 만들어 내는지 아래 요약할 것이며, 또한 이러한 주장의 증거물로써 SHA-1 해시 값은 같지만 내용은 다른 2개의 PDF을 공개할 것이다.

 그동안 기술 관련 커뮤니티에서 우리의 연구는 SHA-1 사용 중단의 필요성을 강조해 왔다. 구글은 수 년동안 SHA-1의 사용, 특히나 TLS 인증 확인에서의 사용에 관해 지속적으로 반대를 주장해 왔고 2014년 초기부터 the Chrome 팀은 SHA-1 사용을 단계적으로 정지해 왔다.

 우리는 우리의 SHA-1 공격 성공 사례가 더 이상 프로토콜이 안전하지 않다는 것을 확실히 보여주길 희망한다.


암호화 해시 충돌이란?



 암호화 해시 충돌은 위와 같이 2개의 다른 데이터(문서, 바이너리 또는 웹사이트 인증 등)이 동일한 메세지 조각으로 만들어지는 경우를 뜻한다. 보안 관련 해시 함수들만 보더라도 충돌은 일어나면 안 된다. 하지만 만일 현재 실제로 사용되고 있는 해시 알고리즘이 SHA-1에서 일어나는 것과 비슷한 결점을 가지고 있다면, 실력 좋은 해커인 경우 충돌을 일부러 만드는 것이 가능하다. 그러면 해커는 악성 파일을 무해한 파일 대신 인식하여 받아들이도록 시스템을 속일 수도 있을 것이다. 예를 들면, 내용이 극명하게 다른 2개의 보험 계약을 바꿀 수도 있다는 것이다.


SHA-1 충돌 발견

 2013년 Marc Stevens는 논문을 통해 SHA-1 충돌을 만들 수 있는 이론을 제시했다. 우리는 내용은 전혀 다르지만 동일한 SHA-1 해시 값을 가지는 2개의 문서를 만들기 위해서는 특별한 PDF 헤더 포맷이 필요하다는 것부터 시작했다. 하지만 이러한 이론을 실질적으로 가능하게 만들기 위해 몇 가지 새로운 위기를 극복해야 했으며, 때문에 우리는 구글의 기술 전문가들과 함께 역대 가장 시간이 오래 걸리는 계산 중 하나인 SHA-1 충돌을 계산하기 위해 클라우드 기술(cloud infrastructure)를 활용했다.

 SHA-1 충돌 계산이 얼마나 걸리는 지는 아래 수치를 보면 알 수 있을 것이다.

 - 총 9경(9,223,372,036,854,775,808) 번의 계산 필요
 - SHA-1 공격 1단계를 위한 SHA-1 해시 값 계산: CPU 1대당 6,500년 정도의 시간 필요
 - SHA-1 공격 2단계를 위한 SHA-1 해시 값 계산: CPU 1대당 110년 정도의 시간 필요


 이러한 숫자들이 매우 크게 느껴지는 반면, SHA-1 분산 공격(Shattered)은 단독 공격(Bruteforce)에 비해 100,000배 빠르다. (역주: SHA-1 분산 공격(SHA-1 Shattered)는 Google에서 최근에 공개한 새로운 SHA-1 공격 방법입니다.)


SHA-1 충돌 공격 위험을 줄이는 것

 결국 더 나아가, 보안 담당자는 SHA-256 또는 SHA-3과 같은 더 안전한 암호화 해시 함수로 위험성을 줄이는 것을 서둘러야 한다. 구글의 취약점 공개 정책에 따라, 우리는 90일 이후에 몇몇 조건들과 더불어 동일한 SHA-1 해시를 생성할 수 있는 PDF 파일들을 만드는 코드는 공개할 것이다. 이러한 공격이 실제 쓰이는 것을 방지하기 위해, Gmail과 GSuite 사용자들을 위한 PDF 충돌 기술을 감지하기 위한 보호 기술을 추가했다. 또한, 감지 시스템 또한 공개할 것이다.

 SHA-1 공격 에 대해 더 자세한 내용을 찾기를 원한다면 여기를 클릭하길 바란다.

우리 팀에 대해

 이 결과는 CWI 연구소와 구글 보안 연구팀의 오랜 연구에 따른 산출물이다. Marc StevensElie Bursztein은 구글 인프라를 이용하여 Marc의 SHA-1 공격 이론을 실전으로 보여주기 위해 협력을 시작했다. Ange Albertini는 PDF 공격을 개발했으며 Pierre Karpman는 암호 분석와 GPU 응용을, Yarik Markov는 분산 GPU code를 담당했다. 그리고 Alex Petit Bianco는 구글 사용자들을 보호하기 위한 충돌 감지 시스템를 구현했으며 마지막으로 Clement Baisse는 산술 계산의 신뢰성을 감독하였다.


2017년 2월 2일 목요일

Open Data, Government and the Open Web

1. Web Principles
( http://melancholy8914.blogspot.co.uk/2017/02/linked-data-and-semantic-web.html )
 - All entities of internet, such as information resources, real-world objects, and vocabulary terms should be identified by URI references
 - URI references should be dereferenceable, meaning that an application can look up a URI over the HTTP protocol and retrieve data about the identified resource (a representatioin)
 - Data should be provided using a standard format (HTML, XML, RDF etc)
 - Data should be interlinked with other data

http://5stardata.info/

2. Openness
 - Open Access to Research Outputs: supported Research Funders all over the world
  e.g. Open Access ( http://melancholy8914.blogspot.co.uk/2017/02/open-access.html )
 - Open Research Data
 - Open Educational Resources
 - Open Government Data
  e.g. data.gov.uk / equipment.data.ac.uk

 - Evaluating Results
  * Impact: is the company actually having any impact with its use of open data? is the impact likely to be long term, sustainable and difficult to replace?
  * Integrality: is open data at the core of the product or service? or is it a 'nice to have'?
  * Innovation: how is the open data used and how is this new or different?

http://www.webscience.org/2012/02/16/the-openness-of-the-web/

Net Neutrality: Delivering Internet Data

1. General questions
 - What is the point of the Web? Why do we use the Web?
 - What value do we expect the Web to provide us?
 - What value do we deliver to the Web?
 - How is the Web sustainable?

2. Web Participants
 : people, governments, private companies, communities
 - The Web is a data exchanging space
 - Information has contextual value upon time, space, place and recipient

3. The internet as public good
 - Public goods: non-rivalrous commons, which are resources available for public benefit, but individual rivalry may deplete the resource, depriving others benefits
 - The internet is an impure global public good (UNDP, 1999)
  * Human-made global commons
  * Subject to non-rival consumption, meaning that additional individuals benefit at zero marginal (production) cost
 - The internet is a club good (World Development Report, 2016)
  * Excludable
  * Non-rivalrous
  * Enormous positive externalities

4. Net Neutrality
 : should Internet Providers be able to influence what kind of material can appear on the Internet?
 - Open Internet
  * In the open internet, all traffic will be treated equally
  * Subject to public internet exceptions - child porn, cyber security, malware
  * Compromise for fast lane

 - FOR
  * open, distributed network: The web is an open, public system that is made up of many privately owned components
  * Internet needs protection: ISPs should not become gatekeepers of what works well in the Internet and what doesn't
  * protection for industry and consumers

 - AGAINST
  * someone has to pay: The internet is not free, someone has to pay for it
  * Companies work in the public good e.g. Silicon Valley
  * Government Interference: tight regulation can kill competition / we cannot treat all data equally

https://www.publicknowledge.org/issues/net-neutrality

https://www.theguardian.com/technology/net-neutrality

Content Cache

1. Slashdotting
 : the name stems from the huge influx of web traffic that would result from the technology news site Slashdot linking to websites
 - This overloads the smaller site, causing it to slow down or even temporarily become unavailable

2. Cache
 - the temporary storage of frequently accessed data stored for rapid access
 (+) reduces access time/latency for clients
 (+) reduces bandwidth usage
 (+) reduces load on a server
 - HTTP cache-control headers
  * Freshness: how long the cached copy stays "fresh" without revisiting the origin server
  * Validation: compare the cached copy to the origin document after it stops being "fresh"

 - Browser cache: cache for a single user / application
 - Proxy cache: cache located close to the clients
  e.g. University or Internet Service Provider
  * decreases external bandwidth usage
  * decreases network latency
 - Reverse proxy cache: cache proxy located closer to the origin web server
  * deployed by a Web hosting ISP
  * decreases load on the Web service (database)

http://searchstorage.techtarget.com/definition/cache

3. Content Distribution Networks (CDN)
 - Business requirement: stream video content to hundreds of thousands of simultaneous users
 - Obvious Web Solution: single, large "mega-server"
  => But, this solution doesn't work in practice
  => Working Web solution: store / serve many copies of videos at multiple geographically distributed sites
 - CDN Cluster selection strategy: how does CDN DNS select "good" CDN node to stream to client
  * pick CDN node geographically closest to client
  * pick CDN node with shortest delay to client
  * let client decide - give client a list of serveral CDN servers

http://searchaws.techtarget.com/definition/content-delivery-network-CDN

4. Streaming multimedia: DASH
 - DASH: Dynamic, Adaptive Streaming over HTTP
 - manifest file: provides URLs for different chunks by server
 - "intelligence" at client: client determines
  * when to request chunk => buffer starvation or overflow does not occur
  * what encoding rate to request => higher quality when more bandwidth available)
  * where to request chunk => can request from URL server that is "close" to client or has high available bandwidth

http://www.streamingmedia.com/Articles/Editorial/What-Is-.../What-is-MPEG-DASH-79041.aspx

Web Advertising

1. Introduction
 - Advertiser: people with something to sell
 - Audience template: something they will draw up that encapsulates some information about who they think this is
 - Audience: what advertisers refer to people as
 - Sites: the websites the audience visits
 - Banners: the parts of the page available to server an add to
  => Normally, larger ones and ones in better positions are worth more
 - Advertising spend for a given audience template is agreed in advance
 - As spending is essentially fixed, sites compete to satisfy the audience template by acquiring greater amounts of information on their audience

http://www.wordstream.com/online-advertising

2. Advertising Industry
 : searching advertising is about 65% of all online advertising spend
  => Google has 90% of all searching advertising
 - Google Model:
  * Google works by indexing the sites. Then providing an integration to the advertiser - via Google Adwords.
  * This allows them to purchase against their audience template by considering which keyword searches map best to their template
  * They then leverage their massive platform capabilities to action many such mappings at once
  * They get extra information on the audience and so Google can often provide a better fit for the audience template
  * Google also has the infrastructure to serve the ad to its site based on complex contractual agreements with advertisers
  * To compete, a range of companies provide services to sites: Adservers, Demand Side Processors (DSPs), Third Party Providers (TPPs)

https://www.google.co.uk/adwords/

3. Purchasing and Serving Ads
 - Contract Buying
  1) The site and advertiser do a direct deal based on the site's knowledge of their audience
  2) The terms of this deal are stored in the site's adserving integration
  3) When a user requests a page, a javascript tag forwards this information to adserver
  4) If an appropriate contract exists, then the advertising content associated with this contract is sent back to the site to serve to the user

 - Real Time Bidding
  1) The advertiser sends the audience template to a demand side provider (DSP) with a series of metrics they wish to satisfy that indicate campaign success
  2) When a user requests a page, a javascript tag forwards this information to adserver
  3) The adserver forwards this information to the DSP's and request spot bids for the right to serve and ad to the user

 - More Realistic View of the Situation
  1A) The site and advertiser do a direct deal based on the site's knowledge of their audience
  1B) They also send the audience template to their demand side providers (DSPs)
  2) The terms of this deal are stored in the site's adserving integration
  3) When a user requests a page, a javascript tag forwards this information to adserver
  4A) If the contract exclusively assigns the rights to the impression to an advertiser, then the adserver serves sends this content back to the site
  4B) Mostly the contract will be optional so the user-site information will be forwarded onto the DSPs plus a floor price, corresponding to the price the site would get servicing an existing contract. The DSP then bids if they can beat this price

4. Third Party Information
 : As well as the infrastructure sites must compete with Google on the information they can provide to map their audience to the advertiser template
 - User Announces: IP Address / User Agent / Cookies
 - Website Adds: User Announces + Referring URL / Location URL / Site specific information
 - Audience Augmentation: Website Adds + Geo Location / Income / Recent behaviour / Content Type
 - Advertiser Specific Information: Audience Augmentation + Advertiser Cookies

5. Browser Cookies
 - cookie: information that a site saves to your web browser / Record your browsing activities
 - First party cookies: place by a site when you visit it
  => make your experience on the web more efficient
 - Third party cookies: place by someone other than the site you are on
  => include an advertising network or a company that helps deliver the ads you see
 - Transient cookies: to help "sessionise" your experience on a website
  => "set" when you visit the site, it disappears when we leave
 - Persistent cookies: remain the website for the duration that the website determines
  => help identify a unique browser to the website

http://www.allaboutcookies.org/cookies/

6. Cookie Tracking
 1) Consumer requests Web page from ad network member site
 2) Merchant server connects to DoubleClick ad server
 3) Ad server reads cookie; checks database for profile
 4) Ad server selects and serves an appropriate banner ad based on profile
 5) DoubleClick follows consumer from site to site through use of tracking files

http://www.tomsguide.com/us/-tracking-cookie-definition,news-17506.html

https://support.google.com/accounts/answer/61416?hl=en

Open Access

1. Open Access
 : a current movement for organising and disseminating the world's research knowledge through Web technology

https://www.youtube.com/watch?v=L5rVH1KGBCY

2. Why?
 - the Problem
  * Universities and researchers are knowledge producers and knowledge consumers
  * Scholarly communications have been outsourced
  * Literally nothing to show as evidence of research activities
 - Scholarly Publishing
  * 1665 - 1960: Scientific and scholarly societies publish their own journals
   => For the benefit of their members, for the benefit of science
  * 1960 - : Private Sector
   => After the war, the New Demand made for a very profitable system
 - Publishing Conditions: an author writes article ~> the publishing company receives revenue / the author receives academic credit
  => Limited Access, Limited Research impact

3. The Budapest Open Access Initiative
 : Old tradition of scholarly publishing + New technology of the Internet = free and unrestricted access to peer-reviewed journal literature

4. Open Access Strategies
 - Green: Self-Archiving
  * authors deposit a copy of their papers into a 'open access repository'
  * public copy is a supplement to the publishers official article for those who can't afford a subscription
 - Gold: Publishing
  * journal changes business model
  * readers no longer pay to read
  * authors pay to publish

https://wellcome.ac.uk/funding/managing-grant/open-access

5. Contributors to the OA Advantage
 - EA (Early Advantage): self-archiving pre-prints before publication hastens and increases usage and citations (higher-quality articles benefit more)
 - QA (Quality Advantage): self-archiving post-prints immediately upon publication hastens and increases usage and citations
 - UA (Usage Advantage): self-archiving increases downloads
 - CA (Competitive Advantage) , QB (Quality Bias)

6. Problems with Green OA
 - Copyright assignment to publishing company means the author no longer has the right to control the paper
  => may not allow submission to a repository / not allow copies to be made for teaching, research assessment
 - Relies on publishers changing their business model

7. Repositories
 - Open Archiving Initiative
 - EPrints
 - roles: who takes responsibility for curating the research knowledge of the world?
  => The institutional repository is a place where the members of an institution can curate their intellectual outputs capital

Intellectual Property RIghts

1. Types of rights
 - Copyright
 - Database (EU only)
 - Performance rights
 - Patents
 - Trade marks
 - Design rights
 - Moral rights (EU only)

2. Copyright
 - protects "work"
 - owned by the authors(s) of the work (or the employer)
 - can only be transferred in writing
 - infringement of copyright: primary infringement is purely a civil matter / secondary infringement can be a criminal offence
 - Licensing: A license allows someone (the licensee) to use a work for some or all purposes but the owner retains ownership
  * License can be exclusive or non-exclusive

https://www.gov.uk/topic/intellectual-property/copyright

3. Copyright & Digital Technology
 - Digital work => Ease of Reproduction / Storage / Dissemination
  => The Web violates the principle of copyright

4. Creative Commons licensing
 - Creative Commons (CC) addresses legal problems in the area of global copyright law
 - offers viable middle ground between stringent copyright and completely unfettered use of content
 - provides a set of user-friendly online licenses
 - CC Licensing Conditions: Attribution / No Commercial Use / No Derivative Works / Share Alike

https://creativecommons.org/licenses/

Search Engines

1. Finding information on the Web
 - Browse strategies: where is information stored?
 - Search strategies: what does the information contain?
  * Specific queries
   e.g. encyclopaedia, library
  * Broad queries
   e.g. web directories
  * Vague queries
   e.g. search engines

2. Web Search
 - All queries answered without accessing texts by indices alone
 - Links: link topology, link popularity, who links
 - Page structure: words in heading > words in text
 - Spamming
  * most search engines have rules against invisible text / meta tag abuse / heavy repetition / "domain spam"

3. Centralised architecture
 e.g. Crawler-indexer
 - Crawler: a program that traverses web to send new or update pages to main server (where they are indexed)
 - Centralised use of index to answer queries

4. Distributed architecture
 e.g. Harvest architecture
 - Gatherers: collect and extract indexing information from one or more web servers at periodic time
 - Brokers: provide indexing mechanism and query interface to data gathered
             retrieve information from gatherers or other brokers, updating incrementally their indices

http://searchsdn.techtarget.com/tip/Centralized-vs-decentralized-SDN-architecture-Which-works-for-you

5. Google Search
 - Crawling and Index Depth: aims to refresh its index on a monthly basis
 - Ranking algorithms
  * Variations of Boolean and vector space model: term frequency * inverse document frequency
  * Hyperlinks between pages: Popularity / Relatedness (e.g. PageRank, HITS)
   !! PageRank: Google finds a single type of universally important page -- intuitively, locations that are heavily visited in a random traversal of the Web's link structure

 - Google Relevancy: Google ranks web pages based on the number, quality and content of links pointing at them (citation)
  * Number of Links
  * Link Quality
  * Link Content
  * Ranking boosts on text style

http://www.slideshare.net/Ankit007_/ranking-algorithms

https://www.wordtracker.com/academy/learn-seo/technical-guides/google-ranking

http://searchengineland.com/what-is-google-pagerank-a-guide-for-searchers-webmasters-11068

Web Graph

1. Graph Theory + Web Structure
 => node or vertex is page / directed edge or arc is link
 => Web Graph ~ directed graph that is formed by webpages and their hyperlinks

http://webgraph.di.unimi.it/

2. Graph Terminology
 - Network size: total number of vertices (N)
 - Distance between two vertices (v and v'): shortest path between the pair
 - Diameter of a network: longest distance between any two vertices
 - Average-case diameter
 - Degree of vertex: number of edges connected to v
 - Density of network: ratio of edges to vertices

3. Graph Importance Measures
 - Four types of centrality (Central as in important or vital)
  * Degree Centrality: how many edges does a vertex v have?
  * Betweeness Centrality: how many pairs of nodes is v between?
  * Closeness Centrality: how quickly a message can travel from one node to the whole graph?
  * Eigenvector Centrality: the connection of a vertex v to the important node in the network

https://networkx.github.io/documentation/development/reference/algorithms.centrality.html

4. Degree Distribution
 - Normal distribution: The average degree is most likely. Very high and very low degrees are highly unlikely.
 - Power law distribution: No meaningful average degree. Very low degrees are likely, but very high degrees are likely in aggregate.
  * Power law networks: Some nodes have a tremendous number of connections to other nodes (hubs)
   => popular nodes can have millions of links: the network appears to have no scale (no limit)
  * Preferential attachment: process by which items are distributed to objects according to how many items they already have

http://mathinsight.org/degree_distribution

The Web Standards Process

1. Web Standards Organisations
 - W3C: World Wide Web Consortium
 - IETF: Internet Engineering Task Force
 - ISO: International standards Organisation
 - OASIS: Organisation for the Advancement of Structured Information Standards
 - idpf: International Digital Publishing Forum

http://www.webstandards.org/learn/external/orgs/

2. IETF Structure and Process
 : not a membership organisation - anyone can become involved
 - Structured into:
  * Working Groups: Chartered groups
  * Birds of a Feather Groups (BoF): Informal discussion groups
 - Document Types
  * Requests for Comments (RFC): become official internet standards documents
  * Internet Drafts: preliminary technical specifications, only valid for six months

https://www.ietf.org/

3. W3C Structure and Process
 : a membership organisation - must join in order to participate
 - Structure
  * Working Group: chartered for a specific duration to deliver a particular standard
  * Interest Group: chartered discussion forum
  * Community Group: discussion forum open to non-members
 - Technical Report Type
  * Recommendation
  * Proposed Recommendation
  * Candidate Recommendation
  * Working Draft (First Public Working Draft / Last Call Working Draft)
  * Note (Member Note / Working Group Note)

https://www.w3.org/

http://softwareengineering.stackexchange.com/questions/109517/how-is-ietf-different-from-w3c

4. De Jure versus De Facto Standards
 - De Jure "according to law": standards created to extend existing practice
 - De Facto "as a matter of fact": standards created to codify existing practice

http://electronicdesign.com/embedded/what-s-difference-between-de-jure-and-de-facto-standards

5. Web Hypertext Application Technology WG (WHATWG)
 : in response to perceived slow HTML standards development in W3C
 - Found by Apple, Mozilla and Opera (Now includes Google)
 - treats HTML5 as a "living standard", maintained by an "informed editor"

http://whatis.techtarget.com/definition/WHATWG-Web-Hypertext-Application-Technology-Working-Group

Linked Data and the Semantic Web

1. the Semantic Web
 - an extension of the current Web in which information is given a well-defined meaning
 - The Annotated Web
  * enrich existing web pages with annotations
  * enable enhanced browsing and searching
 - The Web of Data
  * expose existing databases in a common format
  * express database schema in a machine-understandable form
 - need shared vocabularies to describe objects in these domain of interest => ontologies

 On the World Wide Web...
On the Semantic Web...
 The World Wide Web is the Web for people
 - Technologies include URI, HTTP, XML, HTML
 - Information needs humans to give it meaning
The Semantic Web is the Web for machines
 - Technologies include RDF, RDFS, OWL
 - Information can be interpreted by machines
 XML is machine-readable format RDF is a machine-understandable format
 - a framework for interchange formats

 - The triple: underlying model of triples used to describe the relations between entities in the Semantic Web
  * subject - predicate - object

https://www.w3.org/standards/semanticweb/

https://data-gov.tw.rpi.edu/wiki/Triples

2. Linked Data
 - Principles: Set of publishing practice for SW data:
  * Use URIs as names for things
  * use HTTP URIs so that people can look up those names
  * When someone looks up a URI, provide useful information
  * Include links to other URIs, so that they can discover more things

http://www.linkeddatatools.com/semantic-web-basics

Data Formats on the Web

1. Content Negotiation
 - used in HTTP to allow servers to send different representations of the same resource at the same URI
 - The user agent tells the server which encoding, language, media type, etc. it prefers, and the server responds with the "best" representation

https://www.w3.org/Protocols/rfc2616/rfc2616-sec12.html

2. Internet Media Types
 : composed of a type, a subtype, and optional parameters
 e.g. text/html, application/pdf, video/mp4, image/png
 1) Plain Text
  - ASCII: ASCII maps the 1-byte numbers 0-127 into letters
   * 1byte = 8bits = 0 - 255, but the 8th bit was used for error correcting (parity bit)
  - Unicode: uses 4-byte numbers
   * allows 1-byte (8-bit) representation: UTF-8
 2) HTML: structured for main applications of Web pages
  * incorporates stylesheets, media, scripts
 3) XML: more general document and data language than HTML
 4) MathML: facilitates the use and re-use of mathematical and scientific content on the Web
 5) SVG: a language for describing 2D graphics in XML
  * compared in Canvas (Native HTML Drawing)
 6) Office Open XML: a zip file of a directory hierarchy of lots of XML files
  * From Office 200, Microsoft moved to XML-based formats
 7) ePUB: an HTML-based e-book file format with the extension .epub that can be downloaded and read on smartphones, tables, computers, or e-reader devices except Amazon Kindle e-readers
  - Reflowable document for e-readers => Re-sizeable font, and changeable text and background colours
  - file is a zip archive that contains, in effect, a website
 8) PDF: structured for rendering of pre-formatted documents
  - Many business, publishing and records-keeping applications require a reliable, flexible and capable and immutable analog for paper
   => people use when they need an electronic "hard copy"
   => pdf is often used as the final, official format of record

http://idpf.org/epub

https://blogs.adobe.com/documentcloud/top-10-reasons-to-use-pdf-instead-of-word-excel-or-powerpoint/

The Future of Hypertext

1. Spatial Hypermedia
 e,g, Storyspace, Websquirrel, Tinderbox
 - Tools for supporting emergent structure
 - A visual/spatial metaphor allows people to express the nuances of structure, especially ambiguous or partial
 - Focus on creation of structure / visual and spatial properties (position, colour, border, shape, etc)
 - Spatial Hypertext Systems: Notecards, gIBIS, VNS, Aquanet, VIKI, VKB
 - Structure Parsing in VIKI (Virtual Interactive Kinetic Intelligence)
  * VIKI performs a bottom-up hierarchical parse
  * Recognised Structures: Vertical list / Horizontal list / Stack / Pile
  * Spatial structures and relationships: By spatial arrangement / By object type / By collection / By composite
  * Spatial Parsers: produce explicit structure by interpreting the implicit structure in a space

http://delivery.acm.org/10.1145/520000/513370/p117-gronbak.pdf?ip=152.78.215.208&id=513370&acc=ACTIVE%20SERVICE&key=BF07A2EE685417C5%2EA13CBF7F1C3C7DF4%2E4D4702B0C3E38B35%2E4D4702B0C3E38B35&CFID=719481330&CFTOKEN=35396763&__acm__=1485089609_cb87485c628e7a7550bf3a57a0232804

http://www.eastgate.com

2. Temporal hypermedia
 : time-based hypertext
 - The business of inserting links into temporal and continuous media
 - Microcosm Sound Viewer (1993): early innovative work on putting jump links into sound files
 - The Amsterdam Hypermedia Model (1994): concerned with provision of systems to author multimedia presentations and synchronise multiple data streams
 - HyTime: Hypermedia/Time-based Structuring Language
 - MPEG-7: a standard for describing features of multimedia content
 - Synchronised Multimedia Integration Language (SMIL): the W3C format for multimedia on the Web

http://www.edshare.soton.ac.uk/3939/

3. Computational Hypermedia
 - issues 4: Computation in (over) hypermedia networks of Halasz's seven issues ( http://gomisol.blog.me/220917262044 )
  => provides APIs to allow cards to be orchestrated and scripts to be executed when certain events occur
 - NoteCards: script cards that orchestrate the display of other cards
 - Trellis: Petri Net-based hypertext
 - ILEX: Dynamic hypertext system that generates both nodes and links at run-time
 - PageRank: Algorithm used by Google to rank search results

https://journals.tdl.org/jodi/index.php/jodi/article/view/15

4. Conceptual Hypermedia
 : Hypermedia + Ontologies
 => the kind of hypertext whose structure and links are derived from the relationships between objects in the real world

http://users.ecs.soton.ac.uk/lac/WWW10/ConceptualLinking.html

5. Pervasive Hypermedia
 - Pervasive Computing
 - Interactive Spaces
 - Augmented Reality

6. Adaptive Hypermedia
 : Adaptation based on some user model
 - Intelligent Tutoring Systems
 - Adaptive Navigation
 - Adaptive Presentation

Open Hypermedia and the Web

1. Open Hypermedia
 : hypertext features present within whole environment
 - Links and anchors must be kept separately from documents
 - Linkbases and Link Services

https://smartbear.com/learn/api-design/what-is-hypermedia/

2. Dexter Hypertext Reference Model
 : formal model of an open hypertext system, developed 1988-1990
 1. Run-Time Layer: Presentation; user interaction; dynamics
  1-1. Presentation Specification
 2. Storage Layer: database of nodes and links
  2-1. Anchoring
 3. Whithin-Component Layer: content/structure inside nodes

http://www.cyberartsweb.org/cpace/ht/christanto/dexter_model.htm

3. Hyper-G
 : a publishing system with hypertext features more advanced than those available with HTTP and web browser
 - Client-Server architecture
 - Persistent session connections
 - First class nodes, links and anchors
 - Bi-directional links
 - Link integrity: Hyper-G tries to maintain link such that user is always able to follow any link that is presented to them
  * Compared with the Web: if the destination of a link goes away, the user sees 404 Not Found
  * The endpoint of a link (source or destination) needs to define a node
  * The Dangling Link Problem: if the endpoint refers to an invalid node then we have a dangling endpoint (link)
  * The Content Reference Problem: if the endpoint refers to the wrong part of the node content then we have a content reference problem
 - A notion of composites/collections

 (+) Authoring support integrated into browser, and designed into protocols from outset
 (+) Early support for multimedia
 (-) Own internet protocol (HG-CSP) / markup language (HTF) / browser (Harmony)

http://whatis.techtarget.com/definition/Hyper-G

http://stackoverflow.com/questions/32039568/what-are-the-integrity-and-crossorigin-attribute

4. Microcosm
 : originally designed for use with read-only media, as a desktop-based system, later expanded to a distributed system
 - Specific, Local and Generic Links
  * Source anchor of a link is not embedded in the source document, but its position(s) is described in the linkbase

 (+) Rich model of linking (generic links, n-ary links, etc)
 (+) Integration with third-party application
 (-) Scalability
 (-) Arguably, no native document format
 (-) No support for link integrity

https://www.youtube.com/watch?v=DF9oAwUgmKo

5. Open Hypermedia Protocol
 : initially a naive attempt to "shim" existing linkservers so hat they could be used by standard client integrations
 - Fundamental Open Hypermedia Model (FOHM): OHP forms the basis for later integration efforts
 - Location Specifiers (LocSpecs): used to indicate anchor positions

 (+) A formalised version of the data model (FOHM) is widely used in the community
 (-) The shim architecture was naive and was replaced by middleware
 (-) The message overhead is very high

http://users.ecs.soton.ac.uk/hcd/protweb.htm

6. Open Hypertext on the Web
 : If Microcosm and Hyper-G were so good, why are we not all using them?
  * We lose the goal of hypertext across the entire desktop
  * HTML/DOM (and browsers) do not allow easy control of anchor positions
 - Linkbase Creation : Theming technology extracts key phrases from documents based on location and frequency
 - Link Injection: Links can be added at different times in the document retrieval process
  * batch process documents: generate static HTMLl pages
  * on demand by web server: careful choice of data structures and algorithms
  * in proxy server: user configures their browser to proxy through the link injector
  * in browser: with a plugin that fetches links and rewrites documents
 - Link Presentation: Links can be rendered to distinguish from authored links

 (+) Applications do not have to be responsible for maintaining "foreign" markup
 (+) You can tailor your linkbases to your nodes (contexts)
 (+) On read-only media, keeping links separately is the only way to do it!
 (-) Keeping link separately introduces potentially consistency issues
 (-) For streaming, data links as well as data have to be synchronised

http://webaim.org/techniques/hypertext/hypertext_links

Hypertext Writing

1. Nelson on hypertext
 : non-sequential writing - text that branches and allows choices to the reader, best read at an interactive screen

http://www.livinginternet.com/w/wi_nelson.htm

2. Ergodic Literature
 : "In ergodic literature, nontrivial effort is required to allow the reader to traverse the text." in Cybertext: Perspectives on Ergodic Literature written by Aarseth, E.
 - Saporta, M. (1963) Composition No.1, Roman: 150 loose leaf pages
 - Cortazar, J. (1966) Hopscotch: Chapters 57-155 designated as 'expendable'
 - Queneau, R. (1967) Un conte a votre facon: Numbered double-page spreads
 - Johnson, B.S. (1969) The Unfortunates: 27 chapters, bound as pamphlets

http://tcjournal.org/issues/vol3/kirchoff/Ergodic.html

3. Story, Narrative and Text
 - Story: the content of a tale
 - Narrative: a recounting of a story
 - Text: the signs (words, images)
 => Non-linearity may be introduced at any or all of these levels

http://www.eastgate.com/catalog/ReadingHypertext.html

http://www.academia.edu/13695589/COGNITIVE_MODEL_FOR_WEB_BASED_HYPERTEXT_COMPREHENSION

4. Hypertext Fiction
 : concentrates on literary hypertext
 - Joyce, M. (1987) afternoon, a story: Non-linear narrative with default path
 - Moulthrop, S. (1992) Victory Garden: Multiple non-linear narratives with default paths
 - Ryman, G. (1996) 253: Extensive cross-referencing and footnotes support a non-linear narrative
 - Hildick, E.W. (1967) Lucky Les: the adventures of a cat of five tales: Third person narrative
 - (1979-) Choose Your Own Adventure: Second person narrative
 - Newman, K. (1999) Life's Lottery: Non-linear story, but, with an additional narrative

http://nicolebasaraba.com/examples-hypertext-fiction-write-hypertext-narratives/

http://www.cyoa.com/

5. Ludic Hypertext
 - (1982-) Fighting Fantasy: Combines CYOA-style second person narrative with Dungeons & Dragons-style rules
 - (1986-7) Dual Master: Two-player gamebook
 - Campbell Webster, E. (2007) Being Elizabeth Bennet: Mimicry aimed at a different demographic to that of other gamebooks
 - Rahman, K. (1983) Dark Cults: Storytelling card game

https://incobalt.wordpress.com/writings/interweaving-narrative-structures-with-ludic-environments/text-interweaving-narrative-structures-with-ludic-environments/

6. Hypertext Comics
 - Early hypertext comics based on gamebooks
 - McCloud, S. (2001) Choose Your Own Carl: Implicit choices in alternate frames
 - Shiga, J. (2010) Meanwhile: Visual grammar for linking
 - Ware, C. (2001) Jimmy Corrigan: The Smartest Kid On Earth

http://www.hypercomics.net/

http://scottmccloud.com/

7. Hypertext poetry
 - Rosenberg, J. (2005) Diagrams Series 6, #1.

8. Hypertext Drama
 : allows the audience to follow different narratives (and to choose when to switch narratives)
 - Stoppard, T. (1973) Rosencrantz and Guildenstern are Dead
 - Cincera, R., Rohac, J. and Svitacek, V. (1967) Kinoautomat: Czech experimental interactive film
  * Film is stopped at intervals and audience is asked how they think the film should be continued
  * Audience votes on two options (red/green) with the majority determining the future path of the film
 - Figgis, M. (2000) Timecode: Film composed of four overlapping narratives

https://www.youtube.com/watch?v=-vnI7DtqnSw

https://www.youtube.com/watch?v=YXr8W9i-Bz8

Representational State Transfer

1. Representational State Transfer (REST)
 : Architectural style that parallels and informs the design of HTTP/1.1

2. REST Constraints
 1) Client-Server: Separation of concerns, user interface and data storage
  (+) improves portability of user interface, improves scalability by simplifying server
 2) Stateless: no context is stored on the server
  (+) improves visibility, reliability, scalability
  (-) increases overhead
 3) Cache
  (+) allows some interactions to be eliminated and reduces average latency
  (-) stale data reduces reliability
 4) Layered system
  (+) improves scalability (load balancing)
  (-) adds latency and overhead
 5) Uniform Interface
  (+) encourages independent evolvability
  (-) Degrades efficiency
 6) Code on demand (optional)

http://whatisrest.com/rest_constraints/index

3. Architectural Elements
 - Data Elements: Resources / Resource identifiers / Representations / Representation metadata / Control data
 - Connectors: Client / Server / Cache / Resolver / Tunnel
 - Components: Origin server / Gateway / Proxy / User agent

http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

4. Introduction to RESTful Web Service
 1) The Richardson Maturity Model: Model of RESTful maturity

 Level Zero
Level One
Level Two
Level Three
 Single well-known endpoint Multiple endpoints Multiple endpoints, identifying resources Multiple endpoints, identifying resources
 uses HTTP as only transport uses HTTP as only transport understands HTTP understands HTTP
 No hypermedia No hypermedia No hypermedia uses links to communicate protocols

https://martinfowler.com/articles/richardsonMaturityModel.html

2) HATEOAS: Hypermedia As The Engine Of Application State

https://medium.freecodecamp.com/restful-services-part-iii-hateoas-and-the-richardson-maturity-model-48d4e4c79b8d#.vdqz8mwh3

Hypertext History

1. From the Middle Ages to the Age of Enlightenment
 - Richard White of Basingstoke: One of the earliest scholars to make use of endnotes
 - The Birth of the Modern Encyclopaedia: Comprehensive in scope, systematic in organisation (mid-1700)

https://www.geni.com/people/Richard-White-of-Basingstoke/6000000029052805062

2. Organising Utopia
 - Legal Citations: Practice of referring to court decisions, statutes, etc that support a proposition
 - Paul Otlet: Created the Universal Decimal Classification for libraries
  * The Mundaneum: A central repository for all the world's knowledge
  * The World City
 - Wilhelm Ostwald: Reduced literature to small units of recorded knowledge ('monos') that could be arranged and linked with other units
 - The World Brain: the core would be a world synthesis of bibliography and documentation with the indexed archives of the world

http://gutenberg.net.au/ebooks13/1303731h.html

3. Interlude (1939 ~ 1945)
 - The Memex: An electro-mechanical analogue device for organising knowledge
  * mentioned in 'As We May Think' written by Vannevar Bush

https://www.techopedia.com/definition/20659/memex

4. The Information Age
 : Everything is deeply intertwingled
 - ARC (Augmentation Research Centre)
 - Ted Nelson: coined the term "hypertext"
 - Project Xanadu
  * intercomparison of parallel documents
  * worldwide publishing without barriers
  * links that don't break
  * versioning
  * transclusion
  * trans copyright

http://www.xanadu.com/

5. Hypertext Systems
 - HES: Hypertext Editing System
 - FRESS (1967): File Retrieval and Editing System
 - ZOG (1975): One-way links
  * Early proponent of the "card" or "frame" model of hypertext
 - KMS (1983): Knowledge Management System
 - HyperTIES (1983): Hyper The Interactive Encyclopeadia Systems
 - Intermedia (1985): Bidirectional linking
 - NoteCards (1985): Hierarchical browser
 - Hypercard (1987)

http://hypercard.org/

6. Conklin on Hypertext
 ( Hypertext: An Introduction and Survey written by Conklin, J.)
 - Macro Literary Systems: Memex, NLS/Augment, Xanadu project
 - Problem Exploration Tools: IBIS
 - Structured browsing Systems: ZOG/KMS, HyperTIES
 - General Hypertext Technology: NoteCards, Intermedia, HES/FRESS

7. Halasz on Hypertext
 ( Reflections on Notecards written by Halasz, F.)
 - The seven issues for the next generation of hypertext systems
  * Search and query in a hypermedia network
  * Composites - augmenting the basic model
  * Virtual Structures
  * Computation in (over) hypermedia networks
  * Versioning
  * Support for collaborative work
  * Extensibility and tailorability
 - A keynote at Hypertext '91 in San Antonio
  * Ending the tyranny of the Link
  * Open Systems
  * User Interfaces for Large Information Spaces
  * Very Large Hypertexts

8. ...and then the Web happened
 - 1990: Three new Hypertext systems made their first appearance
  * The World Wide Web
  * Hyper-G
  * Microcosm

Stylesheets: CSS & XSL

1. HTML Stylesheets (CSS)
 1) Stylesheets can be applied to an HTML file with a link instruction
  <link rel="stylesheet" type="text/css" href="style.css">
   or with a stylesheet element
  <style type="text/css">
   h1 {color:red;}
  </style>
   or in a style attribute
  <h1 style="color:red">Cinderella</h1>

 2) Stylesheets can be applied to an XML data file with a processing instruction
  <?xml-stylesheet type="text/css" href="book.css" ?>

 3) Selectors: element name / context / class / identifier
 4) Declarations: property: value
  e.g. font-family: Arial

http://www.w3schools.com/css/default.asp

2. XML Stylesheets (XSL)
 1) An XSL stylesheet describes how to transform XML document into a different XML document
 2) XSL provides
  - an XML vocabulary for specifying formatting semantics
  - a language for transformatting XML data
 3) Stylesheet Processing
  - theory: mydoc.xml, mydoc.dtd, style.xml -(XSLT processor)-> FOdoc.xml, FO.dtd -(XSL processor)-> web page
  - practice: mydoc.xml, mydoc.dtd, style.xml -(Browser / XSLT)-> mydoc.html -(Browser)-> web page
 4) Templates: XSL stylesheet consists of a number of templates

http://www.w3schools.com/xml/xsl_intro.asp


 CSS Stylesheet
 XSL Stylesheet
 Pros - simple
- good for documents
- able to add to or change documents
- great for database data
 Cons - unable to add to or change documents
- bad for data
- complex
- cumbersome for ordinary documents


Hypertext Transfer Protocol

1. What is Hypertext?
 - Non-linear writing: interlinked texts, Multiple pathways
 - Annotation and commentary
 - Association of ideas
 - Writing and reading not separated
 - Interactive
 - Not limited to text: hypermedia

https://www.w3.org/WhatIs.html

2. Hypertext terminology
 1) node: a 'chunk' of information that corresponds to a natural 'semantic unit'
 2) link: an association between nodes
  - a part of the source code: <a href="">
  - can only be followed in the forward direction
  - can only connect a pair of nodes
  - Embedded Links: links are embedded in web pages
  - First Class Links: separates links from nodes
  - Bidirectional Links
  - N-ary Links
  - Generic Links
  - Functional Links
  - Typed Links:
 3) anchor: the representation of a link on a node
 4) endpoint: a component of a link that references an anchor on a node

https://www.w3.org/TR/WD-htmllink-970328

Hypertext Transfer Protocol (HTTP)

1. Web Protocols
: many protocols in use on the Web, but only two are Web protocols
 - Hypertext Transfer Protocol
 - Simple Object Access Protocol

2. HTTP (Hypertext Transfer Protocol) /1.1
 : Client and server exchange request/response messages
 1) Messages: <message> ::= (<request>|<response>)
                                      <header>*
                                       CRLF
                                      <body>

 2) Methods
  - GET: request a representation of a resource
  - HEAD: request the body-less response from a GET method
  - POST: request that a representation be accepted as a new subordinate of the specified resource
  - PUT: uploads a representation of the specified resource
  - DELETE: deletes the specified resource

 3) Request Headers
  - Accept: specify desired media type of response
  - Accept-Language: specify the desired language of response
  - Date
  - Host: host and port number of requested resource
  - If-Match
  - Referer
  - User-Agent

 4) Status Codes
  - 1xx: informational message
  - 2xx: success
   e.g. 200 OK, 201 Created
  - 3xx: redirection
   e.g. 300 Multiple Choices, 301 Moved Permanently, 302 Found
  - 4xx: client error
   e.g. 401 Unauthorized, 403 Forbidden, 404 Not Found, 405 Method Not Allowed
  - 5xx: server error

 5) Response Headers
  - Allow
  - Content-Language
  - Content-type
  - Content-Length
  - Date
  - Expires: date/time after which response is considered stale
  - ETag
  - Last-Modified: date/time at which representation was last changed

 6) HTTP Content Negotiation
 : HTTP allows the serving of different representations of a resource based on client preferences

https://www.w3.org/Protocols/rfc2616/rfc2616.html

2. HTTP Extensions
 1) WebDAV: HTTP/1.1 is still essentially a read-only protocol, as deployed
  => Web Distributed Authoring and Versioning - HTTP Extensions

https://www.w3.org/Protocols/HTTP/ietf-http-ext/

3. Beyond HTTP/1.1
 1) HTTP Limitations: Before HTTP/1.1, each HTTP request used a separate TCP connections
  => In order to fetch multiple resources from a server, HTTP/1.0 opens multiple connections to that server
  => increase latency if connections are not concurrent
  => two partial solutions in HTTP/1.1 : HTTP Keep-Alive, HTTP Pipelining

 2) HTTP Keep-Alive: TCP connections reuse for multiple HTTP requests
 3) HTTP pipelining: Pipelining allows multiple requests to be made without waiting for response
 4) SPDY: purely a framing layer
  - Offers four improvements over HTTP/1.1: Multiplexed requests, Prioritised requests, Compressed headers and Server Push
 5) HTTP/2.0 Prioritised Requests: Each stream has another 31-bit integer that expresses its relative priority
 6) HTTP/2.0 Compressed Headers
 7) HTTP/2.0 Push: HTTP/2.0 enables a server to pre-emptively send (or push) multiple associated resources to a client in response to a single request

https://http2.github.io/

The Architecture of the World Wide Web

1. Architectural Basis of the Web
 : The notion of a resource is central to the architecture of the Web
 - We need to be able to identify resources, represent resources and interact with resources

2. Identification
 1) Identifiers should be global: Global naming leads to global network effects
 2) Every object should be addressable
 3) Uniform Resource Identifiers (URI): A compact string of characters for identifying an abstract or physical resource
  <scheme>:<hierarchical part>?<query>#<fragment>
  e.g. http://www.example.org/aboutus?name=a#staff
 4) Assign distinct URIs to distinct resources: Using the same URI to directly different resources produces a URI Collision
 5) Avoid URI aliases: A URI owner should not associate arbitrarily different URIs with the same resource

 6) The Classical View: Early to mid-90s web specs distinguished between
  - Resource Location (URL): URL resolution is (usually) well-defined
  - Resource Name (URN): URNs don't necessarily have well-defined resolution semantics
  - Resource Identifier (URI)
  => URI ⊃ URL + URN

 7) The Modern View: Formal URL/URN distinction is unhelpful
  - URL is a useful informal concept

3. Representation
 1) Representations of a resource may be sent or received using interaction protocols
 2) Separation of content, presentation and interaction: A specification should allow authors to separate content from both presentation and interaction concerns
 3) Link identification: A specification should provide ways to identify links to other resources, including to secondary resources
 4) Web linking: A specification should allow Web-wide linking, not just internal document linking
 5) Generic URIs: A specification should allow content authors to use URIs without constraining them to a limited set of URI schemes
 6) Hypertext links: A data format should incorporate hypertext links if hypertext is the expected user interface paradigm

4. Interaction
 1) Dereferencing URIs: The schemas in URIs used to identify resource may indicate protocols that can be used to access those resources
 2) Reuse representation formats: New protocols created for the Web should transmit representation as octet streams typed by Internet media types
 3) Safe retrieval: Agents do not incur obligations by retrieving a representation
 4) Available representation: A URI owner should provide representations of the resource it identifies
 5) Reference does not imply dereference: An application developer or specification author should not require networked retrieval of representations each time they are referenced
 6) Consistent representation: A URI owner should provide representations of the identified resource consistently and predictably

https://www.w3.org/TR/webarch/

HTML, XML & HTML

1. HTML & XML
 1) The Beginning: HTML (Hyper Text Markup Language) began as a language for encoding simple document semantics
 2) Effects through Bloating: It became more bloated to allow more design precision and visual effects
 3) Simplicity through Style: Until precise style specifications were added
 4) Style is All: But, then the names of the tags became irrelevant
 5) Or are Data and Style Equal?: So invent your own for your own applications
 6) Or is Data All?: And forget the display semantics. Information is for using, not looking at!

 => The result of this transformation is XML

http://courses.cs.vt.edu/~cs1204/XML/htmlVxml.html

2. XML (eXtensible Markup Language)
 1) Element: forms a hierarchical decomposition. Names are case sensitive
  e.g. <foo>Text and
         <bar>element</bar>
         <image/>
       </foo>
  !! Element recognition: naked angle brackets cannot appear => should follow standard entities
   e.g. < ~> &lt; / & ~> &amp;

 2) Attribute: labels elements
  e.g. <para security="restricted"></para>

 3) Entity: contains document fragments
 4) Markup declaration: defines entities, elements, attributes, DTDs, comments, marked sections
 5) Processing instruction: interprets elements and content
 6) DTD: constrains elements, attributes and content and provides a simple grammer

http://www.w3schools.com/xml/xml_whatis.asp

3. HTML5
 - HTML/XHTML were simple page-oriented structures
  => Gradually generic structures take over as use of the Web explodes
  => HTML5 recognises major new structures that are useful for search engines and usability
 - Structure of HTML5
  1) doctype: <!DOCTYPE html>
  2) <nav>: Represents a major navigation block. It groups links to other pages or to parts of the current page whose role is simply navigation
  3) <header>: tag specifies a header for a document or section, the title and datastamp of a blog entry or news article
  4) <footer>: Material that comes at the base of the page or article
  5) <article>: Articles and blog etries are common, an alternative to <div class="article"> used for distributable content. An article may contain a header and footer and a title
  6) <aside>: The "aside" element is a section that somehow related to main content, but it can be separate from that content
  7) <video> & <audio>: provides new elements for media. But, only understands a limited set of formats
  8) <canvas>: provides a surface for programs to draw ion using a standard API

http://www.w3schools.com/html/html5_intro.asp

2017년 2월 1일 수요일

소프트웨어 명세서에서의 10가지 실수들

 본 글을 제가 아래 원본을 읽고 나서 남겨놔야 겠다 싶어 번역한 글입니다. 혹시나 번역이 잘못되었거나 이렇게 번역하는 게 올바르지 않은 것이라면 말씀해주세요. 조치하겠습니다!

http://www.yegor256.com/2015/11/10/ten-mistakes-in-specs.html

This blog is the translation of "10 Typical Mistakes in Specs" from www.yegor256.com.
If this blog violates copyrights or something else, please let me know.

============================================================================

 Karl Wiegers가 쓴 Software Requirements라는 유명한 책이 있다. 흠, 소프트웨어 요구사항 정리에 관해서는. 개인적인 의견으로는, 소프트웨어 엔지니어들에게는 필수 서적이라 생각된다. 그 책에서 말하고자 하는 것을 여기서 반복할 필요는 없을 것 같고, 실전에서 소프트웨어 명세서를 보면 꾸준히 반복되고 있는 몇 가지 실수들이 있다. 나는 그런 실수들을 자주 보아 왔기 때문에 한 번 정리해야 겠다고 결심했으며 그래서 여기, 명세서를 읽는 프로그래머의 입장에서 가장 흔하고 결정적인 실수들을 적어본다.

 유명한 표준안인 IEEE 830-1998의 챕터 4.3에 의하면, 좋은 명세서는 반드시 일관성 있게 정확하고 명확하며 완전하고 우선 순위가 명시되어야 하며 증명 가능하고 출처가 명확하며 수정이 가능해야 한다. (correct, unambiguous, complete, consistent, ranked, verifiable, modifiable, and traceable) 종합적으로 위 8가지가 만족되어야 한다고 하면서 표준안은 하나 하나 꽤 쉽게 설명해 놓았다. 하지만 우리가 이 지루한 표준안을 읽을 시간을 가지고 있었던가? 그것들은 대학 교수나 검정 위원회를 위한 것이다. 생각해봐라, 우리는 ... 기술자들(practitioner)이란 말이다! ... 하하, 농담이다...

 프로젝트의 규모가 얼마인지, 우리가 얼마만큼 실행할 수 있을지는 상관없이, 무엇이 실행되어야 하는지 설명하는 문서는 항상 존재한다. 그리고 그것은 아마도 "소프트웨어 요구사항 명세서" 또는 "명세서"라고 불릴 것이다. 물론, 명세서에도 약간의 창작을 위한 공간이 있을 수 있다. 하지만 우리는 예술가가 아니라 엔지니어다. 원활한 의사소통을 위해 우리는 반드시 규칙과 표준을 지켜야 한다.

 자, 이제 본격적으로 들어가보도록 하겠다.

 나는 그 동안 위의 8가지 요건들을 위배하는 명세서들을 줄곧 봐왔으며 아래는 그러한 문서들이 어떻게 8가지들을 위배했는 지에 대한 요약이다. 참고로, 아래 모든 예제들은 실제 상업 소프트웨어 프로젝트에서 실제 명세서로 부터 나온 것들임을 알아주길 바란다.

 (역주: 각각의 카테고리들과 예제들은 해석과 예제를 함께 남깁니다.)

용어 설명이 없거나 의미 파악이 어려운 용어
(No Glossary or a Messy One)

아래 예제를 보자:
 UUID는 2개의 동일한 계정 번호가 생기지 않도록 하기 위해 하나씩 증가하며 설정되어야 한다.
 (UUID is set incrementally to make sure there are no two users with the same account number)

 UUID와 계정 번호의 차이가 무엇일까? 같은 것인가? 같이 보이긴 한다, 그렇지 않나? 아니면 아마도 다를 수도 있을 것인데...UUID가 무엇을 의미하는 지 아는 것이 최선일 것 같다. 아마도 "unique user ID" 혹은 "unified user identity descriptor"가 아닐까 하는데, 모르겠다. 그저 이 문서를 작성한 사람(이하 작성자)을 당장 찾아가서 조그마한 복수를 하고 싶은 마음 뿐이다.

 나는 이미 최악의 기술 명세서는 용어 설명따위 하지 않는다. 라는 글을 쓴 적이 있다. 내 경험에 비추어 볼 때, 이것은 모든 명세서의 가장 큰 문제점 이기도 하다. 명세서는 문학이 아니며 러브레터는 더더욱 아니다! 단지 기술 문서일 뿐이다. 우리 모두는 단지 재미를 위해 단어 맞추기를 할 시간이 없다. 그리고 우리를 표현하기 위해서 제품 명세서를 사용하는 것도 안 된다. 우리는 독자에게 감명을 주기 위해서가 아닌, 이해시키기 위해서 문서를 작성하는 것이다. 그리고 룰은 '당신이 더 나은 기획자일 수록, 당신의 그림은 심플하다.'에서 언급한 바와 같다: 만일 내가 이해하지 못했으면 그것은 당신 잘못이다.

위 예제를 한 번 바꿔보자:
 UUID는 사용자 고유 아이디이며, 4-바이트 0보다 큰 정수이다.
 UUID는 2개의 동일한 UUID가 생기지 않도록 하기 위해 하나씩 증가하며 설정되어야 한다. 
 (UUID is user unique ID, a positive 4-bytes integer.
 UUID is set incrementally to make sure there are no two users with the same UUID)

 더 낫지 않은가?

 따라서, 가장 첫번째로 흔한 문제는 멍청한 용어 사용과 의미가 명시되지 않는 단어의 사용이라고 할 수 있겠다.

질문, 토론, 제안, 의견
(Questions, Discussions, Suggestions, Opinions)

아래는 내가 최근 제품 명세서에서 본 명세 사항이다.:
 저는 여러 버전의 API가 지원되야 한다고 생각합니다. 어떤 방법들이 있을까요? URL로 관리하는 것도 괜찮을 것 같습니다.
 당신의 의견이 있다면 주저 말고 남겨주세요. 
 (I believe that multiple versions of the API must be supported. 
 What options do we have? I'd suggest we go with versioned URLs. Feel free to post your thoughts here.)

 그렇다, 위 문장이 요구사항 문서에 그대로 적혀 있었다. 차근히 따져보면, 먼저 작성자는 제품에 대한 그의 의견을 표현하였다. 그러고 나서 나에게 어떠한 방법이 가능할 지 물어보았고, 또한 의견을 이야기할 수 있다는 것을 알려 주었다.

 인상적이지 않은가? 단언컨대, 작성자는 매우 창의적인 성격을 가졌임이 틀림없다. 하지만 우리는 이러한 사람을 프로젝트 문서를 작성할 때는 다분히 배제시켜야 한다. 요구사항 문서 작성과는 어울리지 않기 때문이다. 우리도 물론 창의성을 지향한다. 하지만 아래 4가지는 반드시 금지되어야 하지 않을까 싶다: 질문하기, 토론하기, 제안하기, 그리고 의견 묻기

 명세서 자체는 명세사항들에 대해 질문을 가질 수 없다. 질문이 있다면 누가 이러한 질문들을 해결할 것인가?
우리, 프로그래머? 우리가 소프트웨어의 기능을 예상하고 질문에 답해야 할까? 나는 작성자와 브레인스토밍을 하고 싶지 않을 뿐더러, 내가 명세서에 바라는 것은 나에게 어떤 기능이 있어야 되는지 말해주는 것 뿐이다. 작성자는 명세서를 작성하기 전에 모든 질문의 답을 찾아야 한다. 그것이 그 사람이 월급을 받는 이유니까. 만일 작성자가 답을 찾지 못한다면, TBD("to be determined")라도 적어야 한다. 질문을 하면 우리는 더 화가 날 뿐이다.

 요구사항 문서는 토론 게시판이 아니다. 명세서의 독자로써, 나는 "아마도"나 "바뀔 수도 있다"가 없이 정확히 어떠한 기능이 필요한 지 볼 수 있기를 바란다. 물론, 문서를 완성하기 전에는 이러한 이슈들을 토론할 수 있다. 하지만 다른 곳에서 해야하지 않을까? 예를 들면, Skype나 Slack, 이메일 같은 곳에서 말이다.  만일 작성자가 문서 파일에서 토론하길 원한다면, 버전 추적(version tracking)을 이용해서 Google Docs나 Word를 이용할 수도 있다. 하지만 토론이 끝났을 때에는 토론했던 히스토리를 모두 지워야 한다. 남아있는 히스토리들은 단지 프로그래머를 혼란에 빠뜨릴 뿐이니까.

 요구사항에는 제안 역시 있을 필요가 없다. 단지 어떠한 기능이 구현되어야 하며 어떻게 해야 소프트웨어가 잘못 구현됐다는 두려움을 없앨 수 있는지만 말해주면 된다. 일반적으로, 사람들은 직설적으로 말하기 두려울 때 제안을 한다. "그 앱은 반드시 안드로이드 3.X 이상 버전에서 작동이 되어야 합니다." 대신에, "나는 안드로이드 3.X 이상에서도 이 앱이 호환될 수 있도록 만드는 것을 제안합니다."와 같이 말이다. 차이가 느껴지나? 두 번째 문장에서는 작성자가 개인적인 책임을 피하려고 한다. 그는 "정확히 안드로이드 3.X 버전"이라고 말하지 않는다. 단지 제안할 뿐. 겁쟁이가 되면 안 된다; 그냥 말해라. 만일 당신이 실수한다면, 우리가 정정해 줄 수 있다.

 그리고 물론, 의견을 물어보는 것도 전혀 타당하지 않다. 명세서는 친구에게 보내는 편지가 아니다; 이것은 프로젝트에 포함될 정식 문서이다. 몇 달 혹은 몇 주 이후에는 당신이 프로젝트에서 빠지겠지만 다른 누군가가 작업하기 위해 당신의 문서를 읽을 것이다. 명세서는 프로젝트 스폰서와 팀의 계약서와 같다. 작성자의 의견 따위 계약에 어떠한 영향력도 없다. "자바가 속도 면에서 더 빠를 것이기에 자바로 구현하길 권한다."라고 쓰는 대신에 "자바가 더 빠르다, 그러므로 우리는 자바를 써야한다."라고 적어주길 바란다. 당신이 그렇게 생각했다면 명확하게 적는 게 낫다. 그러나 일단 한번 그렇게 적혀있으면, 프로그래머는 누가 그렇게 제시했는지 이러한 문제에 대해 당신이 어떻게 생각하는지는 관심없다. 프로그래머를 더 혼란스럽게 만들 정보가 있다면 건너 뛰고 사실만 적어라, 의견이 아니라.

 오해하지는 마시길, 나는 창의성을 지양하지 않는다. 프로그래머는 조용히 문서가 하라는 대로 구현만 하는 로봇이 아니니까. 하지만 혼란을 야기하는 문서는 창의성과는 관련이 없다. 만일 당신이 내가 창의적이길 바란다면, 어느 정도선까지 내 의견을 반영해도 되는지를 제시해주길 바란다.

예를 들면:
 여러 버전의 API가 지원되야 한다. 정확히 어떻게 버전이 관리되는 지는 중요하지 않다.
 (Multiple versions of the API must be supported. How exactly that is done doesn't really matter.)

 위 예제가 바로 당신이 프로그래머에게 창의성을 발휘할 수 있도록 제시할 수 있는 방법이다. 나는 제품의 사용자가 버전 관리 메카니즘에 관해서는 딱히 기대하거나 정해놓은 것이 없다는 것을 알게 되었다. 고로, 여기에 관해서 나는 마음대로 할 수 있는 것이다. 좋아, 내 맘대로 하겠어.

 다시 한 번 말하지만, 요구사항 명세서는 토론 게시판이 아니다.

기능 명세와 품질 명세의 혼합
(Mixing Functional and Quality Requirements)

아래 예제를 보자:
 사용자는 프로필 내 이미지 목록을 부드럽고 빠르게 스크롤할 수 있어야 한다.
 (User must be able to scroll down through the list of images in the profile smoothly and fast.)

 내가 지금까지 봐온 모든 명세서에서 전형적으로 일어나는 실수이다. 여기서 우리는 기능 명세("이미지를 스크롤한다")와 품질 명세("스크롤이 부드럽고 빠르다.")가 함께 있는 것을 볼 수 있다. 이것이 왜 나쁘냐고? 흠, 이건 지극히 기본적인 부분에서의 실수이지 않을까...

 위와 같은 요구사항은 증명하거나 테스트하기 어려우며 구현하는 것도 어렵다. 프로그래머로써, 나는 어떠한 것이 중요한 것인지 확신할 수 없다: 문제 없이 스크롤되는 것인가 아님 빠른 스크롤링인가?

 또한, 위와 같은 문장은 수정하기도 어렵다. 만일 내일 우리가 또다른 기능 명세를 추가한다고 해보자 - 예를 들면, 친구 목록을 스크롤할 수 있어야한다.(scrolling a list of friends) - 고객은 이 기능 또한 부드럽고 빠르게 구현되길 바랄 것이다. 그러면, 며칠 후에, 우리는 "빠름"이 의미하는 것이 10 밀리초 정도의 반응 속도인지 궁금할 수도 있겠다. 그러면 이러한 정보에 대해 위 2개의 기능 명세 사항에 중복하여 빠름의 의미를 넣어야 하는 것이다. 궁극적으로, 요구사항 문서가 점점 혼란에 빠지게 되는 것이 보이는가?

 따라서, 나는 당신이 기능과 품질 명세를 명확히 분리하여 문서를 작성하기를 강력히 추천한다.

요구사항과 추가 문서의 혼합
(Mixing Requirements and Supplementary Docs)

여기 위에서 언급했던 문제와 비슷해 보이는 예제가 있다:
 사용자는 모든 처리 내역이 담겨있는 PDF 형식의 보고서를 다운로드할 수 있다. 각 처리 내역은 ID, 날짜, 설명, 계정 그리고 총 지불이 표시된다.
 보고서에는 또한 요약본과 사용자 계정 정보가 담겨 있다.
 (User can download a PDF report that includes a full list of transactions. Each transaction has ID, date, description, account, and full amount.
 The report also contains a summary and a link to the user account.)

 이것은 명백히 하나의 문단에 2개의 명세 사항을 적시한 것이다. 먼저 첫 번째는 사용자가 PDF를 다운로드 받을 수 있다는 것이고 PDF 문서는 어떻게 구성되야 하는 지가 두 번째인 것이다. 첫 번째는 기능 명세이며 두 번째는 추가 문서(혹은 부록)에 적혀있어야 하는 것이다.

 일반적으로, 기능 명세는 매우 짧아야 한다: "사용자가 다운로드한다.(user downloads)", "사용자가 저장한다(user saves)" 혹은 "클라이언트가 요청하고 응답받는다(client requests and receives)"와 같이. 만일 당신의 문장이 길어진다면, 그건 뭔가 잘못된 것이다. 이럴 땐, 길어진 문장을 쪼개서 추가 문서에 옮겨보시길.

측정할 수 없는 품질 요구사항
(Un-measurable Quality Requirements)

내가 말하고 싶은 것은 이것이다:
 신용카드 번호는 암호화되어야 한다.
 (Credit card numbers must be encrypted.)
 앱은 2초 이내에 켜져야 한다.
 (The app should launch in less than 2 seconds.)
 각 웹페이지는 500 밀리초 이내에 보여야 한다.
 (Each web page must open in less than 500 milliseconds.)
 사용자 인터페이스는 요청에 반응해야한다.
 (User interface must be responsive.)

 지난 몇 년동안 해온 수 많은 프로젝트에서 위와 비슷한 예제들을 훨씬 더 많이 찾을 수 있었다. 그것들은 모두 같은 문제를 가지고 있었는데, 바로 실질적으로 테스트하고 측정하기 매우 어렵다는 것이다.

 맞다, 어렵다. 그리고 어렵다는 것은 대부분 많은 요소에서 확인된다. 위 예제를 다시 보자: "앱은 2초 이내에 켜져야 한다.(The app must launch in 2 seconds.)" 어느 기기에서? 사용자 프로파일 안의 데이터를 얼마 만큼 읽으면서? "켜지다(launch)"의 의미가 무엇인가; 프로파일 로딩 시간까지 포함되어 있는 것인가? 만일 켜질 때 문제가 발생한다면? 시간은 어떻게 카운팅하는가? 이 같은 질문들이 수도 없이 나올 수 있다.

 만일 질문한 것에 모두 답한다면, 명세사항 하나로 페이지 하나를 다 채울 수도 있을 것이다. 아무도 그것을 바라지 않지만, 측정할 수 없는 요구사항을 가지고 있다는 것은 페이지 하나를 다 채우는 것보다 더 큰 문제가 될 수도 있다는 것을 명심하길 바란다.

 다시 한 번 말하지만, 쉬운 것은 아니다. 하지만 필요하다. 모든 품질 명세사항에 대해 모호하지 않도록 확신할 수 있어야 한다.

구현 지시
(Implementation Instructions)

아래 예제는 아주 흔한 문제점을 보여준다:
 사용자는 페이스북 로그인 버튼을 통해 인증 받으며 우리는 사용자 이름, 아바타 그리고 이메일을 데이터베이스에 저장합니다.
 (User authenticates via Facebook login button and we store username, avatar, and email in the database.)

 이것은 미관관리(micromanagement)이며 요구사항 분석가가 프로그래머에게 절대 해서는 안되는 것이기도 하다. 당신은 기능이 어떻게 구현되어야 하는지 프로그래머에게 말해서는 안 된다. 사용자가 페이스북을 통해 로그인할 수 있길 원하는가? 그럼, 그렇다고 적어라. 당신은 버튼을 클릭했을 때 어떤 일이 벌어지는 지에 정말로 관심이 있는가? 정말로 데이터베이스에 무엇을 저장할 것인지가 궁금한가? 만일 데이터베이스 대신 파일을 쓰면? 그것이 당신에게 그토록 중요한가?

 나는 그렇게 생각하지 않는다. 아주 아주 드문 경우에 중요할 수도 ... 하지만, 대부분의 경우에는 미관관리일 뿐이다.

 요구사항 명세서는 제품을 위해서 어떠한 것이 이루어져야 하는 지만 명시되어야 한다. 나머지는 우리, 프로그래머의 몫이다. 어떤 데이터베이스를 쓰며, 버튼이 어디에 위치에 있고 어떤 정보를 저장할 것인지는 우리가 결정할 일이다.

 만일 당신이 특정 제약들 때문에 신경을 써야한다면, 그렇다고 적어라. 하지만, 프로그래머에게 어떻게 구현하라는 지시 없이 차라리 아래와 같이 품질 명세 사항으로 말해주길 바란다.

 로그인 페이지는 아래와 같이 보여야 한다.(사진 첨부)
 우리는 추후 사용을 위해 이메일 정보를 저장해야 한다.
 (Login page must look like this (screen attached).
 We must store user email locally for future needs.)

 요구사항 명세에 관해서는 나는 뭐라 할 수 없다, 하지만 구현 지시에는 강력히 반대하는 바이다.

사용자 관점 부족
(Lack of Actor Prospective)

아래 예제를 보자:
 PDF 보고서는 요청될 때 생성된다. 보고서는 다운로드하거나 계정에 저장할 수 있어야 한다.
 (PDF report is generated when required. It is possible to download a report or save it in the account.)

 여기서의 문제는 "누가" 하는지가 없다는 것이다. 기능 자체는 깔끔하게 설명되어 있지만, 누가 하는 지는 명확하지 않다. 주어는 어디에 있는가? 어디에서 어떤 것이 일어나는 스토리란 말인가? 정작 기능이 구현되기 위해서 프로그래머에게 진짜 필요한 것이 빠져버린 것이다.

 기능을 설명하는 가장 좋은 방법은 사용자 스토리(User Stories)이다. 그리고 좋은 사용자 스토리는 항상,...흠..추측컨대, 사용자를 가지고 있다. 그것은 항상 뒤에 동사가 따라오는 "사용자는.."으로 시작한다. 사용자는 다운로드한다, 사용자는 저장한다, 사용자는 클릭한다, 인쇄한다, 삭제한다 등등.

 사용자가 꼭 사람일 필요는 없다. 시스템일 수도, RESTful API Client일 수도, 데이터베이스일 수도 있다. 하지만 항상 주체는 있다. "... 다운로드할 수 있다.(It is possible to download...)"는 사용자 스토리가 아니다. 근데, 누가 다운로드할 수 있는 건가?

필요없는 말, 잡음
(Noise)

아래 예제는 어떤가:
 우리의 가장 큰 관심은 성능과 유저 인터페이스이다.
 (Our primary concern is performance and an attractive user interface.)

 이것은 잡음이다. 이 문서의 독자로써, 나는 투자자도 사용자도 아니다. 우리는 프로그래머이다. 나는 당신의 "주요 관심"은 신경쓰지 않는다. 프로그래머의 일은 기능을 구현하는 것이며 그럼으로써 요구사항 명세와 제품을 일치시키는 것이다. 만일 성능이 당신의 주요 관심이라면, 측정 가능하고 테스트 할 수 있는 명세 사항을 작성해주길 바란다. 나는 제품이 해당 명세 사항을 만족할 수 있도록 구현하겠다. 만일 그러한 명세 사항을 작성하지 못하겠다면, 부디 우리와 관련없는 정보로 스팸은 자제해주길.

 나는 당신의 걱정, 믿음 혹은 의도를 공유하고 싶지 않다. 그건 당신 일이다. 그리고 그러한 것들을 측정할 수 있고 테스트 가능한 명세 사항으로 번역하는 것이 바로 당신이 돈을 받는 이유이기도 하다. 만일 당신이 이걸 못하겠다면, 그건 당신 문제이고 당신 잘못이다. 나까지 끌여들이지 말아주시길.

 사실, 아주 자주 ... 잠깐, 아주아주 자주 일어나는 일이다. 아닌가, 거의 항상인가. 잠깐만, 그냥 항상이다! 그렇다, 요구사항 명세서는 항상 필요없는 말로 가득차 있다. 그 중 몇몇은 좀 덜 할 수도 있지만, 몇몇은 매우 심하다. 나는 이것이 게으르고 프로페셔널하지 않은 작성자들의 증상이라고 믿는다. 대부분, 그냥 게으른 것이지만.

 그들은 기능 명세에 대한 그들의 걱정, 생각, 의견, 의도 그리고 주관을 생각하고 적시하길 원하지 않는다. 그들은 단지 그것들을 문서에 넣고 프로그래머가 알아서 해결책을 제시해주길 희망한다. 좋은 프로그래머는 무엇이 좋은 성능을 의미하는 지 알아야 한다, 그렇지 않은가? 자, 그들에게 성능은 우리에게도 관심사라고 말해주고, 그들이 이해할 수 있도록 해줘야 할까?

 노우! 그러면 안 된다. 당신의 일을 똑바로 하고 프로그래머가 그대로 할 수 있도록 문서를 작성해 달라고 해야한다.

 그리고 우리, 프로그래머는 이런 문서를 절대 용납해서는 안 된다. 우리는 그들에게 거부 의사를 밝히고 문서를 다시 작성하여 잡음을 없애주길 요청해야 한다. 나는 만일 잡음이 많은 요구사항 명세서를 가지고 있다면 일을 시작조차 하지 않을 것을 추천한다.

작동할 것이다, 작동할 필요가 있다, 작동해야 한다.
(Will Work, Needs to Work, Must Work)

 여기 또다른 매우 흔한 실수가 있다.:
 API는 JSON과 XML을 지원할 것이다. 두 포맷은 모든 데이터 항목을 지원해야 한다.
 XML은 XSD 스키마에 의해 검증되어야 한다.
 (The API will support JSON and XML. Both formats must fully support all data items.
 XML needs to be validated by XSD schema.)

 혼란스럽지 않은가? 위 예제에는 3가지의 서로 다른 관점이 존재한다, 심지어 그 어느 것 하나도 요구사항 명세서와는 어울리지도 않는다. 명세서는 마치 실제로 존재하는 것처럼 제품을 묘사해야 한다. 명세서는 마치 메뉴얼, 튜토리얼 처럼 읽혀야 한다.

여기 다시 쓰여진 것을 보자:
 API는 JSON과 XML을 지원한다. 두 포맷은 모든 데이터 항목을 지원한다.
 XML은 XSD 스키마에 의해 검증된다.
 (The API supports JSON and XML. Both formats fully support all data items.
 XML is validated by XSD schema.)

 차이점이 보이는가? 모든 "해야한다.", "필요하다." 그리고 "할 것이다."는 단지 문서에 대한 의심만 더 할 뿐. 이 문서의 독자에게 "API는 지원될 것이다.(the API will support)"는 "언젠가, 아마도 다음 버전에서, 지원될 것이다."와 같이 읽힌다.
이것은 당신이 의도한 것이 아닐 것이다, 그렇지 않은가? 확실하다면, 확실하게 적어라. API는 지원한다.(The API supports).

--------------------------------------------------------------------------------------------------------------------------------

 여기에서 중요한 것을 놓쳤을 수도 있지만, 위에 제시한 것들은 확실히 우리, 프로그래머들을 화나게 하는 것들이다...
나는 우리 시스템 분석가에게 간단한 가이드로서 이 글을 보여줄 것이다.