项目 内容
课程:北航2020春软件工程 博客园班级博客
作业:阅读并撰写博客回答问题 软件案例分析
我在这个课程的目标是 全面地评价一个软件
这个作业在哪个具体方面帮助我实现目标 明确软件开发过程中哪些方面需要注意

选择产品

选择的待分析产品:

CSDN APP

智能表单信息抽取识别

第一部分:调研,评测

CSDN APP体验

我在ios13系统的iphone7上,打开了CSDN的app。首先就可以看到,其界面是相对简洁的;首页的主要浏览内容是热门的帖子和博客,涵盖了技术、生活、感想、新闻等与IT行业紧密相关的各个方面。同时还有“学习”栏目可以加入付费的课程,“Blink”栏目可以关注大V们的动态……

我尝试着阅读首页的一些文章,使用了十几分钟后,产生了以下几点感受:

  • 功能:app并不是遇到问题后,快捷的查找解决办法的工具;而适合闲来无事的时候,在琐碎的时间里翻阅文章,长见识,做一些知识储备,更具生活性
  • 界面:看文章中的代码体验很难受,竖屏时屏幕宽度只有十几个字符,横屏时屏幕高度也受到限制,而且文本太小费眼睛。相比电脑,这点确实是手机的先天不足,无法弥补
  • 界面:文章最下端有非常多的相似文章的链接,导致要跳到文章末尾时十分不便,可能从屏幕最下端要往上拉好几个屏幕才能看到文章末尾的位置
  • 界面:APP动画比较流畅,查看文章时体验尚可,按钮设计不易误触
  • 数据量:图中可以看到,除了文章标题之外,下面有文章大约50字的节选可以带我们一窥文章内容。但是像图中《生成随机数的方式你选对了吗》这样一篇文章,其摘要部分居然是版权而不是对标题的解释,实属无效信息。我认为每篇文章发表前都可以增加一个大约50字的摘要,由作者填写,展示时附在文章标题下,以便游客了解文章大致内容。

在使用的过程中,我还发现了一些小bug:

  1. 切换到“我的”(见上图右下角)视图时,页面位置并不会自动定位到页面最上方,而是定位在一个偏中下的位置,而遮挡了头像等关键个人信息。如果我想要登录,还需要手动把屏幕往上拉。个人怀疑是因为软件在不同的手机上的适配情况不同导致的。

  2. 翻看评论时不能通过左滑退出,只能通过往下滑和点击X按钮退出评论区。如果看完最后一条评论时候,就必须往回滑动到所有评论的顶端之后再下滑以退出评论区;或者点击左上角的X按钮(但其实单手使用的时候按钮还是比较远的)。

CSDN APP打分

类别 描述 评分 (满分 10 分, 良好 6 分, 及格 4 分,聊胜于无 1 分, 很差 -3 分)
功能 核心功能 分析三个核心功能,功能设计和质量。 9
细节 有什么为用户考虑的细节? 6
用户体验 当用户完成功能时,不干扰用户 (例如: 是否不断弹出不相关广告)。 10
辅助功能 一些辅助功能如皮肤等 4
差异化功能 这个软件独特的功能. 它对用户的吸引力有多大? 7
软件的效能 占用内存, 启动速度, 内存泄漏情况 9
体验 软件的适应性 在联网/断网, 大小屏幕, 没有鼠标的情况下都可以顺畅操作. 和不同平台的软件能流畅协作 9
成长性 记住用户的选择, 适应用户的特点,用户越用越方便 使用时间不够长,缺乏体验
用户有控制权 系统状态有反馈,等待时间要合适。关键操作有确认提示,有明确的错误信息。 6

如果想要通过app查阅资料的话,效率并不是很高,但是如果想要通过app来做知识储备,拓宽技术视野,了解一些行业前景和故事的话,相信app还是能够很好的满足要求,尤其特别适合码农上下班挤地铁的时候看。

OCR体验

Microsoft这个OCR-Form-Tools主要是用于识别表单中的信息,比如一张收据中的客户名、交易额、交易时间、卡号等等信息,前端在React-Redux框架下采用了Typescript编写。

搭建好环境之后,根据老师提供的数据库地址(Azure blob container)和表单识别模型服务(Form Recognizer service),本地的WEB前端连接上了远端的数据服务器。

在运行之前,首先需要标记一些训练集

