美高梅娱乐4858.com[转]敏捷软件开发– 需求分析

折腾明白这些工作后,就得描绘起用户故事。用户故事的修遵循一定之规范,一般包括三部分:”作为(系统的一个涉众),我思念要(做同起事),从而(达到一个商业价值)”。在书的早晚格式比较随意,可以在故事卡背面写及注或问题,甚至打上界面原形图。 

            //先设置标题项目:如大修起,日常备件等

咱们常常看到书中说,程序员拿到一个用户故事后,怎么计划,怎么讲,怎么形容单元测试,怎么小步前进,怎么连集成。这是独立的程序员视角。事实
上,敏捷方法分为三有的,敏捷项目管理,敏捷需求分析,敏捷软件开发。上述书被涉及的净是很快开发中之履行,很多丁询问及的飞,只是敏捷的三分之一。 

 
            Workbook workbook = new Workbook();
            Worksheet worksheet = workbook.Worksheets[0];

ThoughtWorks有只品类组作的是一个网游物品交易平台。该平台是卓越的互联网项目,在动工之时段客户针对效果需求还不引人注目,但需迅速推出抢占市场,正是最符合敏捷过程的类别。 

        //一般标题样式
        protected Aspose.Cells.Style get_title_style(Workbook
workbook, Color clrmy)
        {
            Aspose.Cells.Style styleTitle =
workbook.Styles[workbook.Styles.Add()];
            styleTitle.HorizontalAlignment = TextAlignmentType.Center; 
//标题居中针对共同
            styleTitle.VerticalAlignment = TextAlignmentType.Bottom;   
//垂直底对齐       
            styleTitle.Font.Name = “Arial”;     //字体
            styleTitle.Font.Size = 11;          //字体大小
            styleTitle.IsTextWrapped = true;    //自动换行
            styleTitle.Font.Color = clrmy;
            return styleTitle;
        }
       
//————————————————————————
        // 工作表标题行,第一履行样式
       
//————————————————————————
        protected Aspose.Cells.Style set_title_style(Workbook
workbook, TextAlignmentType aliCenter)
        {
            Aspose.Cells.Style style_top =
workbook.Styles[workbook.Styles.Add()];
            style_top.HorizontalAlignment = aliCenter;                 
//标题居中针对同步
            style_top.Font.Size = 18;                                  
//字体大小
            style_top.Font.Color = System.Drawing.Color.Blue;
            style_top.Font.IsBold = true;
            return style_top;
        }
 
    }
}

(可乐语:迭代周期间的揭示、沟通、反馈、调整和迭代周期的尺寸都是极其重要的,如果为忽略,所谓的飞快也仅仅留形式,不容许再也便捷了)

        }

咱的履充分表明了,敏捷过程并无是从来不需求分析,而是将需要分析过程分散到周开发的过程被,让开发同需求分析并行进行。这即是ThoughtWorks敏捷方法执行成功之秘诀之一。而商务分析师在是进程中,起至了关节与大桥的企图,是一个团队不可少的角色。

                    }

高效方法要快交付可用之软件。实现软件之飞跃交付是由此迭代来形成。在迭代初始前,由同样组发生经验的开发人员大致评估一下用户故事,标记出不同
的难度及风险,并提出问题供商务分析师来获得重新详实的消息,商务分析师会和有关涉众去讨论。然后商务分析师将引进优先级最高的同等组用户故事为客户来摘取,
客户可以择这些用户故事,或者指出从外的见识来看底事先级重强的用户故事。这些以改为下一个迭代的内容。 

            newRow = dt.NewRow();
            newRow[“Product”] = “梦幻西游”;
            newRow[“Version”] = “3.0”;
            newRow[“Description”] = “比大话更天真”;
            dt.Rows.Add(newRow);
            newRow = dt.NewRow();
            newRow[“Product”] = “梦幻西游”;
            newRow[“Version”] = “3.1”;
            newRow[“Description”] = “比大话更天真”;
            dt.Rows.Add(newRow);
            newRow = dt.NewRow();
            newRow[“Product”] = “梦幻西游”;
            newRow[“Version”] = “3.1”;
            newRow[“Description”] = “比大话更孩子气”;
            dt.Rows.Add(newRow);

            for (int col = 0; col < columnCount; col++)
            {
                worksheet.AutoFitColumn(col, 0, rowCount);
            }
          
             

