写点什么

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

  • 2020-02-13
  • 本文字数:2374 字

    阅读完需:约 8 分钟

花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-02-13 09:3220382

评论 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
回复
没有更多了
发现更多内容

SpringBoot-技术专题-如何提高吞吐量

码界西柚

物化视图如何快速完成数据聚合操作?

VoltDB

数据库 数据分析 sql

区块链技术应用开发、区块链版权应用搭建解决方案

t13823115967

区块链技术应用开发 区块链版权搭建解决方案

距离 2020 年结束不到2个月,字节跳动员工却在闲鱼卖内推名额登上热搜!

Java架构师迁哥

2020年9月北京BGP机房网络质量评测:天地祥云木樨园力压群芳终进前三

博睿数据

机房 评测

架构师训练营 1 期 - 第十周 - 模块分解

三板斧

极客大学架构师训练营

.net5发布,.NET会就此“支棱起来”吗?

Philips

.net 敏捷开发 .net core

私域流量运营03|衡量企业运营视频号的4个关键指标

Linkflow

客户数据平台 客户画像 视频号

前端高效开发必备的 js 库梳理

徐小夕

Java GitHub 大前端 js

26张图带你彻底搞懂volatile关键字的底层实现

小牛

volatile 后端 多线程 并发 Java 分布式

区块链医疗、电子票据应用落地开发解决方案

t13823115967

电子票据 区块链医疗

五年时间完成业务数字化转型,华为如今做得怎么样了?

华为云开发者联盟

效率 提升 数字化

接口测试和功能测试的区别

测试人生路

软件测试

从微服务应用于技术栈,了解华为云微服务应用

华为云开发者联盟

微服务 服务 云技术

跨语言跨平台聚合OpenAPI文档从来没有这么简单过

Knife4j

微服务 OpenAPI Knife4j Knife4jAggregation

从数据仓库双集群系统模式探讨,看GaussDB(DWS)的容灾设计

华为云开发者联盟

数据库 数据仓库 数据

2020年10月北京BGP机房网络质量评测:流水的其他,铁打的世纪互联?

博睿数据

机房 评测

京东集团技术委员会主席周伯文:推进产业数智化发展需要技术和生态两把“桨”

京东科技开发者

区块链 大数据 AI 物联网,

Mybatis日志功能是如何设计的?

Java架构师迁哥

MySQL-技术专题-LEFT JOIN避坑指南

码界西柚

数字化时代App们将何去何从?

FinClip

中小型企业创业的福音

anyRTC开发者

创业 音视频 WebRTC RTC

京东智能客服品牌焕新:“言犀”亮相2020京东JDD大会

京东科技开发者

大数据 AI 知识图谱

美妆行业:低代码全域客户数据采集,赋能数据化运营

Linkflow

营销数字化 客户数据平台 CDP

淘宝直播技术干货:高清、低延时的实时视频直播技术解密

JackJiang

音视频 即时通讯 视频编码 直播技术

服务器选择要注意什么?

德胜网络-阳

MyBatis-技术专题-拦截器原理探究

码界西柚

以 Kubernetes 为代表的容器技术,已成为云计算的新界面

阿里巴巴云原生

云计算 Kubernetes 容器 云原生

阿里内部11月最新出台Spring Cloud架构设计+程序开发+运维部署

Java架构追梦

Java 阿里巴巴 架构 微服务 SpringCloud

uml图中各种线的关系

胡云飞

极客大学架构师训练营 UML

第十周 模块分解 总结

三板斧

极客大学架构师训练营

花40多万开发的App扰乱了一场大选,几乎毁了一家公司_语言 & 开发_李冬梅_InfoQ精选文章