第一次结对作业之需求分析和原型设计
这个作业属于哪个课程 | 首页 - 软件工程2024 - 福州大学 - 班级博客 - 博客园 |
---|---|
这个作业要求在哪里 | 2024秋软件工程结对作业(第一次之需求分析和原型设计) - 作业 - 软件工程2024 - 班级博客 - 博客园 |
这个作业的目标 | 结对作业,进行需求分析和原型设计 |
学号 | 102202130、042201401 |
原型地址
1.《构建之法》阅读笔记
1.1 第3章 软件工程师的成长
1.1.1个人能力的衡量与发展
(1) 软件工程概述
- 软件工程包括了开发、运营、维护软件的过程中的许多技术、做法、习惯和思想。这些相关的技术和过程被统一到一个体系中,称为“软件开发流程”。其目的是提高软件开发、运营、维护的效率,同时提升用户满意度、软件的可靠性和可维护性。
(2) 初级软件工程师的成长路径
- 积累软件开发相关的知识:提升技术技能(如对具体技术的掌握和动手能力),
- 积累问题领域的知识和经验(如对医疗或金融行业的了解)。
- 理解思想:对通用的软件设计思想和软件工程思想的理解。
- 提升职业技能:包括自我管理能力、表达和交流能力、与人合作的能力、按质按量完成任务的能力等。
- 实际成果
(3) 软件开发的工作量和质量衡量
- 项目/任务大小:常用代码行数(LOC)或功能点(Function Point)来表示。
- 时间花费:用人月来表示,如某项目花费了10个人×月。
- 质量:缺陷数量除以项目大小,如5 Bugs/KLOC表示每千行程序有5个缺陷。
- 是否按时交付:交付时间不仅越快越好,还需稳定,即估计与实际用时接近。
1.1.2团队对个人的期望
(1)对团队成员的要求
- 交流:能有效地和其他队员交流,从大的技术方向,到看似微小的问题。
- 说到做到:就像上面说的“按时交付”。
- 接受团队赋予的角色并按角色要求工作:团队要完成任务,有很多事情要做,是否能接受不同的任务并高质量完成?
- 全力投入团队的活动:就像一些评审会议,代码复审,都要全力以赴地参加,而不是游离于团队之外。
- 按照团队流程的要求工作:团队有自己的流程(见“团队和流程”一章),个人的能力即使很强,也要按照团队制定的流程工作,而不要认为自己不受流程约束。
- 准备:在开会讨论之前,开始一个新功能之前,一个新项目之前,都要做好准备工作。
- 理性地工作:软件开发有很多个人的、感情驱动的因素,但是一个成熟的团队成员必须从事实和数据出发,按照流程,理性地工作。
1.1.3软件工程师的思维误区
- 分析麻痹:总是想要弄清所有细节、所有依赖关系之后再动手,心理上过于悲观,不想修复问题。
- 不分主次,想解决所有依赖问题:想马上动手修复所有主要和次要的依赖问题,然后就可以“完美地”达成目标。
- 过早优化:在局部问题上陷进去,花大量时间优化,无视此模块对全局的重要性。
- 过早扩大化/泛化(Premature Generalization):在设计初期就过度抽象和泛化,试图让某个功能或类型适应所有可能的情况。
1.1.4软件工程师的职业发展
(1)对职业的态度
- 临时的寄托或工作
- 工作
- 职业
- 投身的事业
- 理想的呼唤
(2)职业发展
- 考级之路:通过职业资格考试,如微软认证专家(MCP)、Oracle认证项目(OCP)等。
- Steve McConnell版本:将工程师的能力量化为12个等级,评判标准则是一个工程师对软件知识的掌握程度——入门、熟练、带头人、大师。
- 大公司版本
- 自我评估:不断学习和成长,选择在哪个方面追求“专和精”,在哪几个方面达到“知道就好”的水平。
1.1.5技能的反面
问题的三个层次,见下图:
1.1.6小结
软件工程师的成长是一个不断学习和实践的过程,需要掌握扎实的技术基础,提升职业技能,同时学会团队合作和有效沟通。通过不断积累经验和反思,软件工程师能够在职业道路上不断前行,成为更加优秀的专业人才。
1.2 第8章 需求分析
需求分析是软件开发过程中的关键环节,它旨在找到并明确软件应满足的需求,确保开发团队能够构建出符合期望的产品。这一过程涉及与软件利益相关者(如用户、顾客、市场分析者、监管机构、软件工程师等)的深入沟通和合作。
1.2.1软件需求
(1)全面找到需求的步骤
- 获取和引导需求
- 分析和定义需求
- 验证需求
- 在软件产品的生命周期中管理需求
(2)软件需求的类型
- 对产品功能性的需求:要求产品必须实现某些功能。例如,一个电商网站需要提供商品浏览、购物车、订单提交等功能。
- 对产品开发过程的需求:要求软件的开发流程必须满足某些约束条件,如产生特定类型的文档、在某个时间点达到某个状态、对源代码施以特定约束(如安全性检查、代码规范等)。
- 非功能性需求:这类需求关注软件的质量属性,如性能、可用性、可靠性、安全性等。例如,一个在线游戏平台需要保证高并发下的稳定运行和快速响应用户操作。
- 综合需求:可能牵涉到其他系统的需求。例如,一个电商网站需要与物流系统、支付系统等多个外部系统协同工作,确保订单能够准确、及时地送达用户手中。
1.2.2软件产品的利益相关者
用户、顾客、市场分析者、监管机构、系统/应用集成商、软件团队、软件工程师
1.2.3获取用户需求
(1)常用的用户调研方法
- 焦点小组:组织一群用户的代表和利益相关者进行讨论,收集他们的意见和建议。
- 深入面谈:与用户进行一对一的交流,通过用户完成任务的过程观察其潜在需求。
- 卡片分类:将需求写成小卡片,通过讨论、明确定义、归类和排序来整理需求。
- 用户调查问卷:设计问卷向用户收集意见和反馈,但需注意问题的明确性、避免引导性倾向等问题。
- 用户日志研究:要求用户记录自己使用软件的行为,以供分析。
- 人类学调查:与目标用户“同吃同住同劳动”,深入了解其使用场景和需求。
- 眼动跟踪研究:利用眼动追踪设备研究用户浏览网页时的视觉行为,以优化用户体验。
- 快速原型调研:构建软件的原型版本,让用户使用并收集反馈。
- A/B测试:同时测试两种不同的UI或功能,通过用户反馈和数据分析来决定最优方案。
各种方法的分野如下图:
1.2.4竞争性需求分析的框架
(1)NABCD模型
NABCD模型是需求分析中一个尤为重要的框架,它从五个维度对需求进行深入剖析:
-
Need(需求):了解用户未被满足或有待改进的需求。
-
Approach(做法):提出解决用户需求的独特方法或技术。
-
Benefit(好处):分析新方法或技术给用户带来的好处,包括降低成本、提高效率、改善体验等。
-
Competitors(竞争):评估市场竞争态势,包括竞争对手的数量、市场占有率、产品特点等。
-
Delivery(推广):制定有效的推广策略,确保创新产品或服务能够顺利交付到用户手中。
通过NABCD模型的全面分析,我们能够更加清晰地定位产品需求,制定出更具竞争力的产品策略,从而在激烈的市场竞争中占据有利地位。
1.2.5功能的定位和优先级
(1) 功能分析的四个象限:
- 杀手功能:OCR文字识别技术,可以在屏幕上取词解释,拥有独家权威词典,等等。
- 外围功能:良好的界面设计,在各个平台上都能运行。
- 必要需求:单词短语释义的准确性(如果达不到这一点,用户就不会来使用)。
- 辅助需求:可以做各种皮肤(这也许能让一些用户更喜欢这个软件,但不是决定因素)。
(2)对不同功能的办法
- 维持—以最低成本维持此功能。
- 抵消—快速地达到“足够好”、“和竞争对手差不多”。
- 优化—花大力气做到并保持行业最好。
- 差异化—产生同类产品比不了的功能或优势(我有人无的优势,或者一个数量级以上的优势)。
- 不做—砍掉一个功能也是一个办法,我们并不一定要做所有的功能。
1.2.6小结
通过阅读《构建之法》第八章,深刻认识到需求分析在软件开发中的核心地位。特别是NABCD模型的应用,为竞争性需求分析提供了有力的工具。
2.NABCD模型分析
2.1Need(需求)
用户希望能设计一个平台来找到志同道合的合作伙伴,尤其是在需要多学科支持的项目。平台应具备以下功能:
- 用户注册与认证:学生和教师可以通过邮箱注册,通过实名认证加入平台。
- 项目发布:用户可以发起新项目或加入现有项目。
- 人才搜索:可以根据专业、技能、兴趣等标签搜索潜在的合作伙伴。
- 交流论坛:提供讨论区,促进项目组成员之间的沟通与交流。
2.2Approach(做法)
- 使用墨刀进行原型设计和组件化设计,复用组件
- 设计简约的UI风格,保持页面总体风格一致
- 制作相关组件和设置动效,以提供良好的用户交互体验。
2.3Benefit(好处)
- 参考了诸多大平台网页设计,页面简洁而又不失美感
- 清晰的模块设计和定位,逻辑明确,用户上手快
2.4Competitors(竞争)
竞争对手:
- 现有的社交平台
- 其他结对小组
我方优势:
- 页面简洁美观无广告,信息分区明确
- 模块设计和定位清晰,数据显示多样化
- 组件复用率高,维护成本较低
我方劣势:
-
能力有限,交互动画制作不够丰富
-
没有提供用户反馈的功能,不利于用户体验的提升
-
无法提供实时信息
2.5Delivery(推广)
- 通过B站、微博、微信公众号等社交媒体进行推广
- 通过广告投放,提高网站的知名度
- 通过学校官方渠道或者学生组织来进行宣传
3.模型设计
3.1 原型设计工具
经过在网上搜索相关信息得出,市面上最流行的原型工具是Axure和墨刀这两种,本次作业我们最终选择了墨刀作为原型工具,理由如下:
3.2 设计过程
使用频率分析
- 高频使用功能:用户注册、登录、项目浏览、项目申请加入。
- 中频使用功能:项目管理、论坛发言。
- 低频使用功能:个人信息设置。
使用便利度设计
- 直观的导航:确保用户可以轻松地找到他们想要的功能。
- 搜索功能:提供强大的搜索功能,帮助用户快速找到项目或合作伙伴。
隐私性与安全性
- 考虑到学校中的学号和姓名容易获取,因此一定要通过邮箱注册
需求分析
通过阅读作业要求和队内讨论,可知需求包括:
- 登录与注册:用户注册、用户登录
- 项目:创建项目、加入项目、我的项目管理
- 个人信息:查看自己与他人信息、修改个人信息
- 沟通:消息(用于项目内交流)、论坛
- 智能匹配:推荐人员和项目、搜索
界面结构确定
UI风格选定
我们调研了市面上主流社交软件,同时采用蓝白色调为主,清新简约的,参考了墨刀教程。
组件设计
根据实际内容选择墨刀自带的组件,如按钮、输入框、文本框、下拉框、浮层等。
交互设计
本次作业的交互部分主要包括:①页面跳转 ②浮层效果 ③动态组件
1.页面跳转:对相应的组件添加事件——单击时页面跳转,并选择指定跳转页面
2.浮层效果:点击按钮会跳转到相应状态或页面,部分操作有弹窗提示操作成功,使用户使用更安心。
3.动态组件:点击邀请按钮后变成已邀请,无法再次点击
4.结果汇报
4.1 原型展示
动图展示:
-
用户注册:
-
项目创建:
-
项目加入:
-
我的项目管理:
-
退出项目:
-
退出登录:
-
查看消息、从消息中查看项目信息:
-
查看论坛:
-
查看并修改个人信息:
各页面展示:
画布展示:
查看我创建的项目
查看我加入的项目
查看项目详细信息
登录
点击请求加入页面
发起项目界面
个人信息
个人信息修改
加入项目选择
论坛
人员匹配个人信息查看
区块链技术论坛(仅演示该论坛)
项目消息
项目删除
退出第一个项目后
项目消息
项目消息-项目详情
消息
修改项目界面
允许加入项目
在校生注册
职工注册
智能匹配人员
智能匹配项目
主页面
注册菜单
4.2 困难及解决办法
困难一:原型设计工具的选取
- 困难描述:作业初期,我们两人因为都是第一次尝试原型设计,所以在选取原型设计工具上陷入了困境。
- 解决尝试:通过信息收集,我们在形形色色的原型设计工具中筛选出Axure和墨刀这两款主流工具。后经过多方对比,我们发现墨刀可以兼容Axure的文件,而Axure不能兼容墨刀的文件,墨刀在兼容性上更具优势,且网络上墨刀的教程更丰富,利于像我们这样的小白快速上手。
- 是否解决:是
- 有何收获:通过解决原型设计工具选取的困难,我们学会了信息收集与对比,团队合作与共识,以及快速学习和适应能力。这些收获不仅帮助我们解决了当前的问题,还培养了我们的综合能力和自信心,为未来面对各种挑战和困难提供了宝贵的经验和技能。
困难二:动态组件的使用
- 困难描述:由于刚开始接触墨刀,在原型的设计过程中,不熟悉动态组件等的使用,常遇到按钮跳转失效等问题。
- 解决尝试:学习墨刀高级教程,边实践边总结,在付出了足够多的学习时间后,最终得出了通过多状态切换来使用动态组件的经验。
- 是否解决:是
- 有何收获:学习与实践相结合,作为计算机专业的学生,常查阅文档教程,通过学习文档教程来理解知识与解决问题,并通过实际操作和不断尝试来加深理解最终达到熟练。这种学习与实践相结合的方法能使我们在今后的生涯中更好地成长。
困难三:页面高度变化的问题
- 困难描述:在实现详细赛况页面的时候,发现当动态组件展开后会占据更多的页面内容,而墨刀不具备动态改变页面高度的功能,导致页面留了很大一块空白。
- 解决尝试:经过网上搜索和与其他同学进行交流,发现一个一个画布可以放置多个页面,每个页面对应不同组件状态,能够让页面高度适应组件高度。
- 是否解决:是
- 有何收获:要具备信息获取的能力,既包括从互联网上获取,也包括从与他人的交流中获取,这是程序员的必修课。
问题四:页面布局/组件反复修改麻烦
- 困难描述: 页面设计总是难以达到预期,组件或布局反复调整很麻烦;同时具有某一组件大量使用,组件修改时需全部替换的情况,增大工作量、降低效率
- 解决尝试: ①提前画设计图。设计好页面总体布局,组件大致排布状态,可以一定程度减少后期调整难度。②了解到墨刀具有母版功能,当出现一个自定义组件反复大量使用的情况,可将该组件设置为母版,当需要更改时,仅需调整模板即可完成任务。
- 是否解决:是
- 有何收获:计划和提前设计、草稿有利于后期效率的提升,条理性有利于任务的更好完成。同时要善于利用软件/平台的相关机制提高作业效率。
问题五:组件层次问题/部分组件在预览状态出现消失情况
- 困难描述: 页面和大组件是由很多组件层叠/拼凑而成,有时出现某一组件并不出现在指定位置上或消失的情况;某一页面制作完毕后点击预览发现组件消失
- 解决尝试: 首先尝试设置组件层次(置于顶层/底层),这一方法可以解决部分问题,但对于复杂的由大量组件构成的情况不大适用。后面发现新生成的组件默认覆盖于原本存在的组件之上,通过复制粘贴调整了分散组件状态,最后将调整完毕的组件进行组合。
- 是否解决:是
- 有何收获:多试试可能可以发现问题+设置母版在这个适合也能发挥大用处。
5.PSP表格与效能评估
5.1 PSP表格
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 10 |
• Estimate | • 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 670 | 830 |
• Analysis | • 需求分析 | 30 | 40 |
• Learning | • 学习原型设计工具 | 120 | 180 |
• Discussion | • 结对讨论 | 60 | 60 |
• Design Spec | • 生成设计文档 | 40 | 30 |
• Design | • 界面原型设计 | 360 | 420 |
• Test & Improvement | • 原型测试与改进 | 60 | 100 |
Reporting | 报告 | 80 | 80 |
• Achievements Exhibition | • 原型成果展示 | 20 | 20 |
• Problem Analysis & Postmortem | • 问题分析和事后总结 | 60 | 60 |
合计 | 760 | 920 |
5.2效能评估
在此次原型设计完成过后,通过比对PSP表格中预估耗时和实际耗时,我们发现主要的差距是学习原型设计工具、界面原型设计、原型测试与改进三个方面。
学习原型设计工具
- 原因:缺乏及时反馈和评估机制。在学习原型设计工具的过程中,如果没有及时的反馈和评估机制,团队成员可能无法准确地了解自己的学习进展和存在的问题,从而导致效率低下和错误的学习方向。
- 思考: 建立反馈和评估机制。为了提高学习效率,可以建立一个及时的反馈和评估机制。这可以包括定期的学习评估或者考核,通过实际操作和问题解答来检验团队成员的学习成果。同时,鼓励团队成员互相之间进行反馈和交流,提供支持和辅导,及时纠正错误和改进学习方法。
界面原型设计
- 原因: 缺乏对设计目标和核心功能的明确理解。在界面原型设计中,如果团队成员缺乏对设计目标和核心功能的明确理解,可能会导致设计过程中出现模糊和不一致的情况,影响设计的一致性和用户体验。
- 思考: 明确设计目标和核心功能。在开始界面原型设计之前,团队成员应该与项目相关人员充分沟通,明确设计的目标和核心功能。这包括了解产品的定位、用户需求和关键功能,以及项目的时间和资源限制。只有明确了设计目标和核心功能,团队成员才能更好地聚焦设计工作,避免不必要的功能和界面冗余。
原型测试与改进
- 原因: 缺乏有效的项目管理和跟踪机制。在界面原型设计过程中,如果没有建立有效的项目管理和跟踪机制,团队成员可能会在设计过程中遇到困难或有收获时没有及时记录,导致后续总结时遗漏细节或效率低下。
- 思考: 建立有效的项目管理和跟踪机制,包括使用任务管理工具、定期召开会议和使用协作工具和备忘录,以及进行阶段性总结和回顾,团队成员可以更好地记录和回顾设计过程中的收获和见解,提高总结的质量和工作效率。
6.结对过程与队友评价
6.1结对过程
布置任务的第一天就安排了做作业的时间,然后两个人一起讨论需求,确定功能,然后一起分工。创建了墨刀的合作账号,一起制作原型,讨论界面的风格和细节,一起测试原型,修改原型。共同写了报告。
6.2 结对感受
- 林烨(102202130):结对开发更考验双方的默契和凝聚力。在原型设计中,需要找到共同点进行设计。在进度推进过程中,相处得非常愉快,总有一种事半功倍的感觉。团队协作的好处在于思维的碰撞和解决问题的方式不同,可以相互帮助,提高设计效率,在进行设计和修改时可以参考队友的意见,有更多的选择。结对作业的优势在于可以更高效地分工合作,我们成功利用团队协作工具完成了任务。经过本次作业,学会了墨刀的使用和原型的设计。
- 陈高菲(042201401):虽然从没做过原型设计,但在结对的过程中增加了默契也学会了初步的原型设计。跟上次作业相比,这次作业还算顺利。墨刀很容易上手,网上也很多教程和资料。刚开始设计原型的时候我们的制作风格不太一样,最后以简洁美观大方为设计要求统一了我们的设计风格。
6.3队友评价
- 林烨(102202130):高菲是一个出色的队友,她有快速学习的能力和行动力。能够快速掌握新技术和工具,并在项目中灵活运用。她展现了积极主动的态度,能够与队友充分沟通和协调。工作态度认真负责,能够按时完成任务并保证质量。与高菲一起合作十分愉快。
- 陈高菲(042201401): 林烨是一个非常有能力的队友,她具有出色的技术能力、深厚的专业知识和极强的学习能力。她在这次结对作业中展现了高效的工作风格,能够迅速解决问题、学习新技术并提供创新的解决方案。她对任务的理解和执行非常准确,能够按时高质量地完成工作。此外, 她具有良好的沟通能力,能够清晰地表达自己的想法,并与团队成员积极合作。与林烨合作是一种愉快的经验,期待未来继续与她一起完成组队作业。