310
社区成员




本次作业截止时间为:2024年4月16日 23:59
注:博客发布后需要审核,请同学们记得提前发布博客,避免影响作业提交。
很多同学有疑惑:
软件工程课是否就是枯燥的理论课?
或者是几个牛人拼命写代码,其他人抱大腿的课?
要不然就是学习一个程序语言,练习某个框架,搞一个职业培训的课?
都不对!软件工程有理论,有实践,更重要的是分析,思辨,总结。在课程中,同学们自己组织团队写一个软件发布,然后分析其中的得失,的确是学习软件工程的一个好方法。这样能根据切身体会来分析,很有价值,但也有可能“身在此山中,未能看清全局。而且,课程时间有限,我们也不能做很多具体的项目。因此,我们也需要从间接经验中学习,分析。别的项目的成败同样给我们很多启发!
我们生活中很多时候要和软件打交道,大家上课开小差时候玩的手机游戏,背英语单词的手机App,买火车票的网站,互相联系用的微信微博,等等,都是软件,都很值得分析。
- 你为何成为该软件的用户?
- 软件背后的团队做对了什么,做错了什么?
- 软件工程质量如何?
- 如果你来做,会做得更好么?
通过各种案例分析,评测,思辨,总结,我们就能看到软件工程的原则在实践中的种种体现,学好软件工程,帮助我们在实践中做得更好。
分析什么样的软件也有讲究,这就要说到一个故事:
某国空军为了提高飞机在空战中的存活率,决定加固飞机,但是加固什么地方呢?他们研究空战后飞回基地的飞机,飞机各部分中弹的地方和密度,想以此得出结论。但是专家们忽略了一点,那些被击中要害的飞机,都没有能飞回基地,也没有能够参加这些调查。
幸存者偏差 (Survivorship bias)是一种常见的逻辑谬误,意思是只能看到经过某种筛选而产生的结果,而没有意识到筛选的过程,因此忽略了被筛选掉的关键信息。这东西的别名有很多,比如“沉默的数据”、“死人不会说话”等等。
因此,我们不光要分析那些经历战场的考验而最后 “活着出来” 而胜利的软件,还要分析那些在战场中被打败,或者伤痕累累,正在挣扎的软件,这样才能全面地了解软件工程的原理在好/坏软件上所起的作用。
有的同学会说:
“我只会看看界面,写不出来…”
那么,可以看看这个 只评价界面的分析报告,争取写出类似水平的报告来:
2023年软件评测优秀作业展示:
代码仓库管理系统:
Mark Polo
dayileba
注:请先仔细阅读本次作业的要求,根据要求完成自己的思考,在完成作业后可以选择参阅,看看自己是否有可以提升的地方。前几次作业有出现模仿去年博客的情况,一旦助教发现将进行扣分处理,请同学们 独立完成作业,严禁一切形式的模仿和抄袭。
1、本学期供分析的产品
作为一个 IT 行业的学生或从业者,每天都在使用各种各样的软件,你能否给这些软件写一个评测博客呢?
请同学们自行在以下四个网站中选择两个网站进行对比测试。
2、博客具体要求
第一部分 调研,评测
(参考知识点:软件的 bug,功能评测,黑箱测试,第8章用户调研,12章软件的用户体验)
体验两个产品的功能,找出至少1个较高质量的功能性bug。
(1)使用体验
(2)BUG描述
须用专业的语言描述,其中必须包含以下内容(为方便说明,Bug和改进点在接下来的章节中统称Bug):
Bug发生时的测试环境
Bug的可复现性及具体复现步骤
对于复现步骤,需要按照流程顺序,或者绘制流程图进行详细描述,并确保这一情况可以被复现且符合上述全部描述。
Bug具体情况描述
Bug分析
(3)结论
经过这么多工作,你一定有充分的理由给这个软件下一个评价:
请选择一个结论。
除了定性的结论,是否能有定量的结论(就像最近比较时髦的手机评测那样,跑个分),如何定量地评价一个软件?
请看这个链接,并尝试从多个维度对软件进行定量的测评:
注: 对于文心一言等对象,找出高质量的功能性Bug可能不是一件容易的事情。因此要求至少从两个测评对象中找到1个高质量的功能性Bug。博客需要分别描述同类中两个软件的体验、BUG (如果没有找到,说明即可) 和结论.
第二部分 分析
(参考知识点:8.6节对工作的估计,和14.1节软件工程的质量)
从书上我们可以得知:
程序 = 算法 + 数据结构
软件 = 程序 + 软件工程(软件服务还有数据,内容的因素)
软件企业 = 软件 + 商业模式
那么请你:
第三部分 建议和规划
(参考知识点:《构建之法》第8章功能的定位和优先级;第9章项目经理)
这个软件/网站/服务有很多可以提高的部分,如果你是新上任的项目经理,如何提高从而在竞争中胜出?请针对以下的问题进行思考
本次作业满分100分:
第一部分(40‘):
【覆盖课程目标4】↓
(20’) 两个软件的体验描述
(5‘)两个软件定性和定量的结论
(5‘)两个软件中,至少1个高质量的功能性Bug的描述
(5‘)两个软件中,其他高质量的功能性Bug的描述
【覆盖课程目标5】↓
第二部分(20‘):
【覆盖课程目标4】↓
【覆盖课程目标5】↓
第三部分(40‘):
【覆盖课程目标4】↓
【覆盖课程目标5】↓
1、为了方便阅读以及助教评分,请大家在博客开头给出博文目录,作为内容的索引
请确认目录可以 正确跳转!
请在博客中 加一个链接指向邹欣老师的案例分析作业要求——软件工程 案例分析作业
请务必包含以下大标题,标题含义相近即可,你可以个性化你自己的大标题,并添加下属的小标题:
2、为了方便其他学校的老师或者助教了解课程实况,请大家在作业开头添加作业的基本信息:(必做)
这个作业属于哪个课程 | <班级的链接> |
---|---|
这个作业要求在哪里 | <作业要求的链接> |
这个作业的目标 | <写上具体方面> |
其他参考文献 | … |
3、作业提交规则
4、注意事项
班级群如果发布相关通知也是作业要求一部分,请及时查看群通知; 若需要在群填写相关信息,未能在deadline之前完成填写的,扣实际得分的50%; 如对作业存在疑问,请在deadline之前三天在班级群提出; 若助教对作业要求有修改,会在群内公告,请务必查看并按新的要求完善作业; 请及时回复老师或助教的点评并作出相应修改。即使提交了作业,也应该关注班级群中助教的公告!
5、疑惑解疑
若有对题意不清或者有不理解的地方,可在QQ群或微信群中直接提问
请让 AI 回答软件工程的一个经典问题:在一个软件项目中,团队有 N 个成员,团队把所有工作都用 ”小时“ 工作量来衡量, 他们在项目开始时,预计团队每天的进度为 30 小时 (即每天完成了30小时的工作量)。当项目完成了一半的总工作量的时候,大家发现实际的进度为15小时/天,问:在余下的时间中, 团队每天的进度要到多少,才能在项目结束时让整个项目的平均进度恢复到每天 30 小时的工作量?
1
转: https://www.weibo.com/1727858283/O7oi77vbU?pagetype=profilefeed 上次吴恩达老师分享完《AI 智能体工作流引领人工智能新趋势》 微博正文 之后,LangChain 作者 Harrison 也谈了 AI 智能体,在这个问题上我相信他还是很有发言权的,毕竟作为最流行的 AI 开发框架之一,借助 LangChain 开发 AI 智能体是一个很常见的需求,并且 LangChain 也在这方面做的很不错。
Harrison 提到了智能体的三个方面:任务规划、用户体验和记忆功能。
吴恩达老师介绍了规划。
规划是 AI 智能体的一种核心设计模式。当我们让智能体去执行复杂任务时,需要让大语言模型帮助我们将复杂的任务分解成简单的任务,并且规划出来一个步骤,可以让其他工具或者 AI 智能体按照步骤一步一步去完成任务。
这其实类似于我们在团队协作开发复杂项目的时候,有项目经理这样的角色,制定好项目计划,把复杂的任务分解成简单的任务,并设定好先后顺序和优先级,组织团队一起完成复杂的项目。
吴老师这里说的 AI 智能体的规划,就类似于实际项目中的项目经理规划项目,只是由大语言模型来充当项目经理的角色。
之前吴老师也提到过,规划其实就是让大语言模型对复杂的任务进行推理,然后分解成可以执行的若干步骤,并调用相应的 AI 智能体或者工具执行,在这个过程中,还会引入反思对规划进行完善和对结果进行校验。
但是目前 AI 的规划还不可靠,需要依赖提示词工程和流程工程,未来也许会内化为模型自身的能力。
在 AI 智能体执行任务的过程中,人的参与仍然是必要的,因为智能体还不够可靠。但是这里面的平衡也很重要,既不能让人参与过多,也不能完全由智能体自主操作。
前不久很火的 AI 编程产品 Devin 就做了一个很好的用户体验设计示范,它提供了月光宝盒这样回到过去某个时间点修改的功能,大部分时间都可以 AI 自主编程,需要的时候才介入。
智能体的记忆功能非常重要。只有当智能体有记忆了,才能真正的成为你的私人助理,记住一些你的个人喜好和特定的操作。
Harrison 的分享时间比较短,甚至于任务规划、用户体验和记忆功能这三个方面他也没有明确的答案也在探索中,但提出正确的问题往往就是解决问题的关键!
66
1
1
sgrg
这是一个入门的 ”人月神话“ 问题, 可以让 AI 解答一下: “我们知道一个程序员一天可以写 1024 行代码,一个汽车智能驾驶系统估计需要有 2 千万行代码,我需要在一年内开发出一套这样的高质量系统,请问需要多少程序员?”