Является ли наличие определенных сценариев пользовательских историй злом?

Итак, я знаю, что когда дело доходит до сценариев пользовательских историй, конкретность - это хорошо . Однако я часто дохожу до момента, когда спрашиваю себя: насколько конкретным должен быть мой сценарий?

Например, для пользовательской истории:

Для того, чтобы участники проекта могли совместно работать над проектом в качестве менеджера проекта , один, чтобы быть удобным при написании спецификаций BDD. Где что-то вроде scottTheProjectManager вместо projectManagerStub:

  • больше соответствует реальному миру (у нас нет заглушек, работающих в качестве менеджеров проектов ... или нет?)
  • легче ссылаться, когда это необходимо в контексте этой спецификации (в противном случае я буду продолжать говорить «тот менеджер проекта» или «руководитель проекта, который зарегистрировал проект» ... и т. д.

Прав ли я в своем заключении? Вредит ли мне эта специфика, когда в истории произойдут изменения?

Большое спасибо!


Обновление

Вопрос выше касается не только наличия имен людей вместо имен ролей , но и замены всех заполнителей в вашем сценарии с именами реальных экземпляров. А на реальных экземплярах я не Это означает, что у нас действительно есть некто по имени Скотт, работающий менеджером проекта, он просто дает имена абстрактным заполнителям, чтобы реализовать вышеупомянутые преимущества.

Я попытаюсь показать, как эти преимущества реализуются, включив следующий код, который представляет полная спецификация стиля BDD с использованием фреймворка StoryQ

[TestFixture]
public class ProjectRegistrationSpecs
{
    [Test]
    public void ProjectRegistration()
    {
        new Story("Project Registration")
            .InOrderTo("allow project members to collaborate over a project")
            .AsA("project manager")
            .IWant("to be able to register new projects")
                .WithScenario("New Project Registration")
                    .Given(ScottIsAProjectManager)
                        .And(StackoverflowIntegrationProjectHasNeverBeenRegistered)
                    .When(ScottRegistersStackoverflowIntegrationProjectSpecifyingJaneAsAnAnalyst)
                    .Then(StackoverflowIntegrationProjectShouldAppearInJanesListOfProjects)
        .Execute();
}

//Since Scott and Jane are just instances that have meaning in the context of this user story only, they're defined private
private ProjectManager scottTheProjectManager;
private Project stackOverFlowIntegrationProject;
private Employee janeTheAnalyst; 

    //Initialize the stubs in the constructor
    public ProjectRegistrationSpecs()
    {
        scottTheProjectManager = new ProjectManager()
        {
            Id = new Guid("{A1596CFC-5FA5-4f67-AC7E-5B140F312D52}")
        };

        stackOverFlowIntegrationProject = new Project()
        {
            Id = new Guid("{F4CD5DDE-861E-4e18-8021-730B7F47C232}"),
            Name = "Stack Overflow Integration"
        };
    }
    private void ScottIsAProjectManager()
    {
        container.Get().Repository().Add(scottTheProjectManager);
    }
    private void StackoverflowIntegrationProjectHasNeverBeenRegisteredInTheSystem()
    {
        var provider = container.Get();
        var project = provider.Repository().SingleOrDefault(p => p.Name == stackOverFlowIntegrationProject.Name);
        if (null != project)
        provider.Repository().Delete(project);
    }
    private void ScottRegistersStackoverflowIntegrationProjectSpecifyingJaneAsAProjectMember()
    {
        stackOverFlowIntegrationProject.Members.Add(janeTheAnalyst);
        scottTheProjectManager.RegisterProject(stackOverFlowIntegrationProject);
    }

    //instead of saying something like TheProjectThatWasAddedByTheProjectManagerShouldAppearInTheProjectMembersList, we have: 
    private void StackoverflowIntegrationProjectShouldAppearInJanesListOfProjects()
    {
        Assert.That(janeTheAnalyst.Projects.Any(p => p.Id == stackOverFlowIntegrationProject.Id));
    }
}

7
задан Montag451 10 June 2014 в 07:13
поделиться