现代信号分析和处理 pdf
在产品开发方面代码是第一件事吗? 何时定义功能并评估风险 关于部署,应该在软件完成之前还是之后进行计划
这些以及其他类似的问题揭示叻产品开发中所涉及流程的复杂性。 您对每个阶段所涉及的内容的理解越好您就越能交付预期的结果。
在本系列中我们将涵盖整个软件开发过程,从计划开始以维护结束。 重点将是流程是什么涉及的人(某些步骤不需要开发人员)以及作为初级或中级开发人员应期朢/做的事情。
该系列的第一部分将探索前两个步骤:计划和分析 我们的目标是定义每个步骤的目的,确定参与方并确定您作为初级或中級开发人员的角色 自然,这个过程因公司而异因此我们将为不同规模的团队解决一些常见的情况。
为了明确起见“计划”在这里指嘚是软件产品:将要构建的内容和构建过程,而不是特定功能的实现
构建软件很复杂。 开发人员需要编写添加功能没有很多错误,易於阅读和调试易于维护且易于更改,遵循约定等的代码
此外,系统必须具有99.99%的正常运行时间同时要进行安全,保护和良好的优化必须有可靠的数据备份,并且用户体验应该令人愉悦 如果要使软件产品成功,则必须从业务角度规划和研究系统的功能
不幸的是,規划功能和过程是开发产品时最容易被忽视的方面之一即使它决定了整个项目的目标和验收标准。 无法准确地决定要建造什么以及无法选择正确的工作流程,最终会花费大量时间和金钱
关键是要建造什么 ; 关注最终目标,而不是目标 从纸面上看,一切都很便宜且易於构建但实际上并非如此。 重要的是要牢记将要处理该项目的团队的吞吐量
您不能现实地构建一个只有两个人就能与当前引擎竞争的遊戏引擎。 但是如果一个项目不够雄心勃勃,则可能不值得建设 如果以启动场景为例,安全项目并不是赚大钱的项目—实际上它们佷少能幸免于最初的三到九个月。
选择正确数量的关键业务功能(使产品成功)和使产品失败(这是因为开发团队无法交付质量合格的产品)之间的界限很窄
如您所见,规划非常棘手 由于过程的这一部分主要是关于产品开发人员的,因此要求软件开发人员提供他们的输叺通常非常有限 不幸的是,随着时间的推移对于新项目和功能,许多经验丰富的开发人员(就公司而言)将变得不那么雄心勃勃更加保守。
为什么发生这种情况是一个很长的讨论 要点是,有些人不想使当前的工作复杂化有些人会随着时间的流逝而变得懒惰,最后囿些人看到了雄心勃勃的项目在过去如何导致许多无偿 并且不热衷于经历这个过程再次出现。
根据公司的规模和结构将由不同的人来進行计划,但是除了功能之外还必须确定几个因素:
-
发展的艰难时期。 应该释放多少时间
-
“完成”的定义。 预计将作为最终产品交付
-
建立它的团队。 在大公司中仅此过程就可以组建全新的团队。
-
风险评估 应该考虑某些风险,通常是最关键的风险
对于大公司,通瑺不会将开发人员带入计划或设计中因为计划是非技术性的。 对于小型公司而言很可能会公开或公开讨论许多信息。
作为初级开发人員大多数时候您不会知道计划的内容。 如果公司是透明的并且可以向您提供有关可能项目的信息,那么您最好的办法就是专注于当前嘚任务为公司带来尽可能多的价值。
即使四处询问和提出建议可能很诱人但这超出了您的范围,而硬道理是作为一个大三学生,您嘚想法几乎肯定会浪费其他人的时间
我去过那里好几次了,回首过去我能理解为什么人们对我很矮。 让企业弄清楚什么能赚钱 这是怹们的责任,最适合他们如果失败,应该责怪他们
专注于您当前的任务。 不要通过假想的方式改变您的时间和精力来破坏当前的项目 大多数项目(想法)在开发之前就被废弃了。 通常存在太多风险或所需资源导致可疑的投资回报。
如果您是经验更丰富的开发人员則应首先确保您的任务不落伍。 如果项目的计划变得越来越认真则可能需要对某些技术进行一些研究,这些技术可以在您构建项目时为您提供帮助 例如,市场上已经存在哪些技术它们将使用什么?
即使通常由架构师来设计系统经验丰富的开发人员的意见也总是会在優秀的公司中珍惜。
公司的规模通常会决定流程的形式通常会决定透明度。 通常公司越大,人们对各种知识的掌握就会越严格因此茬很多情况下,当您在大公司工作时您将不会真正知道幕后情况和正在发生的事情。计划
这不一定是一件坏事。 这更多是一项政策洏不是有意地使人们陷入困境。 并不是知道公司的未来项目会帮助您更快地完成当前的工作而且如果即将到来的项目很无聊,甚至会激勵人们
务实,先做好您的工作然后再在其他地方做贡献。
通常要确定的最后一件事是支持软件:错误跟踪器Wiki,以及诸如冲刺持续时間之类的某些流程
对于支持软件来说,帮助团队而不是浪费他们的时间很重要 人们通常会选择复杂的支持软件,这些软件具有较高的學习曲线需要大量时间让开发人员习惯,并且最终会损害产品而不是提供帮助
现在,对于应该构建什么以及如何将其货币化有了一个唍整的想法我们需要在技术上和非技术上全面评估该产品。
到目前为止我们正在构建的产品总结可能听起来像:
“我们将为X的本地聚會建立平台。 我们将通过与当地企业(主要是餐馆和咖啡馆)的合作伙伴计划提供住宿因此聚会可以得到特别优惠,并且本地企业可以吸引新客户 使用Scrum并每两周进行一次冲刺,将有大约10 *人参与该项目”
(* 10是一个粗略的估计。在分析阶段之后或多或少的人可能必须工莋。)
需要尽可能全面地定义功能以便可以进行相应的设计。 我们是人类我们会犯错误。 某些功能会随着时间的推移进行更改和更改昰正常的但是每次更改都会增加构建产品所需的时间和成本。
用户故事是开始定义功能的最常见方法之一 用户故事是描述一个或多个鼡户操作的图表,图形有时甚至是文本。 这些动作通常是首先构建的功能 即使您每秒可以处理10,000个请求,但是如果您的用户无法使用该軟件也无关紧要
让我们回到本地会议系统的示例。 这些聚会需要以某种方式进行组织
让我们写一些用户故事,看看我们可以衍生出哪些功能!
用户登录系统 他创建了一个聚会,并向他的一些朋友发送邀请
如您所见,该用户故事解释了用户的操作但是如果我们必须茬此基础上设计或实现系统,它并不是特别有用
想一想。 用户将如何登录 他们在系统中有注册吗? 如果是这样是用户名还是电子邮件? 那么Facebook或Google登录名呢 支持那些吗? 我们所知道的是系统有用户
我们已经有了所有这些问题,并且只在用户故事的第一句话中
这里应該做的是仔细考虑系统应支持的注册类型。 这是一个复杂的过程因为要考虑很多因素。 目标用户群是否使用这些平台中的任何一个 使鼡它合法吗? 如果我们用于身份验证的平台决定不使用它将会发生什么?
假设我们已经完成了研究并且仅会使用Facebook登录名。 然后我们鈳以将用户故事重写为:
如果我们支持多种登录方式:
您可以在此处添加任意数量的详细信息,只要用户故事描述了用户的行为而非系统荇为 一个不好的用户故事的例子是:
用户通过Facebook登录到系统。请求被发送到我们的系统后端从而开始新的会话。
关于应如何详细的用户故事有两种主要观点:
使用适合您的方式。 就个人而言我更喜欢详细信息,但我理解这样的论点即必须阅读一些充满细节的句子有時会令人生畏并且令人生厌,尤其是如果您想全面了解用户可以做什么而不是如何做做吧
分析过程通常在以下情况下结束:为大多数用戶操作创建了用户故事,并且在研究和分析之后做出了大多数高风险决策
尽管大多数公司的流程通常是相同的,但是从事工作的人员可鉯是一个团队几个团队或一个人。 用户故事可以是pdf格式也可以是用软件绘制的,白板上的图片甚至是便利贴。
工件不是那么重要 偅要的是要确定功能,以便可以正确完成系统的体系结构
从我在大型和小型公司中所看到的来看,区别通常在于工件的形式上 公司规模越大,需要更多的人来查看和批准这些人工制品因此,如果一切看起来都很好那就更好了。 在一家只有几个人的创业公司中几张照片和几张纸就足够了。
当您将用户故事视为开发人员时无论您的经验如何,最好问自己尽可能多的问题以确保没有任何可能导致项目延迟的主要未知因素。
您必须这样做这不仅是因为您是一名优秀的员工,还因为如果您留下了一些重大失误那么加班就不会完全是管理层的错。 这是最常见最关键的错误,可能导致 为大家着想,尽最大努力避免这种情况
不要误会我的意思,事实证明估算并不昰一门精确的科学,但是由于可以避免的错误而与??家人和亲人失去时间是最令人毛骨悚然的事情之一
没有适当的计划和彻底的需求汾析,该项目必然会失败 如果这些步骤的工件是格式良好的pdf或几张纸,则没有什么价值
重要的是要花费足够的时间并让足够多的人来獲得精确的流程,用户故事和需求以便可以在给定的时间内以可接受的质量设计,开发和部署该软件
请记住,计划和分析是通常由公司业务部门(分析师业务开发人员等)进行的流程。 他们的工作是找到问题和解决方案找到市场并评估风险。 尽管参与该过程可能很誘人但是最好的方法是将精力集中在当前的任务上,并在计划分析和风险评估结束时提出任何疑虑和建议。
构建软件时将使用的支持軟件和流程必须帮助相关人员 如果某个过程或工具对其用户造成压力,则应进行更改
现代信号分析和处理 pdf