可以看到我们将一张收据中的有关信息用不同颜色的框将其框起,并且赋予不同的标签Tag,比如客户名Name、客户邮箱Email、客户地址Address、交易额Amount等等。

在这个页面,首先我们需要点击右边的绿色Train按钮,让远端的模型加载上一页我们所标注的标签Tag进行训练。训练后我们得到一个ID为fdf40fdd-e809-4967-b1ee-763ca13507db的模型,以及该模型在训练集上的表现(此时我们可以看到它对于训练集的拟合程度是100%,能够识别出所有的标签)

Result页面我们可以上传一张自己的pdf文件,点击预测Predict白色按钮,我们刚刚训练好的模型将会对上传的pdf进行分析,并且返回给我们这张收据里面能够识别出的所有内容,比如客户名Name为Jamie Gonzales,客户的邮箱为jaimeg@outlook.com,客户的卡号Card Number为4867977021872331……

总的来说,程序的运行效果还是不错的,对于给定格式的pdf收据文件,能够很多好的分析出大部分的信息,非常有利于企业对交易进行自动化系统化的管理。

但是使用过程中,有几点缺点,仍然能够让用户感受到软件的开发尚未完成:

  • 使用卡顿,标注训练集的标签tag的时候,大约有1-2s的卡顿,似乎是因为每一个标注的操作都立即与服务器同步?我的建议是,让标注作为本地的功能而不是一举一动都传服务器。比如设计一个“标注状态”专用于标注,在用户标注完之后,可以退出该状态,然后再统一将所有的操作都上传。

  • 用户暂时没有办法上传自己的数据集。由于没有开放Azure blob container仓库,前端也没有提供响应的接口,用户没有办法使用自己的收据格式。建议添加这样一个接口和相应的文件管理功能,能够按类别分类收据,甚至可以训练模型对收据进行自动的分类。

  • 模型的识别率有提高的空间,比如上图日期Date的数据,就很明显出现了异常:出现了12/11 11/20 20这样的重复识别的问题。

  • 没有对不同模型的管理功能。我们训练的模型似乎都是一次性的?

  • 导出json格式的时候,在我的环境下(archlinux x64, npm 6.14.3)必然会出现error

OCR打分

类别 描述 评分 (满分 10 分, 良好 6 分, 及格 4 分,聊胜于无 1 分, 很差 -3 分)
功能 核心功能 分析三个核心功能,功能设计和质量。 8
细节 有什么为用户考虑的细节? 6
用户体验 当用户完成功能时,不干扰用户 (例如: 是否不断弹出不相关广告)。 9
辅助功能 一些辅助功能如皮肤等 6
差异化功能 这个软件独特的功能. 它对用户的吸引力有多大? 8
软件的效能 占用内存, 启动速度, 内存泄漏情况 6
体验 软件的适应性 在联网/断网, 大小屏幕, 没有鼠标的情况下都可以顺畅操作. 和不同平台的软件能流畅协作 9
成长性 记住用户的选择, 适应用户的特点,用户越用越方便 4
用户有控制权 系统状态有反馈,等待时间要合适。关键操作有确认提示,有明确的错误信息。 4

虽然OCR的评分看起来并不是那么好,那是因为本人以一个完整的企业软件作为标准来看待这款开发中的软件,确实吹毛求疵了点,不过也许能说明软件的一些不足之处吧。

第二部分:分析

使用此服务的所有功能,估计这个软件/网站/服务做到这个程度大约需要多少时间(团队人数6人左右,计算机大学毕业生,并有专业UI支持)。

  • CSDN APP

    如果是一个雄心勃勃的创业团队,团队成员6人都有激情有动力去做好这件事情,我估计大约需要6个月开发测试并且最终上线。其中基本功能的开发分为大约3周的需求分析、架构设计,6周主要开发和3周测试。增量开发同理需要3个月。

  • Form-OCR

    本人的冯如杯项目和这个项目有几分相似之处。都是采用typescript的react-redux开发前端,使用某种后端框架运行模型,对图片(或者pdf)进行分析。我的冯如杯项目在4个懒惰的程序员的工作下,开发时间大约为2个月;考虑到熟练的6人团体的的话,前端开发可以1个月内完成(不知道Form-OCR用什么模型来分析表单,所以不清楚后端开发的时间);同时前端如果采用React Hook等“偷懒”方式的话,效率应该还会更好一些。

