写点什么

花 40 多万开发的 App 扰乱了一场大选,几乎毁了一家公司

2020 年 2 月 13 日

花40多万开发的App扰乱了一场大选,几乎毁了一家公司

事件回溯


近日,美国爱荷华州召开了民主党总统候选人初选大会。过往,都是用纸质投票的方式进行,这次希望采用一款名为“IowaReporterApp”的电子计票应用程序,该程序最初被认为可在投票 2 小时后快速公布结果。但是,这款应用程序在使用时发生故障,导致大规模混乱,直到第二天还未能公布结果。


该应用程序由 Shadow 公司开发,前后花费了四个月时间,成本为 63182 美元(约合人民币 44 万元),基于 React Native 构建。这家公司还曾替政府建过网站、设计数字营销活动或打造各种工具。据专家称,IowaReporterApp 应该有如下基本功能:


  • 当选区主席用选区识别码(PIN 码)经过双重认证登陆到 App 后,就会浏览到关于如何进行初选的基本信息。

  • 选区主席需要输入参与初选的总人数;

  • 选区主席需要分别输入第一轮和第二轮初选投票总数。App 会计算出每个候选人应该获得多少代表名额。随后,App 会计算出每个候选人应该获得多少选票。


据外媒报道,Shadow 在 1 月中旬就曾邀请人员测试过该程序,但必须通过 Android 的程序测试平台 TestFairy 来下载 App,一家媒体在两支 Android 手机上下载及安装了 IowaReporterApp,但只有一支手机上的可正常启动。Shadow 也在苹果的测试平台 TestFlight 上部署了该程序,但很多人反馈下载或安装该程序都很困难。



有趣的是,美国公共广播电台(NPR)曾质疑通过全新的 App 进行选举的方式可能会暴露公众隐私,当时民主党不愿揭露 IowaReporterApp 的安全机制设计,担心公布相关细节反而会让黑客有机可趁。如今看来,IowaReporterApp 在很多方面的表现都很差。


问题出在哪?


公司体量小、缺乏经验


这不是第一次将移动应用程序用于选举中,以前之所以没有引发太多关注,是因为一切都运行良好,实际上,2016 年的选举中就曾使用过具有类似功能的移动应用程序。


2016 年为选举提供 App 服务的公司联合创始人兼联合 CEO Rodney Guzman 说道:


“当我目睹这一切发生时,简直像做了一场噩梦。这个工作如果由我们来完成就不会发生这种事。”


2016 年,这项工作是由微软外包商 InterKnowlogy 公司完成的,InterKnowlogy 公司基于微软技术为选举构建 App 和其他数字化基础设施。InterKnowlogy 在应用程序开发方面拥有近二十年的经验。相比之下,2020 年初选的应用程序是由一家名不见经传的新公司 Shadow 打造的,该公司以前从未接触过如此大规模的需求。


构建过于匆忙


2016 年 App 和 2020 年 App 其实很相似,虽然功能并不复杂,但同一个 App 的多个版本需要服务于不同的设备和系统。更重要的是,这些版本在首次使用时就要表现出完美的性能,没有时间去做更新和改进。


由于 2020 年 App 供应商不像之前的团队那么经验丰富,并且有足够的资金和人力支持。据了解,2016 年的 App 构建筹备了约一年时间,前三个月进行产品设计,与需求方会面,对 App 的可用性不断研磨,而这三个月初期设计阶段差不多赶上了 Shadow 整个产品构建周期。



对于外界质疑的该款 App 到底花了多长时间来构建这一问题,Shadow 首席执行官 Gerard Niemira 表示,“我们从 8 月开始接洽,并自那时起开始收集需求并着手设计,因此 App 的构建周期基本上是从 2019 年 8 月到 12 月。因为收集需求耗费了比较长的时间,所以直到交付期临近时才有了最终版本。”


根据国家记录显示,该 App 是在几个月内构建的,成本为 63182 美元,对于应用在如此重要场合的一款 App 来说,四个多月的构建周期真的不算长。


“我作为一名工程师,听到这种消息感觉有点疯狂,”InterKnowlogy 软件工程师 Michael Gramley 说道。“我们不能在两三个月内建立一个稳定的平台。因为我们需要花费大量时间来测试所有内容。如果真有人这么做了,那最终失败的可能性非常大。”


缺乏训练和测试


在故障发生后,请来了 6 位网络安全和应用开发专家来对 App 进行分析。


Android 资深开发人员 Kasra Rahjerdi 表示,该应用程序包含默认的 React Native 元数据,并且“只在原有的框架上添加了自己的代码”。换句话说,该 App 就像一个不会编码的人机械地按照教程完成构建。Rahjerdi 表示,他们从初级入门包开始操作,只是在入门包上添加了一些东西。我甚至有一种感觉,觉得这个就像是通过谷歌搜索操作说明,然后一步步根据操作说明构建的 App。


Shadow 首席执行官 Gerard Niemira 在接受媒体采访时表示,该应用程序设计很简单。他称这种 App 不需要过于复杂,只需要帮助选区主席做数学运算,并以最快的速度获得票选结果,这是一个相对简单的 App,原理就像计算器一样。此款 App 是可靠的,来自该 App 上的的数据是可靠的,在 App 上完成的数学运算也是可靠的,我们在 App 上收集到的所有结果都是正确的,并且已经得到验证。