客户看到每个迭代交付的可是运行的软件后要么抱用户反映后,常常会起新的想法冒出来。有些想法是好的,有些想法就属看到别家网站来此作用,不借思索的提出的成效。这些不同的需还急需经过认真的解析,找来如何是值得我们这设想的,哪些是无须急的错过贯彻的。 

            Cells cells2 = worksheet.Cells;
            int columnCount = cells2.MaxColumn;  //获取表页的极度可怜列数
            int rowCount = cells.MaxRow;        //获取表页的不过大行数

客户一开始为无是老会经受敏捷需求面临强调商业价值和预先级的做法。但经过几只月之磨合,客户也渐渐适应了广大飞速思想,甚至自己以跟客户讨论时,偶然提起了后期的某种或的气象,他们还能够帮忙自己正应当考虑当下之图景,为多年来底情况作计划。 

                    cells.Merge(i + 6, 0, number, 1);
                    cells[i + 6, 0].PutValue(dt.Rows[i][0]);
                }

快思想的中坚是同食指交流。需求问题莫过于是一个交流问题。 商务分析师要和客户交流,搞懂客户究竟要什么,到底为什么要这些事物。商业价值
是商务分析师关注之最终目标。有矣对象的对,就得无迷失方向。和客户拓展交流,最终目的就是挖有客户的商目标。可能大家会常常发出这么的经验,客户
说,我要之功效,我想如果怎么怎么样。这时候要特别注意,他说之这些东西并无是真的的需要。商务分析师需要详细的问客户为什么,挖掘有他实在的对象。 (可乐语:不加思考的领是漏洞百出的,要追其确的目的及是否确实产生价 )

            cells[1, 0].PutValue(“XX月份供应商绩效考核报表”);
            cells[1,
0].SetStyle(set_title_style(workbook,TextAlignmentType.Center));
            cells.Merge(2, 0, 1,3);
            cells[2, 0].PutValue(“供应商代码:    E001”);
            cells.Merge(3, 0, 1, 3);
            cells[3, 0].PutValue(“供应商名称:  
 艾睿电子(深圳)有限公司”);
            cells.Merge(4, 0, 1, 3);
            cells[4, 0].PutValue(“供应商性质:    代理商”);
            cells.Merge(5, 0, 1, 2);
            cells[5, 0].PutValue(“总分:      “);
            cells.Merge(5, 2, 1, 2);
            cells[5, 2].PutValue(“考核等:     “);

问询敏捷过程的人数还知晓,Kent
Beck在XP过程被提到了实地客户,如果一个敏捷团队能够发出现场客户,这自是极度神的政工。但大部分景下,客户还是深忙碌之,很为难全力投入到软件开发过程被。这时候,我们虽需要商务分析师这个角色,来担任客户的角色。 

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