分析这个软件目前的优劣(和类似软件相比),这个产品的质量在同类产品中估计名列第几

  • CSDN APP

    SegmentFault(思否)似乎web开发(包括前端后端集群等)的博文会比较多一些,其界面功能也更加简单简洁,比CSDN少了“朋友圈”、“打卡”,“任务”,“活动”等功能,多了问答的功能。技术色彩更强。

    itpub技术论坛的功能和CSDN类似,但是由于起步晚,其用户量和知名度明显不如CSDN。

    开源中国开源软件更加多一些,论坛偏向于开源软件的使用和修改。

  • Form-OCR

    暂时没有找到表单识别平台的相关工作

第三部分:建议和规划

首先,市场有多大?潜在的用户有多少?

  • CSDN APP

    IT行业市场之大,毋庸置疑。相信大家曾经或多或少都有在百度上查找一个bug原因的经历,排在最前面的很大概率就是CSDN上面的博客。作为中国最大的IT技术社区,CSDN的用户受众从小白到从业者再到研发者,受众如今已达千万人(参考:2017年IT行业从业人员已达1950万人)。

    那么APP呢?其实我认为,APP的潜在用户要远远小于这个数字。主要原因还是据我对身边人的观察,CSDN这样的技术社区大部分时间还是用来求助的:遇到问题时候,找到他人的解决办法;记录自己曾经犯下的错,帮助遇到同样问题的他人。如果不是真的热爱,并不是所有人都愿意长时间看他人帖子学习知识的。

  • Form-OCR

    市场同样也是相当的大。尤其对于每个公司的财务、对于银行前台,这绝对是一个福音。财务需要管理收据、银行前台需要录入客户的材料,乃至一切和收据、文件材料、银行水单等等有关的场景。预估潜在用户可达百万。

目前市场上有什么样的产品了,它们的优势劣势在哪里?和它直接竞争的产品在那里?

  • CSDN APP

    目前app store上,有CSDN、奇点日报、开源中国、SegmentFault这几个技术社区的app。我认为,CSDN最大的优势,也是其他产品难以望其项背的优点,就是其资源的丰富。足够开放、用户足够庞大、内容足够丰富,自然有更强大吸引力。

    我认为CSDN的劣势,也是它长期被人诟病的两点,是资源强制收费和抄袭现象泛滥。资源强制收费让很多想开源的玩家没有办法免费共享自己的资源;抄袭现象则说明了随着高手更加倾向国外的论坛,国内CSDN中技术水平一般的“伸手党”占比越来越大,博文质量越来越低。

  • Form-OCR

    暂时没有找到表单识别平台的相关工作

作为新的项目经理,这个产品的核心用户群是什么样的人,典型用户长什么样?学历,年龄,专业,爱好,收入,表面需求,潜在需求都是什么?

CSDN APP的核心用户群应该是IT行业的技术爱好者和从业者。典型用户应该分为以下几种:

  • 有一线经验的:

    • 乐于分享自己在技术上曾经遇到的问题,并且写成博客作为纪念,并帮助行业的后来者
    • 应该是25-35岁之间,平时乐于钻研,并且在某个领域从业了足够长的时间,有自己思想风格
    • 表面需求是记录自己的实践经验并帮助他人;潜在需求是想让自己的文章被更多人看到,帮助更多人、得到更多的赞赏
  • 懂得行业规则的:

    • 30-50岁,应该曾经担任过HR、PM之类的职务,是管理型的人才
    • 乐于总结自己面试他人和管理时得到的经验,帮助行业人才发挥他们的才能
    • 表面需求是分享经验,帮助他人;潜在需求是让自己经验得到更广泛的分享
  • 热爱IT行业的

    • 20-30岁,紧跟时代潮流、乐于钻研的人,喜欢研究新技术学习新知识
    • 在CSDN的平台中,查找资料、学习知识、记录实践
    • 表面需求是利用博客帮助自己理解一个技术,提升自我;潜在需求是拥有更加直接系统的教程和带头人
  • 遇到困难的

    • 年龄不限
    • 表面需求是找到答案,解决问题,以继续自己的工作;潜在需求是希望解决方法找的快一点。
  • 想找答案的

    • 年龄不限
    • 表面需求是找到答案,完成任务;潜在需求是增加学习过程中的满足感,激发主动学习的热情。

