Answers:
字面回答“定义得如何?” 是
定义明确,足以开始使用。
定义明确,足以确定初始工作范围(针对初始概念)。这足以帮助确定不可避免地发生的更改。
定义明确,足以优先考虑冲刺。
我指的是定义用例,
总是有帮助的。但不是全部。您首先要确定优先级并涵盖重要的用例。其他用例将在以后的版本中介绍。有些用例的优先级很低,它们将永远无法完成。
分析风险,
通常浪费时间。
绘制类图等
如果有帮助。
通常在开发之前的计划阶段花费项目时间的百分之几?
它变化很大。购买一本好书,例如Software Engineering Economics,以获得“权威”数字。
在开始编写代码之前,您是否想满足某些可衡量的标准?或者仅仅是胆量?
“可衡量的”。这几乎是不可能定义的。
“胆量”。错误的政策。
问题是“您了解自己在做什么吗?”
这不是直觉。这是一个是/否问题。
这不是“可测量的”,因为它只是一个是/否问题。
而且,您还必须确定优先级。你什么都不做。刚好足以应付前几个冲刺。
您是在开始编写代码之前就绘制了所有类的图,还是主要是希望从一开始就创建一个动态设计,以期望事情会发生变化?
您无法事先了解所有内容。
不要尝试
如果您的客户以项目团队成员的身份积极加入该项目,那么开发人员可以向他们提出问题并快速做出有关功能的决策。然后,该规范可能不太详细。
如果您的客户距离很远并且长时间无法获得反馈,那么您的规格应该非常详细。
在我们公司,我们创建用户故事,并与该项目的开发人员一起玩Planning Poker。这可以使我们清楚地了解花费在用户故事上的时间。
该项目需要达到的定义足够好,足以让您入门并知道接下来两周的发展方向。
作为Scrum Master,我只想简单地说,您需要在Excel工作表或其他任何地方定义产品的主要功能,而只是为了跟踪您的功能。使它们成为用户故事可以帮助您思考下一步需要什么功能。然后,对它们进行优先级排序:最重要或命令式功能放在顶部,最不重要的位置放在底部。
列出一些最重要的功能后,请选择您认为可以开发的功能,在两周或一个月的时间后,如果愿意,可以将其设置为“完成”状态。然后,展开这些选定的功能,以便您可以开始进行一些编码。
在编码时,您一定会想到需要开发其他元素才能使所选功能进入“完成”状态。完成意味着您无事可做,也就是说,测试,编码,组装,说明文件都完成了!
只要您达到目标,即可以在给定时间内开发您想要的所有功能,您选择的功能列表随时可能会扩展。
简而言之,没有什么是完美的。提出一些想法,与您的同志分享,看看所写的内容是否符合要求的产品要求。如果是这样,那么您就来了!为了清楚起见,我将使用一个简单的客户管理产品。需要什么?
As a user, I may manage the Customers;
As a system, I persist changes to the underlying data store;
As a user, I need to enter my credentials to be able to manage customers;
As a system, I have to authenticate the user against the Active Directory;
您的初稿就这么简单!然后,我们可以看到安全性是我们系统中的重要部分,是否足以使最终优先级(Y / N)足够重要?这将取决于您必须满足的要求。假设客户管理是这里最关键的事情。因此,在下一个Sprint中,我们需要能够以一种基本但可以接受的方式来管理客户。什么是客户管理?
As a user, I may manage Customers;
-> As a user, I add a customer to the system;
-> As a user, I change a customer details;
-> As a user, I delete a customer;
-> As a system, I flag a deleted customer as being inactive instead of deleting it;
-> As a user, I need to list the customers;
-> As a user, I search the customers data bank for a given customer;
-> ...
这已经说明了足以开始开发应用程序的功能。如果您的程序员需要进一步的说明,那么也许一个熟悉类图的开发人员可以设计Customer类及其属性和方法!但是就我而言,我写的这几本书,足以让我开始。在此过程中可能会添加或更改某些功能。重要的是要专注于您所说的将要完成的内容。在我们的示例中,这是客户管理事务。到目前为止,我们不需要关心用户身份验证。这将在下一个Sprint中介绍。
我希望这有帮助!=)
好吧,最适合我的是指定了“相当好”的功能,而软件体系结构只是非常宽松地指定。
为了让我开始工作,我需要知道我正在努力。当我仅了解客户的需求时,它对我不起作用。即使编写自己使用的工具,我也会绘制屏幕,描述功能,每个按钮的功能以及所有功能。否则我发现我无法开始。
另一方面,我已经放弃了真正绘制出我将如何开发代码的确切方式。也许这是最糟糕的做法,但这对我有用。我可能会定义一组将创建的数据库表,但不会定义每个表中的列。我可能会考虑需要什么对象和类,但是我绝对不会绘制图表。
天哪,有时候我什至不知道怎么做才对,直到我做错了。现在,我知道该怎么做,将其构建一次,拆下然后再做一次。此时,我可以绘制一个非常详细的路线图并重新启动。
您使用什么语言和方法?
诸如Java和C ++之类的某些语言比诸如Common Lisp或Python之类的语言需要更多的初始结构(C ++比Java多,因为在Java中重构更容易)。Leo Brodie(我认为在“ Thinking Forth”中)就何时开始编码给出了两条建议:比您对使用Forth感到自在的时间要早,比对其他语言的使用要晚。
瀑布方法论(特别是在早期设计可交付使用时)将比敏捷性需要更多的前期工作(尽管您也不想忽略敏捷性方法的早期计划)。拥有一套良好的自动化测试可以使您更安全地进行较大的更改,因此可以减少前期工作。
而且,这取决于个人及其对要创建的软件类型的熟悉程度。有时候,当主要使用CRUD应用程序时,我可以编写一个完整的程序,其中包含一些规格和一张3“ x5”的空白便条纸。我不能像现在这样写东西。
这里有两个有用的术语:MVP(最小可行产品)和MMF(最小可销售功能)。MMF是可带来业务价值的功能的最小版本。MVP是作为产品可行的最少的MMF。启动项目时,最好的办法是识别MMF和MVP并从那里开始。
尽快发布您的产品,然后继续逐步改进它。