声明:本作业以邹欣老师博客1为基础进行修改。
〇、说在前面的话
很多同学有疑惑:
软件工程课是否就是枯燥的理论课?
或者是几个牛人拼命写代码,其他人抱大腿的课?
要不然就是学习一个程序语言,练习某个框架,搞一个职业培训的课?
都不对!软件工程有理论,有实践,更重要的是分析,思辨,总结。在课程中,同学们自己组织团队写一个软件发布,然后分析其中的得失,的确是学习软件工程的一个好方法。这样能根据切身体会来分析,很有价值,但也有可能“身在此山中”,未能看清全局。而且,课程时间有限,我们也不能做很多具体的项目。因此,我们也需要从间接经验中学习,分析。别的项目的成败同样给我们很多启发!
我们生活中很多时候要和软件打交道,大家上课开小差时候玩的手机游戏,背英语单词的手机App,买火车票的网站,互相联系用的微信微博,等等,都是软件,都很值得分析。
- 你为何成为该软件的用户?
- 软件背后的团队做对了什么,做错了什么?
- 软件工程质量如何?
- 如果你来做,会做得更好么?
通过各种案例分析,评测,思辨,总结,我们就能看到软件工程的原则在实践中的种种体现,学好软件工程,帮助我们在实践中做得更好。
分析什么样的软件也有讲究,这就要说到一个故事:
某国空军为了提高飞机在空战中的存活率,决定加固飞机,但是加固什么地方呢?他们研究空战后飞回基地的飞机,飞机各部分中弹的地方和密度,想以此得出结论。但是专家们忽略了一点,那些被击中要害的飞机,都没有能飞回基地,也没有能够参加这些调查。
幸存者偏差 (Survivorship bias)是一种常见的逻辑谬误,意思是只能看到经过某种筛选而产生的结果,而没有意识到筛选的过程,因此忽略了被筛选掉的关键信息。这东西的别名有很多,比如“沉默的数据”、“死人不会说话”等等。
因此,我们不光要分析那些经历战场的考验而最后**"活着出来"而胜利的软件,还要分析那些在战场中被打败,或者伤痕累累,正在挣扎**的软件,这样才能全面地了解软件工程的原理在好/坏软件上所起的作用。
有的同学会说:
“我只会看看界面,写不出来...”
那么,可以看看这个只评价界面的分析报告,争取写出类似水平的报告来:如何评价微软的UI设计?
文末附往年优秀作业
一、本学期供分析的产品:
请从以下5个题目当中选择一个题目来分析。
- 作为一个 IT 行业的学生或从业者,如果你碰到了问题, 你去哪里寻找答案呢? 请比较至少两个 IT 问答网站:列出它们具体的优缺点,并说明如果你来主持工作,你会怎么改进。
- 现在很多开发人员和IT专业的学生都在移动设备上学习、工作、社交,在移动设备上的APP 能满足这类目标用户的需求么?它们会被微信公众号取代么? 请分析 CSDN 的移动App, 不要面面俱到,请聚焦分析它的 “微社区 / 动态 / Blink” 功能, 点击 App 的首页下方正中间的那个 “微社区/动态” 按钮,打开后的微社区,就是我们要分析的。
- 现在学习资料很多,但是很多同学在学习新技术的时候还是很茫然,有没有更好的学习路径? 请评测CSDN上技能树功能(python 技能树,CS入门技能树, C技能树 )。请对照项目成员对自己产品的期待, 你觉得这个目前的产品状态离原来的期望还差哪几个方面?
- 现在许多人生活中都离不开音乐了,没有bgm就没有动力。大家也一定有十分熟悉的音乐软件,现在音乐软件提供的核心功能是什么?主要是为了满足人们什么需求?请选择两款常用的音乐软件进行使用并分析。
- 代码仓库管理系统有很多,他们对于你熟悉的目标用户 (中国高校大学生)有什么缺陷和需要改进的地方,并且该如何改进? 请上手使用并分析至少两个常见的代码仓库:
二、博客具体要求:
第一部分 调研,评测
(软件的 bug,功能评测,黑箱测试,第8章用户调研,12章软件的用户体验)(必答)
下载并体验软件的功能,找出至少2个功能性bug。须用专业的语言描述,其中必须包含以下内容(为方便说明,Bug和改进点在接下来的章节中统称Bug):
Bug发生时的测试环境: 如使用的操作系统环境和版本,浏览器环境和版本,以及发生的时间段及前因后果等(简述为主,但是需要说清楚基本环境和条件)
Bug的可复现性及具体复现步骤
- 对于可复现性,需要说明是必然发生,还是偶尔发生,还是满足某些特定条件下会发生。
- 对于偶尔发生的Bug,须做多次测试并说明发生频率(例如300次测试中发生了45次)
- 对于满足特定条件下发生的Bug,须详细且精准描述发生条件
- 对于情况较为复杂的可复现性情况,须绘制必要的图表进行详细数据分析(例如频率分布直方图,对于多因素的分析可以使用三维图,甚至使用SPSS等软件进行分析)
- 对于复现步骤,需要按照流程顺序,或者绘制流程图进行详细描述,并确保这一情况可以被复现且符合上述全部描述。
Bug具体情况描述
- 描述出现了什么样的Bug,具体现象是什么
- 以配图的方式展示这一Bug,并对配图进行必要的说明
- 该部分的描述务必做到自圆其说,即需要通过你的说明,证明这一情况确实存在,且确实是一个 Bug 而不是 Feature 或者乌龙等情况。
Bug分析
- Bug的可能成因,需要作出足以自圆其说的分析,并可以类比与之相似的情况或个人项目经历
- Bug的严重性
- 需要从系统功能、安全性以及用户体验这三个或更多维度上进行分析
- 给出一个可量化的指标(比如星数),并说明理由
- 此外,建议在全部 Bug 描述开始前,详细说明各个指标的量化标准,以便后续的说明和探讨。(例如五颗星是致命性系统故障、致命性安全性漏洞、用户体验严重影响;四颗星是严重系统故障、服务器鉴权漏洞或重要数据泄露、用户体验较差等)言之有理即可。
- 对于Bug的预期及改进建议
- 需要结合之前对Bug的分析和严重性展开叙述
- 需要说清楚这个地方应该是什么样的,以及应该如何设计可以做到这一点
- 对Bug的一系列其他分析,可以自由发挥
Bug 反馈(加分项)
如果你已经确定找到的 Bug 可复现,确实不是 Feature 或者乌龙,并且能让其他人也验证该 Bug 的存在,我们非常鼓励你你向开发团队提出 issue,请参考这个Github 上的 issue,用简洁准确的语言进行描述。
提示: 体验提要
- 使用10–30分钟这个软件的基本功能(请上传使用软件的照片)
- 描述使用这个产品的过程,解决了用户的问题么?软件在数据量/界面/功能/准确度上各有什么优缺点?用户体验方面有问题么?
- 对产品有什么改进意见?
- 加分项: 采访另一个用户, 让 TA 也使用这个软件/服务, TA 能上手使用么? 有什么明显的困难, 软件的开发团队为何没有意识到这些初始用户会碰到的困难?
(请将采访过程以图片和文字的方式记录下来,且要求采访对象为其他软工班级的学生)
记录请至少包含以下几点:
a. 采访对象的背景,为什么选择这个人采访?TA 的需求是什么?
b. 采访对象实际使用的产品栏目
c. 采访对象使用软件的过程中会遇到的问题和亮点
d. 采访对象觉得从用户体验的角度来说需要改进的地方有哪些?
结论:经过这么多工作,你一定有充分的理由给这个软件下一个评价:
- a) 非常不推荐
- b) 不推荐
- c) 一般
- d) 好,不错
- e) 非常推荐
请选择一个结论。
除了定性的结论,是否能有定量的结论(就像最近比较时髦的手机评测那样,跑个分),如何定量地评价一个软件?
请看这个链接,并尝试从多个维度对软件进行定量的测评:
http://www.cnblogs.com/xinz/p/3308608.html
第二部分 分析(参考8.6节对工作的估计,和14.1节软件工程的质量)
在书上我们看到:
程序 = 算法 + 数据结构
软件 = 程序 + 软件工程(软件服务还有数据,内容的因素)
软件企业 = 软件 + 商业模式
那么:
- 使用此服务的所有功能,估计这个软件/网站/服务做到这个程度大约需要多少时间(团队人数6人左右,计算机大学毕业生,并有专业UI支持)。(必答)
- 分析这个软件目前的优劣(和类似软件相比),这个产品的质量在同类产品中估计名列第几?(必答)
- 从各方面的问题,推理出这个软件团队在软件工程方面可以提高的一个重要方面(具体建议)。
- 你在第一部分发现的bug,为何软件团队不能在发布前修复?他们是不知道,还是有意不修复?你觉得是什么原因?可以从下面的可能性中选取几个:
- 对用户需求掌握不好
- 具体的设计质量不高
- 开发人员粗心大意
- 测试把关不严,敷衍了事,没有注意在特殊的配置或环境下测试
- 其他
第三部分 建议和规划(参考《构建之法》第8章功能的定位和优先级;第9章项目经理)
这个软件/网站/服务有很多可以提高的部分,如果你是新上任的项目经理,如何提高从而在竞争中胜出?请针对以下的问题进行思考
- 市场概况
- 首先市场有多大?
- 其次直接的用户有多少?潜在的用户又有多少?
- 市场现状
- 目前市场上有什么样的产品了?
- 上述产品的定位、优势与劣势在哪里?
- 上述产品之间呈现什么样的关系,哪些为竞品关系?以及竞争中的各方态势如何?
- 市场与产品生态
- 这个产品的核心用户群是什么样的人?典型用户是什么样的?学历,年龄,专业,爱好,收入,表面需求,潜在需求都是什么?
- 产品的用户群体之间是否存在一定的关系?是否有利用其相互作用二次构成特定用户生态的可能性?
- 产品的子产品,以及其他相关产品之间是否存在一定的关系?是否有利用各个产品特性之间的相互关系二次构成产品生态的可能性?
- 产品规划
- 你要在当前软件的基础上设计什么样的新功能?为何要做这个功能,而不是其他功能?为什么用户会用你的产品/功能?你的创新在哪里?可以用NABCD分析。
- 如果你是项目经理,可以招聘6个人,并且有4个月的时间,你认为应该如何配置角色(开发,测试,美工等等) 才能在第16周如期发布软件的改进版本,并取得预想中的成绩。
- 请为你的团队设计16个周期每周的详细规划。
对于上述市场概况、市场现状以及市场与产品生态部分,并在每个部分中选择的回答至少三分之二的问题,做到有充足的证据支持并自圆其说;对于产品规划部分,请做好完整的回答并阐述理由。以上内容均发布在自己的个人博客上面。
三、评分标准
- 从上面提供的5类候选软件中至少选择一类,对其优缺点进行系统分析。
- 本次作业的最高分为15分,分数计算方式为:
- 软件使用截图 & 软件基本功能介绍:1分
- 软件优缺点分析:2分
- 软件功能性bug:2分
- 定性和定量的结论:2分
- 估计这个软件/网站/服务做到这个程度大约需要多少时间:1分
- 分析并给出产品的排名:1分
- 回答非必答题:2分
- 回答详细、完整、有依据、有逻辑:2分
- 同一类产品分析中定档打分:
- 优秀:2分
- 良好:1分
- 中等:0分
- 较差:**-2分**
- 加分项:
- 向开发团队反馈 Bug:1分
- 采访非本软工教学班级的同学:2分
- 注意:
- 晚交一周以内:本次作业0分
- 晚交一周以上或不交:倒扣1倍本次作业分数
- 抄袭行为:倒扣2倍本次作业分数并根据学校有关规定严肃处理,判定标准课程组保有全部解释权。【严禁代码与博客等一切形式的抄袭!请各位同学不要触碰底线,勿谓言之不预也!】
- 评分时按照所选的软件产品进行分类评分。同一类产品分析中,会按照优秀、良好、中等、较差进行分级给分。
- 基于上一条,对于已经有大量人选的题目,如果分析没有出彩之处,将会影响得分,请选题时务必充分考虑。
提供往年的案例分析优秀作业用于参考:
- https://www.cnblogs.com/CindyZhou/p/14609584.html
2021《笔记软件元老与新生代的战争》 - https://www.cnblogs.com/VOIDMalkuth/p/14634341.html
2021《开源代码托管平台》 - https://www.cnblogs.com/Ethanscript/p/14637737.html
2021《两极分化般的笔记软件使用体会》 - https://www.cnblogs.com/CookieLau/p/12536248.html
2020《Microsoft OCR》 - https://www.cnblogs.com/MisTariano/p/12485822.html
https://www.cnblogs.com/MisTariano/p/12571423.html
2020《OCR Form Tools》 - https://www.cnblogs.com/eitbar/p/12513982.html
2020《博客园班级博客》 - https://www.cnblogs.com/venturenn/p/12571956.html
2020《CSDN客户端》 - https://www.cnblogs.com/whynotRW/p/7659097.html
2017《神策数据》-- 精心准备采访环节,采访对象专业 - https://www.cnblogs.com/wzjb/p/7646128.html
2017《必应词典测评》 - https://www.cnblogs.com/ChildishChange/p/5903358.html
2016《微软必应词典》--详细对比同类产品分析 - https://www.cnblogs.com/SivilTaram/p/4857850.html
2015《微软必应词典客户端》-- 图文并茂并采用属性量化方式分析评测