Gerard Niemira 的言外之意是:


数据和结果都是正确的,只是,速度慢了不少。


然,这款 app 的设计初衷,恰恰是为了提高投票结果的统计效率。


除了处理数据的速度不尽如人意外,在被问及 App 的安全性测试时,Niemira 解释道,我无法透露进行安全性测试公司的名字,但我们确实进行了独立审核。该审核时某些配置项的确出现了问题,但是我们已经在初选前将这些配置项进行了很好地修复。


最终结果


最后,该州在一份声明中称:选举数据和结果已经从 App 中导出,并且正在通过纸质记录进行核实。主席 Tom Perez 表示,该应用程序不会在任何初选或预审中再次使用。目前,该 App 的整个后端已经关闭,无法通过它或从公司服务器访问任何信息。App 出现故障次日,美国国土安全部表示愿意帮助分析该款 App 的安全性,但该提议被拒绝。


结语


63182 美元的生意哪怕对于一个体量如 Shadow 的公司来说也不算是笔大买卖。但是,这笔生意的背后却潜藏着巨大的利润空间和机遇。Shadow 公司如果能为这次合作做好充足的准备,引起足够的重视,那么未来的发展将不可小觑。


今日讨论:


广大程序员,你们对这件事情有何想法?花费 40 万元,四个月的时间,构建这样一款 APP,难度系数高吗?


2020 年 2 月 13 日 09:3219527

评论 7 条评论

发布
用户头像
这是reactnative被黑的最惨的一次。
2020 年 02 月 15 日 21:10
回复
用户头像
顶一下
2020 年 02 月 14 日 20:26
回复
用户头像
典型的想花小钱,办大事,结果一地鸡毛。
2020 年 02 月 14 日 14:23
回复
用户头像
每月10万,一个设计2w,一个测试1w,一个主程3w,一个前端2w,一个产品2w
2020 年 02 月 13 日 14:38
回复
外包给中国(或者印度)团队应该还是够的,不然换成美刀就只能请一个全栈工程师开发4个月了(每月税前1.5w)
2020 年 02 月 13 日 14:40
回复
给国内开发前肯定够,程序开发并不复杂,并发考虑一下,1+1+1,3个人2月内搞定。
2020 年 02 月 13 日 18:16
回复
产品,设计和测试不用全时间投入,产品,设计主要在前期,测试在后期.. 所以投入最多20w,人家还得留点利润那..
2020 年 02 月 14 日 16:27
回复
没有更多了
发现更多内容

Java程序员月薪多少K才能在北上广买得起房?

Java架构之路

Java 程序员 编程语言

光大银行刘淼:基于华为云GaussDB(DWS) 数据仓库创新实践

华为云开发者社区

数据仓库 数据 huawei

EffectiveJava读书笔记-01-对象创建与销毁

wander

读书笔记 编程开发

区块链数字钱包技术开发,数字资产钱包

135深圳3055源中瑞8032

建筑行业区块链应用场景是怎样的

CECBC区块链专委会

区块链 行业资讯

架构师训练营第四周作业

郎哲158

架构师训练营第四章 系统架构总结

郎哲158

架构1期第四周作业1-大型互联网系统技术梳理

道长

极客大学架构师训练营

架构师训练营第三周作业

Wee权

4年Java经验,备战两月成功拿到美团、京东、字节offer

Java成神之路

Java 面试 算法 编程语言 面试程序员

区块链教育 丨 首批区块链专业新生正式入学

CECBC区块链专委会

区块链技术 区块链教育

Spring Cloud 微服务实践(7) - 日志

xiaoboey

kafka 微服务 Spring Cloud 日志 spring cloud stream

区块链支付系统开发公司,USDT承兑支付

135深圳3055源中瑞8032

程序员去外包真的不可取吗?

Java架构师迁哥

Nacos-技术专题-配置中心实现

李浩宇/Alex

31道Java核心面试题,一次性打包送给你

小Q

Java 学习 程序员 架构 面试

震精,京东T8工程师每天熬夜到天明,竟只是为一套编程实战文档

周老师

Java 编程 程序员 架构 面试

从联想ThinkStation工作站,窥见工具文明的新纪元

脑极体

从构建小系统到架构分布式大系统,Spring Boot2的精髓全在这里了

Java架构之路

Java 程序员 面试 Spring Boot 编程语言

数字货币交易所源码开发,交易所APP搭建

135深圳3055源中瑞8032

架构师作业第三周学习总结

Wee权

JDK 中的栈竟然是这样实现的?

王磊

Java 数据结构和算法

spring-boot-route(十)多数据源切换

Java旅途

Java Spring Boot

开源数据库这么香,为什么我们还要下功夫自研?

华为云开发者社区

数据库 开源 数据

区块链是一个不知道要解决什么问题的解决方案吗?

CECBC区块链专委会

比特币 区块链 银行

开源=免费?

Learun

深入分析CRM系统对现代企业的作用

Learun

来不及解释了,快上车!力软快速开发平台,助力企业搭乘万物互联的顺风车

Learun

PyFlink + 区块链?揭秘行业领头企业 BTC.com 如何实现实时计算

Apache Flink

flink

架构师训练营第1期第四周作业二

道长

极客大学架构师训练营

关于国际化语言 Intl

西贝

Java 前端 国际化 格式化

花40多万开发的App扰乱了一场大选,几乎毁了一家公司-InfoQ