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的详细文件,该文件链接到我们的证据以及对每个项目的回应。
我们的美国数字服务剧本回复