[ 现代软件工程 作业系列]
软件工程作业 案例分析
(建议作为个人或结对作业)
很多同学有疑惑:
软件工程课是否就是枯燥的理论课? 或者是几个牛人拼命写代码,其他人抱大腿的课? 要不然就是学习一个程序语言,练习某个框架, 搞一个职业培训的课?
都不对! 软件工程有理论,有实践,更重要的是分析,思辨,总结。 在课程中,同学们自己组织团队写一个软件发布, 然后分析其中的得失,的确是学习软件工程的一个好方法。 这样能根据切身体会来分析,很有价值,但也有可能 “身在此山中”,未能看清全局。 而且,课程时间有限,我们也不能做很多具体的项目。 另一方面,我们也可以从间接经验中学习, 分析,别的项目的成败同样给我们很多启发。
我们生活中很多时候要和软件打交道, 大家上课开小差时候玩的手机游戏, 背英语单词的手机App,买火车票的网站,互相联系用的微信微博,等等都是软件,都很值得分析。 你为何成为它们的用户? 它们的团队做对了什么,做错了什么? 软件工程质量如何? 如果你来做,会做得更好么?通过各种案例分析, 评测,辩论, 总结,我们就能看到软件工程的原则在实践中的种种体现,学好软件工程,帮助我们在实践中做得更好。
分析什么样的软件也有讲究,这就要说到一个故事:
某国空军为了提高飞机在空战中的存活率,决定加固飞机,但是加固什么地方呢? 他们研究空战后飞回基地的飞机,飞机各部分中弹的地方和密度,想以此得出结论。 但是专家们忽略了一点,那些被击中要害的飞机,都没有能飞回基地,也没有能够参加这些调查。
链接 幸存者偏倚(Survivorship bias)是一种常见的逻辑谬误,意思是只能看到经过某种筛选而产生的结果,而没有意识到筛选的过程,因此忽略了被筛选掉的关键信息。这东西的别名有很多,比如“沉默的数据”、“死人不会说话”等等。
我们不光要分析那些经历战场的考验而最后 "活着出来" 而胜利的软件,还要分析那些在战场中被打败,或者伤痕累累,正在挣扎的软件,这样才能全面地了解软件工程的原理在好/坏软件上所起的作用。
有的同学会说, “我只会看看界面,写不出来...", 那么,可以看看这个只评价界面的分析报告,争取写出类似水平的报告来。
2019 - 2020 学期供分析的产品:
① 现在人工智能 (AI) 非常火热, 我们能否分析一些AI 相关的开发产品,例如 智能表单信息抽取识别 它有何创新, 有何不足,你从中看到了什么机会? 如何参与这个开源项目?
② cnblogs.com 的博客功能, 特别是 https://edu.cnblogs.com 中针对学习,教学,班级管理,互相交流的功能。 请用它写一些博客和评论,你觉得你会成为它的用户么?这一方面的参考对象是: www.csdn.net。
③ 现在很多开发人员和IT专业的学生都在移动设备上学习、工作,在移动设备上的APP 能满足这类目标用户的需求么?它们会被wx公众号取代么? 请分析 csdn 的APP
④ 微软公司有两个代码编辑器, Visual Studio, VS Code,它们的目标用户,主要功能有何不同?为何要有两个编辑器和开发环境? 请用这两个编辑器/IDE 写出一个简单的 C/C++/Python 程序,描述你的发现。
2017 - 2018 学期供分析的产品 (从下面 3 类产品中挑一个你最感兴趣的):
① 现在人工智能 (AI) 非常火热, 我们能否分析一些AI 相关的开发产品,例如 OpenMind Studio, VS Code Tools for AI。这些新工具有何创新, 有何不足,你从中看到了什么机会?
② cnblogs.com 的博客功能, 特别是 https://edu.cnblogs.com 中针对学习,教学,班级管理,互相交流的功能,这一方面的参考对象是: www.csdn.net。
③ 现在很多开发人员和IT专业的学生都在移动设备上学习、工作,在移动设备上的APP 能满足这类目标用户的需求么?它们会被wx公众号取代么? 请分析 csdn 的APP
请向老师咨询评测博客文章的上交期限. 建议的打分标准是:
- 按时提交, 文章显示较高的专业水平和认真细致的工作态度,评测比较深入而不流于表面敷衍,详略得当: 满分 (10分)
- 按时提交, 有各种不足, 则酌情扣分
- 迟交作业, 得 0 分 。
- 一周内不交作业, 从学生成绩中倒扣分数。
- 抄袭等行为则根据学校有关规定处理
博客具体要求:
第一部分 调研, 评测
(软件的bug,功能评测,黑箱测试, 第8章 用户调研, 12 章 软件的用户体验)
注册并使用 <被评测软件/网站> 的主要功能,按照描述的 bug 定义, 找出几个功能性的比较严重的 bug。至少两个. 用专业的语言描述 (每个bug 不少于 40字), 如有必要, 可以配图。
另外,请你自己花几天时间时不时用一下<评测软件>, 看看你有没有成为一个持续使用者。 <被评测软件> 解决了你的什么问题?
相信每个同学的朋友中一定有人需要用这样的软件(例如你上课的同学), 记载你对这位用户的采访。
提示: 采访提要
1) 介绍采访对象的背景和需求(他们为何要用这个软件/网站, 有什么痛点,还有别的需求么)
2) 让采访对象使用10 – 30 分钟 <评测软件> 的基本功能 (请上传照片证明用户的确正在使用, 远程采访的同学请让别人帮忙照相)
3) 描述用户使用这个产品的过程, 用户的问题解决了么? 软件在数据量/界面/功能/准确度上各有什么优缺点? 用户体验方面有问题么?
4) 用户对产品有什么改进意见?
结论:经过这么多工作,你一定有充分的理由给这个软件下一个评价:
a) 非常不推荐
b) 不推荐
c) 一般
d) 推荐
e) 非常推荐
请选择一个结论。 除了定性的结论,是否能有定量的结论 (就像最近比较时髦的手机评测那样, 跑个分?), 如何定量地评价一个软件?
第二部分 分析 (参考 8.6 节 对工作的估计, 和14.1 节 软件工程的质量)
根据你对 <被评测软件> 的了解, 现在请估计这个软件/网站/服务 做到这个程度大约需要多少时间 (团队人数6 人左右, 计算机大学毕业生, 并有专业UI 支持)。 分析这个软件目前的优劣 (和类似软件相比), 这个产品的质量在同类产品中估计名列第几? 它的市场份额估计第几? 两者匹配么? 不匹配的原因是什么?
在书上我们看到:
程序 = 算法 + 数据结构;
软件 = 程序 + 软件工程 (软件服务还有数据,内容的因素)
软件企业 = 软件 + 商业模式
你在第一部分发现的bug, 为何软件团队不能在发布前修复?他们是不知道,还是有意不修复? 你觉得是什么原因?从下面的可能性中选取几个:
- 对用户需求掌握不好
- 具体的设计质量不高
- 开发人员粗心大意
- 测试把关不严,敷衍了事,没有注意在特殊的配置或环境下测试
- 其他
团队在哪一个层次还有问题? 为何这么著名的团队还有这些问题?可以把自己想问软件团队的问题都列出来, 也许就能得到团队的亲自解答了!
从各方面的问题,推理出这个软件团队在软件工程方面可以提高的一个重要方面 (具体建议)。
第三部分 建议和规划 (参考《构建之法》第8章功能的定位和优先级;第9章项目经理)
这个软件/网站/服务有很多可以提高的部分, 如果你是新上任的项目经理, 如何提高从而在竞争中胜出?
首先,市场有多大? 全中国IT 专业的学生和职业人士都可以是用户, 总共有多少人? 目前市场上有什么样的产品了,它们的优势劣势在哪里? 和它直接竞争的产品在那里? 这个领域是出于 (萌芽 / 成长 / 风口 / 平台 / 下降)阶段?
作为新的项目经理,这个产品的核心用户群是什么样的人, 典型用户长什么样?学历,年龄,专业,爱好,收入,表面需求,潜在需求都是什么?
功能:你要设计什么样的功能? 为何要做这个功能,而不是其他功能? 为什么用户会用你的产品/功能? 你的创新在哪里? 可以用 NABCD 分析.
如果你有钱可以招聘 6 个人, 有 4 个月的时间, 你作为项目经理, 应该如何配置角色 (开发, 测试,美工等等)?
描述你的团队在16 周 期间每周都要做什么, 才能在第16周如期发布软件的改进版本,并取得预想中的成绩。
把上面几个部分都写清楚,发一个博客。
--------------- 这是以前布置的作业 --------------------------------
2016 - 17 学期供分析的产品
Windows10 的个人助理 Cortana (小娜)
背靠背对比的一对产品: 有道词典Win10 版, 和 必应词典Win10 版
2015-16年供分析的产品 必应词典客户端 (http://bing.msn.cn/dict/) 必应词典有 PC,Win8/10, Windows Phone,iPhone,Android,iPad 客户端,不要说你找不到! 每个大学生都要学习外语,通过某种资格考试,因此大家对这个领域不会陌生。
每个小组 (结对) 从下列产品中选一个, 按照下面的说明写软件测试报告, 分析并提出建议, 写一篇博客 (包括四部分)即可。
产品1. 必应词典客户端 (http://bing.msn.cn/dict/) 必应词典有 PC,Win8/10, Windows Phone,iPhone,Android,iPad 客户端,不要说你找不到!
产品2. 必应缤纷桌面 (http://desktop.bing.msn.cn/)
产品3. 微软学术搜索 (http://academic.research.microsoft.com )
打分会以产品分类, 比较各个小组的分析能力和对软件工程的理解,打分从高到低, 没有并列。 所以不要一窝蜂去选人多的产品。
(新来的同学: 请每两位同学结对成为一个小组, 每个小组都在 http://www.cnblogs.com/ 开一个技术博客. 所有作业都在博客上发布。请在每一个作业上写明名字, 和学号的后三位数字.)
请向老师咨询博客文章的上交期限. 建议的打分标准是:
-
按时提交, 显示较高的专业水平和认真细致的工作态度: 满分,
-
按时提交, 有各种不足, 则酌情扣分
-
迟交作业, 得 0 分 。
-
不交作业, 从学生成绩中倒扣分数。
-
抄袭等行为则根据学校有关规定处理
关于 微软必应词典客户端 或 必应缤纷桌面
第一部分
下载并使用,按照教程描述的 bug 定义, 找出一个功能性的比较严重的 bug。至少一个. 用专业的语言描述 (每个bug 不少于 40字), 如有必要, 可以配图。
第二部分
我相信每个同学的朋友中一定有人需要用这样的软件, 记载你对这位用户的采访。
提示: 采访提要
1) 介绍采访对象的背景
2) 让采访对象使用10 – 30 分钟 必应词典/必应缤纷桌面 的功能 (请上传照片证明用户的确正在使用, 远程采访的同学请让别人帮忙照相)
3) 描述用户使用这个产品的过程, 用户的问题解决了么? 软件在数据量/界面/功能/准确度上各有什么优缺点?
4) 用户对产品有什么改进意见?
第三部分
使用此软件的所有功能 (包括必应词典背单词, 单词本等), 联系第二部分的分析, 估计这个项目做到这个程度大约需要多少时间 (团队人数6 人左右, 计算机大学毕业生, 并有专业UI 支持)。 分析这个软件目前的优劣 (和类似软件相比), 并推理出团队在软件工程方面可以提高的一个重要部分 (具体建议)。
第四部分
这个软件有很多可以提高的部分, 如果你是项目经理, 如何提高从而在竞争中胜出?
目前市场上有什么样的产品了? 你要设计什么样的功能? 为什么用户会用你的产品/功能? 你的创新在哪里? 可以用 NABC 分析.
如果你的团队有5个人, 3个月的时间, 你作为项目经理, 应该如何配置角色 (开发, 测试,美工等等)?
描述你的团队在12 周 期间每周都要做什么, 才能在第12周如期发布软件。
微软学术搜索
第一部分
请分析下面博客描述的软件开发流程和生命周期, 并访问微软学术搜索网站, 测试各种功能:
http://www.cnblogs.com/xinz/archive/2012/02/20/2358888.html
在软件测试课上, 我们学到了软件可能有多种类型的 bug, 请利用你所学的知识, 发现这个网站的功能性的缺陷 (functional bug), 至少一个. 用专业的语言描述 (每个bug 不少于 40字), 如有必要, 可以配图。
注意, 要求是发现网站功能的问题, 而不是其他问题 (例如数据不全, 某项数据错误, 网速慢, 不支持IE6 等)
第二部分
你已经看过了这个项目的开发流程描述:
http://www.cnblogs.com/xinz/archive/2012/02/20/2358888.html
指出开发团队在软件工程方面至少 一个不足 (例如关于开发工具, 质量控制, 未来计划等等) 。要言之有物。 如有必要, 可以截图。
第三部分
现在你已经熟悉了微软学术搜索网站,我相信每个同学的朋友中一定有人需要搜索一些学术论文方面的内容. 每人写一个博客, 记载你对这位用户的采访。
提示: 采访提要
1) 介绍采访对象的背景
2) 让采访对象使用10 – 30 分钟学术搜索的功能 (请上传照片证明用户的确正在使用学术搜索, 远程采访的同学请让别人帮忙照相)
3) 描述用户使用这个产品的过程, 用户的问题解决了么? 软件在数据量/界面/功能/准确度上各有什么优缺点?
4) 用户对产品有什么改进意见?
第四部分
目前学术搜索产品以网页为主, 越来越多的用户开始使用移动设备(手机, 平板设备), 如果你要开发一个在移动设备上的应用软件帮助学术界的用户(大学老师, 研究生, 图书情报人员等),你应该怎么办? 描述下列内容:
目前市场上有什么样的产品了?
你要设计什么样的功能? 为什么用户会用你的产品?
如果你的团队有5个人, 3个月的时间, 你作为项目经理, 应该如何配置角色 (开发, 测试,美工等等)?
描述你的团队在12 周 期间每周都要做什么, 才能在第12周如期发布软件。