Form-OCR的核心用户群应该是长期和表单打交道的人

  • 前台

    前台经常需要使用各种表单,银行前台管理客户交易请求、酒店前台登记顾客信息等

  • 医院

    可以很方便的读取和解析医院的报告单

  • 仓库

    可以便利的读取仓库的收据、货款记录,转化成电子信息便于整理和处理

  • 企业财务处

    企业的单据、发票等可以自动化地读取,转化为电子信息存储

  • 快递

    快递员在面对手写的快递单时,再也不用人工录入了快递信息了

Form-OCR & CSDNAPP初体验的更多相关文章

  1. 【尝新】微信小程序初体验

    文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1474644089434 根据文档地址中下载微信开发工具后,按照文档指引可以创建一个快速体验的小d ...

  2. python窗体——pyqt初体验

    连续两周留作业要写ftp的作业,从第一周就想实现一个窗体版本的,但是时间实在太短,qt零基础选手表示压力很大,幸好又延长了一周时间,所以也就有了今天这篇文章...只是为了介绍一些速成的方法,还有初学者 ...

  3. SignalR初体验

    简介 ASP .NET SignalR[1]  是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以 ...

  4. [Ajax] AJAX初体验之-在博客中添加无刷新搜索

    现在博客很流行,相信应该上网时间稍微长点的朋友都会在这或者在那的有一个自己的博客.对于一些有一定能力的朋友,可能更喜欢自己去下载一个博客程序来架设一个自己的博客,而不是使用一些博客网站提供的服务.而大 ...

  5. Node.js 网页瘸腿爬虫初体验

    延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器 ...

  6. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  7. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  8. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  9. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

随机推荐

  1. P1090 合并果子(JAVA语言)

    题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...

  2. 软件漏洞--Hello-Shellcode

    软件漏洞--Hello-Shellcode 使用上一次的栈溢出的漏洞软件 可以直接通过栈溢出来修改返回值,或者要跳转的函数地址 实现一个ShellCode来跳转自己的代码 源bug软件代码 #defi ...

  3. 对象存储服务-Minio

    Mino 目录 Mino 对象存储服务 Minio 参考 Minio 架构 为什么要用 Minio 存储机制 纠删码 MinIO概念 部署 单机部署: Docker 部署Minio 分布式Minio ...

  4. Java学习之浅析高内聚低耦合

    •前言 如果你涉及软件开发,可能会经常听到 "高内聚,低耦合" 这种概念型词语. 可是,何为 "高内聚,低耦合" 呢? •概念 "高内聚,低耦合&qu ...

  5. 力扣 - 208. 实现Trie(前缀树)

    目录 题目 思路 代码 复杂度分析 题目 208. 实现 Trie (前缀树) 思路 在我们生活中很多地方都用到了前缀树:自动补全,模糊匹配,九宫格打字预测等等... 虽然说用哈希表也可以实现:是否出 ...

  6. Spring Cloud:面向应用层的云架构解决方案

    Spring Cloud:面向应用层的云架构解决方案 上期文章我们介绍了混合云,以及在实际操作中我们常见的几种混合云模式.今天我们来聊一聊Spring Cloud如何解决应用层的云架构问题. 对于Sp ...

  7. RabbitMQ 入门 (Go) - 6. 数据持久化(上)

    从本节开始,我介绍一下如何将相关数据持久化到数据库,也就是上图中蓝色的部分. 目前的问题 我先运行 6 个传感器和2 个协调器,这里我使用了批处理文件: 运行后,看一下 RabbitMQ 的管理控制台 ...

  8. Spring Boot 轻量替代框架 Solon 1.3.20 发布

    Solon 是一个微型的Java开发框架.项目2018年启动,参考过大量前人作品:内核0.1m的身材,超高的跑分,以及良好的使用体验.支持:RPC.REST API.MVC.WebSocket.Soc ...

  9. springboot的logback的配置文件

    之前敲出来一个 logback 的配置文件,防止以后找起来麻烦在这里存个档 修改了日志输出的内容 设置默认级别为 INFO 正常日志 ( TRACE 到 WARN ) 输出到单独的文件夹 异常日志 ( ...

  10. 基于MATLAB的手写公式识别(9)

    基于MATLAB的手写公式识别(9) 1.2图像的二值化 close all; clear all; Img=imread('drink.jpg'); %灰度化 Img_Gray=rgb2gray(I ...