软件工程第一次结对作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/SE2024/ |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2024/homework/13261 |
这个作业的目标 | 1.学习《构建之法》中的第三章与第八章 2.利用NABCD模型设计一款软件 |
学号 | 102201327 |
队友黄宇舟 102201331
使用工具:墨刀
原型链接
《构建之法》学习
第三章 软件工程师的成长
1.IC在团队中的开发流程
- 通过交流、实验、快速原型等方法,理解问题、需求或任务
- 提出多种解决办法并估计工作量
- 其中包括寻找以前的解决方案,因为很多工作是重复性的
- 与相关角色交流解决问题的提案,决定一个可行的方案
- 执行,把想法变成实际中能工作的代码,同时验证方案的可行性和其他特性(例如程序的效能等)
- 和团队的其他角色合作,在测试环境中测试实现方案,修复缺陷(Bug)。如
- 果此方案有严重的问题,那么就考虑其他方案
- 在解决方案发布出去之后,对结果负责每个人的工作质量直接影响最终软件的质量。
2.个人能力的衡量与发展
积累软件开发相关的知识,提升技术技能
积累问题领域的知识和经验
对通用的软件设计思想和软件工程思想的理解
提升职业技能 (包括:自我管理的能力,表达和交流的能力,与人合作的能力,按质按量完成任务的执行力)
实际成果 (参与的产品用户评价如何,市场占有率如何,对用户有多大价值?在其中起了什么作用)
3.软件开发工作量与质量衡量
a . 项目/任务有多大?说明项目的大小,一般用代码行(Line Of Code,LOC)来表示;也可以用功能点(Function Point)来表示。
b . 花了多少时间?可以用小时、天、月、年来表示。一组人所费的时间可以用(人数×时间)来表示,例如某项目花费了10个人×月。
c . 质量如何?交付的代码中有多少缺陷?
4.学习技能的误区
在软件开发和工程领域,很多人追求技能的掌握,但往往忽视了真正解决问题的能力。技能可以是记忆某些套路或口诀,而解决问题则是理解这些口诀背后的原理,并能在实际操作中灵活应对。
在学习和工作中,追求技能的同时,更要注重解决问题的能力。技能的掌握固然重要,但理解技能的本质、灵活应用并解决实际问题才是核心竞争力。
第八章 需求分析
1.软件需求
- a.获取和引导需求
- b.分析和定义需求
- c.验证需求
- d.在软件产品的生命周期中管理需求
软件需求划分为以下四种
1) 对产品功能性的需求
要求产品必须实现某些功能。例如,学校的选课软件只允许有学生身份的用户浏览并选择课程,同时要求学生选择某一门课时必要满足“先修课”的要求,等等。
2) 对产品开发过程的需求
要求软件的开发流程必须满足某些约束条件,例如,开发过程必须产生某种类型的文档,必须在某个时间点达到某个状态,必须对源代码施以某种约束(安全性核查、代码版权核查、代码规范和支持文档的核查)。
3) 非功能性需求
这也叫“服务质量需求”(Quality of Service Requirement),例如,股票交易系统必须在一定时间内返回用户查询结果(它对时间的要求要比“科技文献检索”网站要高),火车票购票系统、大学选课软件必须能支持一定数量的用户同时访问,等等。
4) 综合需求
有些需求并不是单单一个软件模块就能满足,例如,“购物网站必须在24小时内把货物发送到用户手中”,这个需求牵涉到软件系统、货物派送系统、送货部门、监控系统等不同部门的功能和执行能力。软件团队和客户代表要在需求阶段把这些问题定义清楚。
2.软件产品的利益相关者
在软件开发中,识别和管理利益相关者至关重要,主要包括:
- 用户(End-User):直接使用软件的人,可能有多种角色,如打车软件中的司机和顾客。
- 顾客(Customer/Client):购买软件或接收软件的人,关注软件的功能和效果,例如家长为孩子购买教育软件。
- 市场分析师:代表典型用户需求,帮助团队了解市场趋势。
- 监管机构:确保软件符合行业标准和法规,特别在银行和公共交通等行业。
- 软件工程师:参与需求讨论,影响软件设计和实现,确保开发效率和可维护性。
3.获取用户需求
a.焦点小组
找到一群目标用户的代表,加上项目的利益相关者来讨论用户想要什么,用户对软件的评价等等。
b.深入面谈
通过详细的面谈,广泛而深入地了解用户的背景、心理、需求等。这通常是一对一的采访。
c.卡片分类
在收集反馈时我们可以利用“卡片分类”的办法,把各种需求做成便于规整的小卡片(也可以写在小贴纸上),然后反复进行下列活动:讨论 → 明晰定义 → 归类 → 排序这一方法可以帮助我们更好地统一大家对软件需求的认识,量化各种特性,更好地定义一个软件的信息架构、用户的工作流程、软件菜单结构、网站的浏览路径、各种内容的层次关系等。
d.用户调查问卷
这种方法是指向用户提供事先规定好的问题,让用户回答
用户调查问卷设计看似简单,但实际上存在许多潜在错误,可能影响结果的准确性和有效性。以下是一些常见的错误及建议改进的方法:
常见错误
-
问题定义不准确
例如:“你用哪一个搜索引擎?”这个问题可能导致用户提供模糊的答案,如“最近使用的”或“最喜欢的”。不明确的定义会让用户感到困惑,影响数据的有效性。 -
使用含糊不清的形容词和副词
例如,“最近”、“有时”、“很多”等词对不同用户有不同的理解,可能导致数据的不一致性。 -
额外努力要求
比如:“请问你全家平均每人每年下载多少手机应用软件?”这样的题目让用户难以迅速回答,可能导致答案的不准确。 -
引导性问题
例如:“用户普遍认为搜索引擎A收录了很多侵犯版权的资料,你会选择A还是B?”这样的问题可能会影响用户的真实选择。 -
隐私相关问题
询问用户的隐私或商业机密问题可能会让用户不愿意回答,影响数据收集。
调查问卷的问题类型
-
开放式问题
例如:“你对手机上的日程管理软件的期望是什么?”这类问题允许用户自由表达,但整理和量化较为困难。 -
二项选择题
用户只需回答“是/否”,便于统计和分析,但无法深入了解用户的意见。 -
多项选择题
用户可以从多个选项中选择,适合收集多样化的信息。 -
顺位选择题
例如:“选择手机背单词软件的主要考虑因素,并按优先级排序。”这类问题有助于了解用户的具体偏好和决策逻辑。
e.用户日志研究
这一调研方式要求用户记录自己日常工作或生活中与所用软件相关的行为,供软件团队分析。用户可以写类似日记体的文字描述,也可以每天填表(例如跟踪自己每天的饮食种类),也可以使用软件来跟踪。这是用户调查在时间上的延长,要求用户有很高的自律能力。另外,如何保护用户的隐私也是一个问题。
f.人类学调查
和目标用户“同吃同住同劳动”
g.眼动跟踪研究
h.快速原型调研
i.A/B测试
4.竞争性需求分析的框架
NABCD模型
- N(Need,需求)
- A(Approach,做法)
- B(Benefit,好处)
- C(Competitors,竞争)
- D(Delivery,推广)
5.功能的定位和优先级
**功能分析的四个象限
- 杀手功能:OCR文字识别技术,可以在屏幕上取词解释,拥有独家权威词典,等等。
- 外围功能:良好的界面设计,在各个平台上都能运行。
- 必要需求:单词短语释义的准确性(如果达不到这一点,用户就不会来使用)。
- 辅助需求:可以做各种皮肤(这也许能让一些用户更喜欢这个软件,但不是决定因素)。
**对四个象限的不同建议
6.项目复杂程度
- 项目的复杂程度将由下面两个因素决定:
- 需求的复杂程度:程序员是第几次实现类似的需求?有些外行看起来很复杂难
懂的需求(如银行业务流程),如果一个程序员已经做过多次相关的银行项目,
其实不像外人看的那么难。- 技术的复杂程度:程序员是第几次用这个技术实现?一个极端的例子:几个程
序员用他们从来没用过的技术(例如HTML5,iOS客户端开发)去实现一个他们
以前没碰到过的需求(例如银行业务),他们的时间估计一定会很飘忽。业界的
专家也有类似的分析,例如下面这个项目/过程复杂度的二维图
跨专业项目合作平台的NABCD模型
1. N(Need,需求)
在大学环境中,学生面临跨专业合作的挑战,包括:
- 找不到志同道合的合作伙伴,尤其是在需要多学科支持的项目中(如创业、学术研究)。
- 由于课程安排和个人想法的差异,难以协调时间和目标,导致合作难度加大。
- 缺乏一个集中的平台来持续支持跨专业项目的发展。
2. A(Approach,做法)
为满足这些需求,设计一个跨专业合作平台,主要做法包括:
- 用户注册与认证:学生和导师通过学号和邮件注册,确保身份真实性。
- 项目发布与搜索:用户可以发布项目需求并按专业和技能筛选合作伙伴。
- 沟通与协作工具:内置即时消息和讨论区,促进团队成员之间的交流。
- 项目管理功能:任务分配和进度跟踪,帮助团队高效管理项目。
3. B(Benefit,好处)
该平台的好处包括:
- 提升合作机会:通过集中资源和信息,增加学生找到合适合作伙伴的机会。
- 优化项目管理:项目管理工具提高团队的效率,确保项目按时完成。
- 增强学习与实践:跨专业合作促进知识的交流与融合,提升学生的综合能力。
- 构建人脉网络:为学生提供建立多元化人脉的机会,利于未来发展。
4. C(Competitors,竞争)
当前市场上存在一些类似的平台,但本平台的优势在于:
- 针对校园用户:专注于大学生,提供定制化的功能和支持。
- 多功能整合:结合项目管理、沟通和资源共享于一体,提升用户体验。
- 身份验证机制:通过学校身份认证,确保用户真实性,降低不良行为的发生。
5. D(Delivery,推广)
推广策略包括:
- 校园活动:在新生迎新、学术论坛等活动中进行宣传,吸引用户注册。
- 社交媒体营销:利用学校的社交媒体账号发布平台信息,吸引学生关注和使用。
- 合作伙伴关系:与学校各个院系和学生组织建立合作关系,推动平台的使用。
- 用户反馈机制:根据用户反馈不断优化平台功能,提升用户体验,鼓励口碑传播。
流程图
演示
- 注册
- 项目大厅
- 项目管理
- 消息
- 我的
PSP表格
任务名称 | 预计完成时间 | 实际完成时间 |
---|---|---|
《构建之法》阅读 | 3h | 5h |
墨刀工具学习 | 2h | 2h |
需求分析 | 6h | 8h |
原型构建 | 6h | 7h |
总时间 | 17h | 22h |
总结
102201331黄宇舟
本次作业主要围绕以下几个核心步骤展开,从需求分析到工具选择,再到最终的原型构建,流程清晰,层次分明。
- 书籍阅读与模型学习
- 首先,阅读了《构建之法》第三章和第八章的内容,并结合NABCD模型对用户需求进行总结与分析。
- 在工具选择方面,墨刀被选定为原型设计工具。选择墨刀是因为他易于上手,适合初学者,并且可以快速构建出高效且美观的原型。
- 需求分析
- 需求分析是项目开发中最关键的关节之一。通过对用户注册与登录、项目大厅、项目管理、纤细、个人中心等功能的分析,明确了系统应包含的主要模块和功能。
- 模型构建
- 最后,基于需求分析结果,利用墨刀工具进行原型构建。原型图的设计直观地展示了系统的界面和操作流程,确保用户在实际使用时能有良好的体验。
整个作业流程从理论学习到工具操作,最后到需求分析与原型构建,步骤有序,覆盖面广。该流程帮助我们全面理解了软件开发的关键环节,
尤其是在用户需求和功能设计方面的深入思考,使得后续的开发工作能够更加顺利展开。
通过这种方式,不仅提升了团队的协作能力,也帮助我们在理论与实践中找到最佳的结合点,为后续的编程工作打下了坚实的基础。
102201327施靖杰
在本次作业中,我学习了在团队中开发软件里个人所需要做的工作,也在学习与开发中实践了这部分理论。在团队中,我学会了在开发前通过交流与快速原型的方法理解问题与需求,并提出多个方案,并在开发前及时发现问题,减少工作量。
在学习《构建之法》的过程中,明白作为软件工程师该如何衡量自我与提升自我,要通过更多的学习与练习增加自己的水平。更重要的是知道了学习技能的误区,只是背套路与口诀而不理解这些口诀背后的原理不能作为自己的核心竞争力,只有理解技能的本质,灵活应用才是核心竞争力。
在设计跨专业项目合作平台的过程中,我深入思考了如何解决大学生在合作中面临的各种挑战。通过使用NABCD模型,我明确了需求、方法、好处、竞争优势以及推广策略,使整个设计过程更具结构性和针对性。通过这一项目设计,我不仅提升了自己的综合能力,也加深了对软件开发流程的理解。希望在今后的练习中能够写出自己更好的软件