Ich habe in letzter Zeit immer mehr Probleme gesehen, die denen ähneln, die in diesem Artikel über Feature-Schnittpunkte erläutert wurden . Ein anderer Begriff dafür wären Produktlinien, obwohl ich diese eher verschiedenen Produkten zuschreibe, während ich diese Probleme normalerweise in Form möglicher Produktkonfigurationen habe.
Die Grundidee dieser Art von Problem ist einfach: Sie fügen einem Produkt eine Funktion hinzu, aber aufgrund einer Kombination anderer vorhandener Funktionen werden die Dinge irgendwie kompliziert. Schließlich stellt die Qualitätssicherung ein Problem mit einer seltenen Kombination von Funktionen fest, an die noch niemand gedacht hat, und was ein einfacher Bugfix gewesen sein sollte, kann sogar dazu führen, dass größere Designänderungen erforderlich werden.
Die Dimensionen dieses Merkmalskreuzungsproblems sind von überwältigender Komplexität. Angenommen, die aktuelle Softwareversion verfügt über N
Funktionen, und Sie fügen eine neue Funktion hinzu. Vereinfachen wir die Dinge auch, indem wir sagen, dass jedes der Features nur ein- oder ausgeschaltet werden kann. Dann müssen Sie bereits 2^(N+1)
mögliche Feature-Kombinationen berücksichtigen. Aufgrund des Mangels an besseren Formulierungen / Suchbegriffen bezeichne ich die Existenz dieser Kombinationen als Merkmalskreuzungsproblem . (Bonuspunkte für eine Antwort einschließlich Referenz (en) für eine festere Laufzeit.)
Die Frage, mit der ich zu kämpfen habe, ist nun, wie ich mit diesem Komplexitätsproblem auf jeder Ebene des Entwicklungsprozesses umgehen kann. Aus offensichtlichen Kostengründen ist es bis zur Utopie unpraktisch, jede Kombination einzeln ansprechen zu wollen. Schließlich versuchen wir aus gutem Grund, uns von exponentiellen Komplexitätsalgorithmen fernzuhalten, aber den Entwicklungsprozess selbst in ein Monster mit exponentieller Größe zu verwandeln, führt zwangsläufig zu einem völligen Misserfolg.
Wie können Sie also systematisch das beste Ergebnis erzielen, das keine Budgets sprengt und auf anständige, nützliche und professionell akzeptable Weise vollständig ist?
Spezifikation: Wenn Sie eine neue Funktion angeben, wie stellen Sie sicher, dass sie mit allen anderen Kindern gut funktioniert?
Ich kann sehen, dass man jedes vorhandene Feature in Kombination mit dem neuen Feature systematisch untersuchen könnte - aber das wäre isoliert von den anderen Features. Angesichts der Komplexität einiger Merkmale ist diese isolierte Ansicht häufig bereits so involviert, dass ein strukturierter Ansatz an sich erforderlich ist, geschweige denn der
2^(N-1)
Faktor, der durch die anderen Merkmale verursacht wird, die man bereitwillig ignoriert.Implementierung: Wenn Sie eine Funktion implementieren, wie stellen Sie sicher, dass Ihr Code in allen Fällen ordnungsgemäß interagiert / sich überschneidet.
Wieder wundere ich mich über die schiere Komplexität. Ich kenne verschiedene Techniken, um das Fehlerpotential von zwei sich überschneidenden Merkmalen zu verringern, aber keine, die sich auf vernünftige Weise skalieren lassen. Ich gehe jedoch davon aus, dass eine gute Strategie während der Spezifikation das Problem während der Implementierung in Schach halten sollte.
Überprüfung: Wenn Sie ein Feature testen - wie gehen Sie damit um, dass Sie nur einen Bruchteil dieses Feature-Schnittraums testen können?
Es ist schwer genug zu wissen, dass das isolierte Testen eines einzelnen Features nichts annähernd fehlerfreien Codes garantiert. Wenn Sie dies jedoch auf einen Bruchteil reduzieren,
2^-N
scheinen Hunderte von Tests nicht einmal einen einzigen Wassertropfen in allen Ozeanen zusammen abzudecken . Schlimmer noch, die problematischsten Fehler sind diejenigen, die sich aus der Schnittmenge von Merkmalen ergeben, von denen man nicht erwarten kann, dass sie zu Problemen führen - aber wie testen Sie diese, wenn Sie keine so starke Schnittmenge erwarten?
Während ich gerne hören möchte, wie andere mit diesem Problem umgehen, interessiere ich mich hauptsächlich für Literatur oder Artikel, die das Thema eingehender analysieren. Wenn Sie also persönlich einer bestimmten Strategie folgen, wäre es schön, entsprechende Quellen in Ihre Antwort aufzunehmen.