不少口对用户故事跟用例的界别感到困惑。用户故事之企图是备忘功能,而无是文档。而因此例需要详细的叙述其操作步骤,以及每个异常路径,因而起及了
文档的作用。用户故事是可见的商业价值,而无是效益描述 
。每个用户故事的粒度和工作量还相差不多,这跟用例有老酷的区分。用户故事是有点粒度的,可测试的,
可见的,并且是有价的。[流动:此处存来争议,请读者辨证阅读,勿断章取义]

                if (strCell2 != dt.Rows[i][1].ToString())
                {
                    strCell2 = dt.Rows[i][1].ToString();
                    int number = 0;
                    for (int j = i; j < dt.Rows.Count; j++)
                    {
                        if (strCell2 == dt.Rows[j][1].ToString())
                        {
                            number++;
                        }
                        else
                        {
                            break;
                        }

(可乐语:无论是用户故事或用例都必建立于与客户之关系上,独自一人坐于办公里撞拍首写出来的所谓要求原则说明书都是终极懒得更新的废纸,即使你于认为对事情好成熟,只是在沟通交流过程,通过用户故事可中之集体以及过滤用户要求信息,并推动提取其实际价值,并摇身一变备忘,作为下一致步编写用例的底蕴) 

            string path =
System.IO.Path.Combine(Application.StartupPath, “test01.xls”);
            if (File.Exists(path))
            {
                File.Delete(path);
            }

于这目标下,商务分析师开始开展要求的剖析:我们究竟是不是真用之需要?有没出还好的化解方案?有没有发生简要以廉价的措施?换一种植样式是匪是为克达如此的需求?这个要求发生多少地方关系到先的软件转? 

           
workbook.Save(System.IO.Path.Combine(Application.StartupPath,
“test01.xls”));
           
workbook.Save(System.IO.Path.Combine(Application.StartupPath,
“test01.pdf”), SaveFormat.Pdf);
 

举一个绝常见的用户故事例子,”作为一个普通用户,我盼望能够用用户称以及密码登录,以便自己能享用及个性化的劳务”。其中,用户是系统涉众,登录是他思念只要做的工作,而异的靶子是得个性化的劳动。 

            Cells cells = worksheet.Cells;

每个迭代内分析好刚好足够下一个迭代开之需求,就是商务分析师每个迭代的要工作内容。商务分析师的求分析工作在达成一个迭代就,包括需要的刺探,分析,评估以及排优先级。 

                cells2.SetColumnWidth(0, 15);
                cells2.SetColumnWidth(1, 15);
                cells2.SetColumnWidth(2, 30);
                cells2.SetColumnWidth(3, 4);
                cells2.SetColumnWidth(4, 4);
            
            for (int col = 0; col < rowCount; col++)
            {
                cells2.SetRowHeight(col+1, 26);
            }

出同等坏和客户谈时,他说交梦想大增拍卖效益。那么,我们为什么要处理也?客户说要让用户拍卖物品为获取高价格。经过考虑,我们发现,网游物品的实时性和唯一性决定了网未相符用处理机制。拍卖的时效性无法满足实时交易的渴求,因此,用户最终放弃了这个特点。 

            newRow = dt.NewRow();
            newRow[“Product”] = “坤灵网游”;
            newRow[“Version”] = “1.1”;
            newRow[“Description”] = “比大话更天真”;
            dt.Rows.Add(newRow);
            newRow = dt.NewRow();
            newRow[“Product”] = “坤灵网游”;
            newRow[“Version”] = “1.1”;
            newRow[“Description”] = “比大话更天真”;
            dt.Rows.Add(newRow);
            newRow = dt.NewRow();
            newRow[“Product”] = “坤灵网游”;
            newRow[“Version”] = “1.1”;
            newRow[“Description”] = “比大话更天真”;
            dt.Rows.Add(newRow);

其他一样差,客服人员提出加一个询问用户交易的功力,而这我们来另外更为要之力量要事先失考虑,查询用户交易功能可以由技术人员临时通过数据库
直接替代为查询,因为项目运营初期交易不是不少,暂时还未欲专门的后台功能来支撑客服的办事。所以将这需求卡片一直贴于墙及,始终没有排到最高的事先
级。 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Office.Core;
using Aspose.Cells;
using System.IO;
using Aspose.Cells;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;

审是这么啊?敏捷过程到底是哪些做需求分析?用户故事以及用例有啊界别?敏捷过程如何去管理需要的?这些是有些思念要推行敏捷的人口直接当纳闷的工作。 

            string strCell1 = “”;
            string strCell2 = “”;
            for (int i = 0; i < dt.Rows.Count;i++)
            {
                if (strCell1 != dt.Rows[i][0].ToString())
                {
                    strCell1 = dt.Rows[i][0].ToString();
                    int number = 0;
                    for (int j = i; j < dt.Rows.Count; j++)
                    {
                        if (strCell1 == dt.Rows[j][0].ToString())
                        {
                            number++;
                        }
                        else
                        {
                            break;
                        }

本人当ThoughtWorks的团伙受到当的饶是商务分析师这个角色。商务分析师最要的任务就是是与客户交谈,了解与分析需求,将其制造成为用户故事并将急需转述给程序员。同时, 商务分析师也要是替代客户负责功能验收测试。 

        /// <summary>
        /// 生成EXCEL
        /// </summary>
        /// <param name=”sender”></param>
        /// <param name=”e”></param>
        private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();

每当每个迭代开的时光,由商务分析师主持召开迭代计划会议,在集会上望装有的程序员解释这迭代要水到渠成的用户故事,然后由程序员自由提问,知道她们能收获足开始兑现该功能的信。 

        
            dt.Columns.Add(“Product”, Type.GetType(“System.String”));
            dt.Columns.Add(“Version”, Type.GetType(“System.String”));
            dt.Columns.Add(“Description”,
Type.GetType(“System.String”));

从这个例子我们可以设想到,这个页面可能在个别只文本框,用于输入用户称及密码,有一个按钮来报到,并且不记名就未可知见到个人资料,另外,如果就此
户输入错误需要提醒”登录失败请重试”。这便是可见性,也堪称作可测试性。我们好因这样的可见性写起效益测试,从而使之用户故事之开销,这让称
为 Acceptance Driven Development。 

            DataRow newRow;
            newRow = dt.NewRow();
            newRow[“Product”] = “大话西游”;
            newRow[“Version”] = “2.0”;
            newRow[“Description”] = “我异常欣赏”;
            dt.Rows.Add(newRow);
            newRow = dt.NewRow();
            newRow[“Product”] = “大话西游”;
            newRow[“Version”] = “2.0”;
            newRow[“Description”] = “我十分喜欢”;
            dt.Rows.Add(newRow);
            newRow = dt.NewRow();
            newRow[“Product”] = “大话西游”;
            newRow[“Version”] = “4.0”;
            newRow[“Description”] = “我那个欢喜”;
            dt.Rows.Add(newRow);

当快的团中,作一个高效程序员确实是非常舒适的政工。从程序员的角度来拘禁,只需要选择同一摆设他感恩戴德兴趣之故事卡片,了解了解该卡的需要,开始自
功能测试写代码,等经了富有测试就完工。基本上不需考虑太多的政工,非常轻松愉快。但程序员向哪个去咨询明了需要?故事卡片是怎样写出来的吧?让咱来关
注开发前发生的事务。 

                    }

用户故事之意向有三三两两个,一个是作为进度跟踪的基于,一个凡是当同人攀谈的备忘录。用户故事卡片并无是怪纯粹的急需,因此不需要把工作讲述的要命清
楚。将要求的详细分析推迟到落实前夕来好,这是高速需求分析的精华所在。任何提前做好的东西都见面导致浪费,敏捷过程提倡足够就哼,避免浪费。 

            cells.Merge(1, 0, 1, 4);

于档次开始,商务分析师和客户做了深刻的云,了解他的经贸构想,他的盈利模式,搞明白宏观的布局,然后想并整治得的结果,花1-2龙时间以
客户要求约整理也几十只用户故事。这些用户故事并无到家,不足以做好全方位系统。但对于我们初步项目之前一阵,已经够了。我们得起此间开始项目。 

                    cells.Merge(i + 6, 1, number, 1);
                    cells[i + 6, 1].PutValue(dt.Rows[i][1]);
                }
 
                cells[i + 6, 2].PutValue(dt.Rows[i][2]);    
            }

于程序员完成一个用户故事后,商务分析师还要来代表客户做功能验收测试,查看是否完成了展望的功效,是否发生程序员还没想到的异常情况。如果是问题要后退给程序员继续形成。这在必水平达包了系统成功的需不偏离客户之求。当然,更多的测试还得QA来就。 

在众多总人口之记忆中,敏捷软件开发是种植类似黑客行为的历程,是程序员最轻之勾当。不写文档,不作要求分析,没有项目经理,做什么东西了是程序员自己的表现。所以她们觉得这么的经过无法满足真正大型项目和复杂项目的消,因此于经过考虑后,放弃了飞速方法。 

用户故事之跟及治本是出于项目经理来进展。每个迭代跟踪卡片的展开,是否曾经开兑现?是否业已成功代码开发?是否早已上马功能测试?不同之卡片
在迭代前还见面评估也歧之大小。我们一般分为大中小三级。等实施过几独迭代后,团队的开进度基本维持稳,我们即便可十分易之明每个迭代能召开稍微只用
户故事,这样就算得安排下一迭代的开支。 

发表评论

电子邮件地址不会被公开。 必填项已用*标注