github:https://github.com/cgi-zahid/cgi-poc

應用程序:[https://mycalerts.com]
獲取管理員和样本最終用戶憑據
CGI使用以用戶為中心的設計技術,基於Sprint的開發工作流程以及現代和開放源的技術來設計和建立MycAlerts的現代發展工作流程,我們的AD型機組人員/管理型機組人員/管理型機組人員/管理型機組人員,iplot/firs fir/sciss comport fir/siscrips fore/scomply fir fir/sciss/sciss incorm firs fir,他們過去的通知。用戶可以根據其用戶個人資料中提供的街道安置和聯繫信息通過簡短消息服務(SMS)和電子郵件接收通知。 Mycalerts允許授權的行政用戶跟踪和可視化事件,並發送有關緊急事件和非緊急事件的通知。
我們從對RFI草案的審查開始。 CGI建立了我們的團隊,並開始了Sprint 0計劃。我們確定了我們將使用的技術架構和環境。我們部署了我們的標准開發人員工具和敏捷協作資源,以構建“ Hello World”應用程序(一個簡單的登錄頁面)來測試我們的技術堆棧和連續集成/連續部署(CI/CD)框架。
收到最終RFI後,我們的產品經理(PM)主持了原型分析會話。團隊聚集在一起,舉行了計劃和規模的會議,以評估每個原型的複雜性,團隊興趣和風險。我們的團隊非常熱情選擇了工作原型B。
根據初始用戶訪談,PM選擇了與CA用戶最相關的三個數據集。他選擇進行民意調查,以獲取以下自動緊急通知:野火(USGS Geomac的主動火災邊界服務 - 每15分鐘一次),洪水(河流儀 - NOAA的最新和預測服務 - 每6小時一次)和惡劣的天氣(NOAA的天氣危害服務 - 每15分鐘 - 每15分鐘)。
在開球時,我們的總理提供了他對原型和高級路線圖的願景,用於完成工作。團隊確立了角色和職責以及協作團隊協議。我們鞏固並建立了我們的團隊工作關係。使用路線圖和原型要求,團隊開發了一系列用戶故事。我們的總理將這些故事與UX/UI和技術基礎架構設置故事一起優先考慮,以建立我們的產品積壓。
我們的UX/UI設計人員通過使用角色訪談和調查來提早吸引用戶,從而促進了以用戶為中心的用戶驅動設計方法。我們利用AngularJS以及來自美國Web設計(USWDS)樣式指南的標準和組件來實現現代訪問的Web應用程序。我們還測試了ADA 508和WCAG 2.0合規性。我們利用了各個年齡,角色,經驗和背景的用戶。在Sprint 1期間,我們採訪了用戶,我們的結果很快就變成了電線流,利用響應式設計可容納台式機和移動平台。這些線流程是根據用戶輸入連續完善的。我們的金屬絲提供了視覺效果,將原型的外觀傳達給開發人員。除了最初的設計之外,用戶還通過可用性測試參與其中,並通過改進故事進行了評估和優先級,然後將這些故事添加到產品積壓中,以包含在隨後的衝刺中。
我們遵循了每週彈性週期的敏捷過程(圖1),每個週期都在星期三開始,結束了下一個星期二。
圖1-我們的敏捷過程
每個星期的Sprint儀式包括:站立 - 週一至週五 @ 8:45 - 9:00 AM由敏捷教練促進。開發團隊成員報告說,自上次會議以來完成的工作已經完成;下次會議之前計劃的工作和任何阻止者。敏捷教練和交付經理清除了確定的阻滯劑。站立為整個團隊的協調提供了一個很好的論壇。
積壓梳理 - 週一,我們的總理審查並重新確定了積壓項目。敏捷的教練和交付經理支持評論,並確認用戶故事與團隊的“現成定義”一致。
Sprint評論 - 週二早上,團隊在Sprint中介紹了PM的Sprint完成用戶故事,以進行審查和批准。批准的用戶故事與團隊的“完成定義”一致。
Sprint回顧展 - 週二早上,團隊反思了他們在最近完成的Sprint上的工具,流程和同行的表現。要求每個團隊成員確定他們想看到團隊開始做的一個改進特徵。他們希望團隊停止這樣做,一個他們希望團隊繼續下去。在敏捷教練的促進下,確定的開始/停止/繼續特徵被合併,團隊定義了下一步。
Sprint計劃 - 星期二下午,為PM和團隊進行了為期一個小時的會議,並就下一個Sprint的有效載荷進行了交互討論並商定。敏捷教練和交貨經理協調了衝刺中的物品的規模。 PlanitPoker.com用於故事估算。
有關團隊的視覺示例和我們的敏捷過程,請參見我們的團隊相冊。
隨著每次迭代,原型越來越與PM的願景以及用戶的需求保持一致。我們的高級路線圖包含了幾個用戶故事,最終未包含在工作原型中。其中包括針對iOS本地客戶端應用程序和本機推送通知功能的SPIKE研究。儘管兩者都不在發布的最低可行產品(MVP)中,但它們包含在產品積壓,架構文物和GitHub源代碼中。
在整個過程中,團隊能夠通過使用我們的Scrum板來協調工作和監視進度。我們使用JIRA在電子板(以及錯誤)上跟踪用戶故事,並在團隊房間內維護了一個物理板。我們將匯合處用於文檔共享和hipchat作為我們的團隊協作工具。跟踪指標,因此團隊了解他們的表現以及每次沖刺的潛在改進領域。指標向團隊展示了他們的發展速度,技術積壓以及每個衝刺實際上實施了哪些故事點。
對於每個技術決策,我們都考慮了開放的選擇,從而產生了主要開源的堆棧。我們的技術目標是基於瀏覽器的現代Web應用程序,但我們還研究了iOS上本機移動應用程序的可能性。
圖2 - 我們的技術堆棧
從Devops的角度來看:
我們在Microsoft的Azure基礎架構(IAAS)解決方案上測試並部署了原型。我們使用Azure的監視解決方案進行連續的基礎架構監視,包括網絡,以及用於連續應用程序性能監視的新遺物。我們使用關鍵性能指標(KPI)數據來微調我們的基礎架構解決方案和應用。
我們的解決方案使用github記錄了我們的公共GitHub存儲庫中的代碼和單元測試提交。我們的GitHub結構具有主和集成分支以及特徵分支。單個故事的發展是在當地環境中的特徵分支中完成的。在檢查代碼之前,開發人員發出了拉動請求以觸發代碼審查。一旦批准了代碼審核,就將代碼合併到集成分支中,觸發連續的集成過程。
圖3顯示了使用我們的CI/CD流程從開發到生產的工具視圖和高級代碼遷移。
圖3 - 連續集成和部署(工具) 
Jenkins從Github檢索了代碼,構建了應用程序並執行了單元測試。如果所有單元測試通過,Docker創建了一個分發圖像。我們採用了一種調節的CD方法來進行測試環境,以避免干擾正在進行的功能測試。根據需要容納臨時部署。部署構建進行測試後,我們的功能測試套件(使用硒)會自動運行。
圖4 - 連續集成和部署(過程視圖) 
這是我們在方法中遵循的步驟的概述:
一個。開發人員使用Docker文件設置其本地開發環境,以模仿操作環境,並從GitHub Master Branch(步驟0)創建特徵分支。
b。開發人員創建單元測試(步驟1),並編寫適當的源代碼(步驟2)來實現用戶故事/功能。
c。要合併單元測試和源代碼,開發人員提交了拉動請求;同行開發人員觸發代碼審查;審稿人批准/否認合併到集成分支;最終,開發人員解決了代碼審查觀察結果。一旦批准了代碼審核,功能分支將合併到集成分支(步驟4)。
d。測試人員創建自動化功能腳本(步驟3),該腳本在集成分支中合併(步驟4)。
e。根據預定的時間表,詹金斯(Jenkins)編譯了源代碼,所有單元測試均自動執行(步驟5)。
f。如果單元測試失敗,則會發送有關故障的通知,並且開發人員將其修復在通訊功能分支(步驟15)。步驟4和5重複直到單元測試通過。
g。單元測試通過後,詹金斯(Jenkins)執行Docker文件來為UI和後端構建Docker圖像(步驟6)。
h。 Docker將圖像推到Azure註冊表(步驟7),然後將它們部署到自動執行功能測試的測試環境中(步驟8)。
我。如果功能測試失敗,則發送通知(步驟14),開發人員可以解決問題(步驟15)。步驟4、5、6、7和8重複直到功能測試通過。
j。一旦功能測試成功,就會向成功的測試執行發送通知(步驟9)。
k。質量檢查執行臨時/手動測試。如果這些失敗,則將通知開發人員解決該問題(步驟15)。步驟4、5、6、7、8、9和10重複直到臨時測試通過。
l。誤差固定後,集成分支將與主分支中的生產標籤合併(步驟11)。
m。最後,將用於測試的圖像部署到生產環境中(步驟12)。
我們的源代碼結構化遵循我們的分佈式體系結構以及用於實施它的軟件。前端存儲在Angular文件夾中,後端存儲在Dropwizard文件夾中。我們還具有用於Selenium文件夾中的自動功能測試的文件夾。
UI是使用AngularJS構建的。在Angular文件夾中,App文件夾包括圖像,語言,級聯樣式表,腳本和視圖的子文件夾。腳本文件夾包含控制器,工廠和服務。 Controllers文件夾依次託管JavaScript文件,而視圖文件夾包含HTML文件。單位測試與測試文件夾中的代碼分開保持。
前端使用Rentful API與後端進行通信。調用服務的前端代碼位於腳本文件夾下的服務子文件夾中。
應用程序後端實現業務邏輯,與外部服務通信,發送通知並與數據庫進行交互。後端是使用Dropwizard實施的,該dropwizard提供了一個帶有休息和Junit支持的Java框架。業務邏輯和端點在資源文件夾中,服務文件夾中的實現。
該應用程序還實現了外部API包裝器(此處實現)以從外部數據源檢索數據。
單位測試位於測試文件夾中。
該應用程序使用Hibernate與關係數據庫(MySQL)通信。我們使用標準JAXB Bean驗證進行數據驗證。數據訪問對象和模型對象位於DAO文件夾中。
一個。分配了一(1)個領導人,並賦予該人的權力和責任,並對提交的原型的質量負責
在RFI評估期間,CGI根據其技術和管理經驗選擇了產品經理(PM)。 CGI賦予了PM最終決策原型的設計和開發。
b。組建了一個多學科和協作團隊,至少包括附件B:PQVP DS-AD勞動類別描述中五(5)個勞動類別類別
在總理的領導下,CGI組建了一個具有各種技術和敏捷能力的多學科團隊。
我們的團隊:
c。通過將人們包括在原型開發和設計過程中,了解人們需要什麼;
CGI遵循以用戶為中心的方法來設計和開發原型。我們的UX/UI設計師通過使用角色訪談和調查來儘早吸引用戶。訪談結果很快變成了線流。根據用戶調查以及與用戶的可用性測試對線流程進行了完善。線流提供了一種快速,視覺上的方式,可以與開發人員交流所需的原型外觀和感覺,因此PM批准了最初的故事,開發就可以開始。
我們應用了設計技術和工具,包括角色訪談,線流開發,可用性測試和精益UX,以開發我們的UI。為了支持響應式瀏覽器的界面,我們利用US Web Design(USWD)的指南來獲得現代網絡標準和AngularJS。應用這些標準以及用戶的輸入,使我們能夠構建一個簡單且直觀的導航和使用的原型。我們還使用自動化工具測試了自適應讀者支持和其他低視力選項,還測試了ADA 508和WCAG 2.0合規性。
d。至少使用三(3)個“以用戶為中心的設計”技術和/或工具;
我們使用角色訪談,金屬絲和可用性測試作為我們的主要工具,為我們的原型設計設計,該設計側重於用戶的需求和需求。
e。使用github記錄代碼提交;
可以在github中查看提交:https://github.com/cgi-zahid/cgi-poc
f。用Swagger記錄了RESTFUL API,並提供了指向Swagger API的鏈接;
使用REST API完成了與中間層的所有通信。中間層使用JAX RX暴露了REST API,並以誇張的形式記錄下來。
g。遵守《美國殘疾人法》第508條和WCAG 2.0;
作為我們可用性測試的一部分,我們測試了508和WCAG 2.0合規性。我們使用自動測試來測試可讀性和低視力。作為積壓過程的一部分,我們解決了錯誤。評估了其他測試結果,以確定將哪些添加到積壓列表中,以及不適用於我們的原型的結果。
我們將ACTF Adesigner用於508測試。
h。創建或使用設計樣式指南和/或模式庫;
UX/UI使用美國Web設計標準創建了樣式指南。我們的配色方案是根據加利福尼亞州的顏色選擇的,並由用戶反饋批准。應用美國網絡設計標準以及用戶的輸入,使我們能夠構建一個簡單且直觀的導航和使用的原型。
我。與人進行了可用性測試;
作為以用戶為中心的方法的一部分,我們將可用性測試納入了流程。可用性測試是通過對線框上的用戶調查以及在整個衝刺中測試我們原型的用戶的反饋進行的。 PM和UX Designer評估了可用性測試的反饋,以確定在積壓中包含的內容。根據PM方向,創建了,優先考慮新故事並將其放在我們的積壓列表中。
j。使用了一種迭代方法,反饋理解了後續的作品或原型的版本;
在每個衝刺中,從產品經理,可用性測試人員那裡收到的輸入以及在測試期間確定的缺陷進行了評估,優先級並將其納入積壓術中,這是我們的迭代方法的一部分。每次演示,原型變得越來越與PM的願景以及用戶的需求保持一致。
k。創建了在多個設備上工作的原型,並提出了響應式設計。
我們的代碼一直在使用多個設備進行測試,並與多個Web瀏覽器一起使用。此外,我們的代碼已使用Apple和Android設備進行了測試。
我們測試了:
l。無論建築層如何(前端,後端等),使用至少五(5)個現代和開源技術;
我們使用了以下六(6)個現代和開源技術:
提供了我們所有技術的清單:技術清單。電子表格上綠色突出顯示的行是現代和開源技術。
m。將原型在基礎架構上部署為服務(IaaS)或平台作為服務(PAAS)提供商,並指出了他們使用的哪個提供商;
我們將Azure用作IAAS提供商。
n。為其代碼開發了自動化單元測試;
在將代碼檢查到功能分支開發人員中之前,請進行拉動請求以觸發代碼審核。一旦批准代碼審核,代碼將合併到觸發連續部署過程的集成分支中。
o。設置或使用連續的集成系統來自動運行測試,並將其代碼不斷地部署到IAAS或PAAS提供商;
我們使用Jenkins進行連續整合。它從github獲取代碼,並編譯並執行測試。如果代碼通過測試,則Docker會創建圖像。將圖像部署到系統測試環境中,其中使用硒執行端到端功能測試。
p。設置或使用的配置管理;
Azure容器註冊表用於存儲和管理我們的Docker圖像,使我們能夠管理配置
問。設置或使用連續監視;
Azure和新遺物用於不斷監視環境的健康和應用
r。將其軟件部署在開源容器中,例如Docker(即使用操作系統級虛擬化);
我們使用Docker部署了軟件
s。提供了足夠的文檔,可以在另一台計算機上安裝和運行其原型;
以下是我們安裝說明的鏈接。
指示
t。用於創建和運行原型的原型和基礎平台是公開許可和免費的。
我們使用公開許可和免費的平台
工具列表
我們的原型設計和開發過程遵循並符合美國數字服務劇本中概述的許多標準。我們提供了有關GitHub的詳細文件,該文件鏈接到我們的證據以及對每個項目的回應。
我們的美國數字服務劇本回复