如何求财务指标分析表及差异分析

财务报表的横向分析也称水平汾析,是将连续数期报表中的相应项目增减情况以百分比的形式进行横向比较即将最后一期财务报表中某一项或几项数据与前一期或前幾期报表中的相应项目进行对应比较,将其增减额列示出来同时计算出增减的百分比。如果比较两期的报表则将较前一期报表的数据莋为基数。如果比较三期以上的报表则有两种方法可供选择:第一种,以最早一期报表数字作为基数进行比较这种方法称为定比法;第②种,将每一期报表的有关数据分别与其前一期报表的相应数据进行比较这种方法称为环比法。

横向分析的前提是采用前后期对比的方式编制比较财务报表即将企业连续几年的财务报表数据并行排列在一起,设置“绝对金额增减”和“百分率增减”两栏以揭示各个会計项目在比较期内所发生的绝对金额和百分率的增减变化情况。下面以ABC公司为例进行分析(见下表)。现将公司的各个会计科目在2006年和

2007年的兩个会计年度末的余额并行列示并且以绝对数和百分比的形式来表现各会计科目在这段期间所发生的变动情况。在此基础上再对公司嘚经营活动和财务状况进行横向比较分析,以揭示其发展

比较利润及利润分配表分析:

变动差额=本期金额-上期金额;

变动百分比=变动差額于上期金额。

通过表6-2可以看出:

销售收入的增长越来越慢;

销售成本的增长快于销售收入的增长;

2001年毛利的下降速度很快应查明2001年度销售成本上升17%的具体原因;

期间费用的趋势是增长,2001年得到控制;

除2000年外营业外损益基本稳定;

因此,可以认为该企业盈利能力在下降主要原因是销售成本大幅增长。

财务报表的横向分析可以通过采用上述方法编制比较财务报表来进行在编制比较报表时,如有三期或更哆期的报表数据参与比较则必须注明比较的基年数,因为选择不同年份作基数年会得到不同的增减金额和百分比

总之,将连续多年(至尐是两年)的财务报表并列在一起进行绝对金额和百分比的比较比单单看一个会计年度的报表能了解到更多的情况。另外根据分析目的嘚不同,横向分析可不仅仅局限于实际数据也可采用本年度发生的预算数或目标数进行比较分析。

原标题:新三板上市指引及财务偠点案例分析

挂牌条件及说明挂牌条件及说明基本条件

股份有限公司申请股票在全国股份转让系统挂牌不受股东所有制性质的限制,不限于高新技术企业应当符合下列条件:

1.依法设立且存续满两年。有限责任公司按原账面净资产值折股整体变更为股份有限公司的存續时间可以从有限责任公司成立之日起计算;挂牌前股本总额不低于500万元。

2.业务明确具有持续经营能力;无硬性财务指标分析表要求。

3.公司治理机制健全合法规范经营;

4.股权明晰,股票发行和转让行为合法合规;

5.主办券商推荐并持续督导;

6.全国股份转让系统公司要求的其他条件

按照“可把控、可举证、可识别”的原则,股转系统公司对六项挂牌条件进行细化并于2013年6月20日下发“关于发布《铨国中小企业股份转让系统挂牌条件适用基本标准指引》的通知。

通知指出:股转系统公司进行挂牌审查时对申请挂牌公司符合《基本標准指引》的,原则上同意其股票挂牌申请在此基础上,审查工作以信息披露为核心重点围绕申请挂牌公司的信息披露是否满足要求囷主办券商是否按要求完成尽职调查,提出审查意见引导申请挂牌公司、主办券商及其它中介机构提高信息披露和尽职调查工作质量。

1.依法设立且存续满两年

依法设立是指公司依据《公司法》等法律、法规及规章的规定向公司登记机关申请登记,并已取得《企业法人營业执照》

(1)公司设立的主体、程序合法、合规

①国有企业需提供相应的国有资产监督管理机构或国务院、地方政府授权的其他部门、机构关于国有股权设置的批复文件。

②外商投资企业须提供商务主管部门出具的设立批复文件

③《公司法》修改(2006年1月1日)前设立的股份公司,须取得国务院授权部门或者省级人民政府的批准文件

(2)公司股东的出资合法、合规,出资方式及比例应符合《公司法》相關规定

①以实物、知识产权、土地使用权等非货币财产出资的应当评估作价,核实财产明确权属,财产权转移手续办理完毕

②以国囿资产出资的,应遵守有关国有资产评估的规定

③公司注册资本缴足,不存在出资不实情形

(2)存续两年是指存续两个完整的会计年喥。

(3)有限责任公司按原账面净资产值折股整体变更为股份有限公司的存续时间可以从有限责任公司成立之日起计算。整体变更不应妀变历史成本计价原则不应根据资产评估结果进行账务调整,应以改制基准日经审计的净资产额为依据折合为股份有限公司股本申报財务报表最近一期截止日不得早于改制基准日。【最后一句话怎么理解财务报表最近一期截止日不得早于改制基准日但是可以早于股份公司营业执照取得日。比如:改制基准日是6月30日那不能你5月31日作为最近一期上报材料,但是可以以6月30日作为最近一期上报材料尽管营業执照可能在7月15日才能取得。】

2.业务明确具有持续经营能力

(1)业务明确,是指公司能够明确、具体地阐述其经营的业务、产品或服務、用途及其商业模式等信息

(2)公司可同时经营一种或多种业务,每种业务应具有相应的关键资源要素该要素组成应具有投入、处悝和产出能力,能够与商业合同、收入或成本费用等相匹配

①公司业务如需主管部门审批,应取得相应的资质、许可或特许经营权等

②公司业务须遵守法律、行政法规和规章的规定,符合国家产业政策以及环保、质量、安全等要求

(3)持续经营能力,是指公司基于报告期内的生产经营状况在可预见的将来,有能力按照既定目标持续经营下去

①公司业务在报告期内应有持续的营运记录,不应仅存在耦发***易或事项营运记录包括现金流量、营业收入、交易客户、研发费用支出等。

②公司应按照《企业会计准则》的规定编制并披露報告期内的财务报表公司不存在《中国注册会计师审计准则第1324号——持续经营》中列举的影响其持续经营能力的相关事项,并由具有证券期货相关业务资格的会计师事务所出具标准无保留意见的审计报告财务报表被出具带强调事项段的无保留审计意见的,应全文披露审計报告正文以及董事会、监事会和注册会计师对强调事项的详细说明并披露董事会和监事会对审计报告涉及事项的处理情况,说明该事項对公司的影响是否重大、影响是否已经消除、违反公允性的事项是否已予纠正【审计事项:重大债务违约;经营性亏损累计额巨大;資不抵债;经营活动现金流量净额为负数;大股东长期占用巨额资金;存在因对外巨额担保等或有事项引发的或有负债;主导产品不符合國家产业政策;有关法律法规或政策的变化可能造成重大不利影响。】

③公司不存在依据《公司法》第一百八十一条规定解散的情形或法院依法受理重整、和解或者破产申请。

3.公司治理机制健全合法规范经营

(1)公司治理机制健全,是指公司按规定建立股东大会、董倳会、监事会和高级管理层(以下简称“三会一层”)组成的公司治理架构制定相应的公司治理制度,并能证明有效运行保护股东权益。

①公司依法建立“三会一层”并按照《公司法》、《非上市公众公司监督管理办法》及《非上市公众公司监管指引第3号—章程必备條款》等规定建立公司治理制度。

②公司“三会一层”应按照公司治理制度进行规范运作在报告期内的有限公司阶段应遵守《公司法》嘚相关规定。

③公司董事会应对报告期内公司治理机制执行情况进行讨论、评估

(2)合法合规经营,是指公司及其控股股东、实际控制囚、董事、监事、高级管理人员须依法开展经营活动经营行为合法、合规,不存在重大违法违规行为

①公司的重大违法违规行为是指公司最近24个月内因违犯国家法律、行政法规、规章的行为,受到刑事处罚或适用重大违法违规情形的行政处罚

A行政处罚是指经济管理部門对涉及公司经营活动的违法违规行为给予的行政处罚。

B重大违法违规情形是指凡被行政处罚的实施机关给予没收违法所得、没收非法財物以上行政处罚的行为,属于重大违法违规情形但处罚机关依法认定不属于的除外;被行政处罚的实施机关给予罚款的行为,除主办券商和律师能依法合理说明或处罚机关认定该行为不属于重大违法违规行为的外都视为重大违法违规情形。

C公司最近24个月内不存在涉嫌犯罪被司法机关立案侦查尚未有明确结论意见的情形。

②控股股东、实际控制人合法合规最近24个月内不存在涉及以下情形的重大违法違规行为:

A控股股东、实际控制人受刑事处罚;

B受到与公司规范经营相关的行政处罚,且情节严重;情节严重的界定参照前述规定;

C涉嫌犯罪被司法机关立案侦查尚未有明确结论意见。

③现任董事、监事和高级管理人员应具备和遵守《公司法》规定的任职资格和义务不應存在最近24个月内受到中国证监会行政处罚或者被采取证券市场禁入措施的情形。

(3)公司报告期内不应存在股东包括控股股东、实际控淛人及其关联方占用公司资金、资产或其他资源的情形如有,应在申请挂牌前予以归还或规范

(4)公司应设有独立财务部门进行独立嘚财务会计核算,相关会计政策能如实反映企业财务状况、经营成果和现金流量

4.股权明晰,股票发行和转让行为合法合规

(1)股权明晰是指公司的股权结构清晰,权属分明真实确定,合法合规股东特别是控股股东、实际控制人及其关联股东或实际支配的股东持有公司的股份不存在权属争议或潜在纠纷。

①公司的股东不存在国家法律、法规、规章及规范性文件规定不适宜担任股东的情形

②申请挂牌前存在国有股权转让的情形,应遵守国资管理规定

③申请挂牌前外商投资企业的股权转让应遵守商务部门的规定。

(2)股票发行和转讓合法合规是指公司的股票发行和转让依法履行必要内部决议、外部审批(如有)程序,股票转让须符合限售的规定

①公司股票发行囷转让行为合法合规,不存在下列情形:

A最近36个月内未经法定机关核准擅自公开或者变相公开发行过证券;

B违法行为虽然发生在36个月前,目前仍处于持续状态但《非上市公众公司监督管理办法》实施前形成的股东超200人的股份有限公司经中国证监会确认的除外。【全国中尛企业股份转让系统挂牌公司股东可以超过200人的公告:根据《非上市公众公司监督管理办法》、《全国中小企业股份转让系统有限责任公司管理暂行办法》等有关规定股票在全国中小企业股份转让系统(以下简称全国股份转让系统)挂牌的公司为非上市公众公司,股东人數可以超过 200 人根据《关于发布实施<全国中小企业股份转让系统业务规则(试行)>有关事项的通知》的相关要求,已在原***股份转让系統报价转让股票的中科软科技股份有限公司等204家挂牌公司已履行相关程序递交了关于公司股票在全国股份转让系统公开转让并纳入非上市公众公司监管的申请,并于2013年4月22日取得中国证监会核准上述204家挂牌公司已成为非上市公众公司。因此从2013年4月23日起,全国股份转让系統挂牌公司股东可以超过200人【关于历史上曾存在较为复杂的代持、有限公司阶段股东人数众多(超50人、甚至超200人)的推荐挂牌项目可以參考江仪股份430149 】

②公司股票限售安排应符合《公司法》和《全国中小企业股份转让系统业务规则(试行)》的有关规定。

(3)在区域股权市场及其他交易市场进行权益转让的公司申请股票在全国股份转让系统挂牌前的发行和转让等行为应合法合规。

(4)公司的控股子公司戓纳入合并报表的其他企业的发行和转让行为需符合本指引的规定

5.主办券商推荐并持续督导

(1)公司须经主办券商推荐,双方签署了《推荐挂牌并持续督导协议》

(2)主办券商应完成尽职调查和内核程序,对公司是否符合挂牌条件发表独立意见并出具推荐报告。

6.铨国股份转让系统公司要求的其他条件

1、公司治理结构不规范缺乏健全的法人治理结构,常常是“一人集权制”

2、内部控制制度不健铨或未执行。

3、原始出资的不规范拟新三板挂牌的主体多属于民营企业,在创业初期常存在出资不实或者存在瑕疵的情况

4、会计主体鈈清,资产不完整或权属不清公司房屋、土地、设备和知识产权等以个人名义登记或无法取得产权等。

5、资金管理的不规范未设置独竝的财会部门,未建立独立的财会制度未在银行独立开户,公司资金与股东资金不分;股东以借款、代偿债务、代垫款项或者其他方式占用公司资金等

6、同业竞争和不规范的关联交易。表现为:关联方界定不完整;关联交易目的及动机不当常常出于调节利润;交易程序不规范;交易依据不充分,缺相关合同及确认;定价不公允;会计处理不当;实质关联方非关联化等等

7、主要经营业务活动不规范。采购、生产、销售投资等存在瑕疵:如采购为了省钱不要***销售为了逃税不开***,聘请工人不交社保等购买设备不取得合法票据,购建厂房不办理法定登记手续等

8、纳税不规范。有避税动机非独立纳税或是为规避税收而少计收入、多计成本或帐外核算等。有些企业通过各种方式获取不合法的税收优惠

9、存在其他违规行为。如存在违规进行委托理财、违规借款担保与诉讼、违规发行过证券等荇为,违反工商、税收、土地、环保、海关的相关规定比如:部分商业企业发行代币券和购物卡。

10、账务处理不规范表现在:

①会计政策、会计估计方法不正确或随意变更。创新型企业很多是轻资产企业(如互联网公司、房产服务公司、资讯公司、在线培训公司等)特定行业会计政策特殊,可能导致不规范的处理方式

②资产减值准备计提不规范。如随意计提资产减值准备,利用资产减值准备的提取和冲回调节利润

③销售收入确认原则不规范。不按收入确认原则确认收入比如,按收付实现制确认收入按开具收款***确认收入等。

④随意计提和摊销费用通常表现在公司广告费用、研发费用、利息费用、开办费用的确认与摊销不合规。

⑤收益性支出与资本性支絀划分不清创新型企业的内部研究开发成本金额很大,如果资本化金额不恰当会对利润造成严重影响。

⑥关联交易的处理和披露不规范

⑦会计基础相对薄弱。如:原始凭证不全;费用及款项长期挂账;长期投资混乱等;大额银行存款未达账;小金库;往来不对账等

噺三板审计需特别关注的问题公司治理机制健全,合法规范经营

1.公司是否已建立股东大会、董事会、监事会和高级管理层(以下简称“彡会一层”)组成的公司治理架构并按照《公司法》、《非上市公众公司监督管理办法》及《非上市公众公司监管指引第3号—章程必备條款》等规定建立公司治理制度。

2.公司“三会一层”是否按照公司治理制度进行规范运作在报告期内的有限公司阶段应遵守《公司法》的相关规定。

3.公司的是否存在重大违法违规行为公司最近24个月内因违犯国家法律、行政法规、规章的行为,受到刑事处罚或适用重夶违法违规情形的行政处罚

(1)行政处罚是指经济管理部门对涉及公司经营活动的违法违规行为给予的行政处罚。

(2)重大违法违规情形是指凡被行政处罚的实施机关给予没收违法所得、没收非法财物以上行政处罚的行为,属于重大违法违规情形但处罚机关依法认定鈈属于的除外;被行政处罚的实施机关给予罚款的行为,除主办券商和律师能依法合理说明或处罚机关认定该行为不属于重大违法违规行為的外都视为重大违法违规情形。

(3)公司最近24个月内不存在涉嫌犯罪被司法机关立案侦查尚未有明确结论意见的情形。

4.控股股东、实际控制人是否合法合规最近24个月内不存在涉及以下情形的重大违法违规行为:

(1)控股股东、实际控制人受刑事处罚;

(2)受到与公司规范经营相关的行政处罚,且情节严重;情节严重的界定参照前述规定;

(3)涉嫌犯罪被司法机关立案侦查尚未有明确结论意见。

5.现任董事、监事和高级管理人员是否具备和遵守《公司法》规定的任职资格和义务不应存在最近24个月内受到中国证监会行政处罚或者被采取证券市场禁入措施的情形。

6.公司报告期内是否存在股东包括控股股东、实际控制人及其关联方占用公司资金、资产或其他资源的凊形如有,应在申请挂牌前予以归还或规范

7.公司是否设有独立财务部门进行独立的财务会计核算,相关会计政策是否能如实反映企業财务状况、经营成果和现金流量

8、新三板公司的内部控制制度是否健全且被有效执行。

(1)关注内部控制制度的具体标准设定是否健铨尤其在责任控制、业务处理程序、内部牵制、会计控制、内部审计等方面是否制定了合理、可行的规章制度;确保:①业务记录与会計记录有勾稽关系,定期核对和监督制度健全;②业务记录系统完整;③业务授权和执行分工明确

(2)审查内控制度的执行情况,检查內控制度是否在实际工作中得到了贯彻执行新三板公司股权集中,可能少数人控制生产管理和经营决策行为处事具有暗箱操作的意愿,常常导致内控制度流于形式不能有效执行。

(3)对于组织分散经营的企业关注是否形成有效的内部控制机制。

(4)对财务负责人和核心技术人员更替频率高的企业关注人员变动对内控的影响。

(5)特别关注资金管理尤其是公司与股东或关联方的资金往来真实性和茭易背景。包括:

①公司有无完善的资金管理制度;

②是否设置独立的财务部门在银行独立开户;

③个人股东与公司的资产、财务收支昰否分开;

④资金是否被控股股东、实际控制人及控制的其他企业,以借款、代偿债务、代垫款项以及其他方式占用的现象

(6)关注对外担保的审批权限和审议程序,是否存在为控股股东、实际控制人及其控制的其他企业进行违规担保的情形

9、CPA还应特别关注有无因股权集中而导致的管理层凌驾于内控制度之上的风险。如有应作为特别风险应对。

股权出资股权明晰股票发行和转让行为合法合规

1.关注公司股东和出资是否符合公司法及其他相关法律法规的规定,关注公司设立的主体、程序合法、合规股本结构设置是否存在潜在纠纷,囿无用公司资产再出资的行为

如(1)国有企业需提供相应的国有资产监督管理机构或国务院、地方政府授权的其他部门、机构关于国有股权设置的批复文件。(2)外商投资企业须提供商务主管部门出具的设立批复文件(3)《公司法》修改(2006年1月1日)前设立的股份公司,須取得国务院授权部门或者省级人民政府的批准文件

2.关注公司股东的出资合法、合规,出资方式及比例应符合《公司法》相关规定

(1)以实物、知识产权、土地使用权等非货币财产出资的,应当评估作价核实财产,明确权属财产权转移手续办理完毕。

(2)以国有資产出资的应遵守有关国有资产评估的规定。

(3)公司注册资本缴足不存在出资不实情形。

3.有限责任公司改制成股份有限公司的關注净资产折股是否符合相关规定,计算是否正确

有限责任公司按原账面净资产值折股整体变更为股份有限公司的,存续时间可以从有限责任公司成立之日起计算整体变更不应改变历史成本计价原则,不应根据资产评估结果进行账务调整应以改制基准日经审计的净资產额为依据折合为股份有限公司股本。申报财务报表最近一期截止日不得早于改制基准日

4.集体资产转让给个人的,关注是否得到原来集体人员的一致同意并亲笔签名,律师鉴证不存在潜在的纠纷。

5.集体资产量化或奖励给个人的关注集体资产量化或奖励给个人的匼法性,上报时应提供省级政府出具的确认文件

6.国有资产转让给个人的,关注转让价格的确认情况是否履行了评估确认手续,转让荇为是否经有权的国有资产管理部门的批准转让款的来源及支付情况。

7.公司的股票发行和转让是否依法履行必要内部决议、外部审批(如有)程序股票转让须符合限售的规定。

(1)公司股票发行和转让行为合法合规不存在下列情形:

A.最近36个月内未经法定机关核准,擅自公开或者变相公开发行过证券;

B.违法行为虽然发生在36个月前目前仍处于持续状态,但《非上市公众公司监督管理办法》实施前形成的股东超200人的股份有限公司经中国证监会确认的除外

(2)公司股票限售安排对否符合《公司法》和《全国中小企业股份转让系统业務规则(试行)》的有关规定。

8.在区域股权市场及其他交易市场进行权益转让的公司申请股票在全国股份转让系统挂牌前的发行和转讓等行为是否合法合规。

9.公司的控股子公司或纳入合并报表的其他企业的发行和转让行为是否符合《全国中小企业股份转让系统股票挂牌条件适用基本标准指引(试行)》的规定

业务明确,具有持续经营能力

CPA须关注的关键点:

1.了解公司是否能够明确、具体地阐述其经營的业务、产品或服务、用途及其商业模式等信息

通过分析公司所处细分行业的情况和风险,调查公司商业模式、经营目标和计划审慎、客观分析公司所处细分行业的基本情况和特有风险(如行业风险、市场风险、政策风险等)。通过与公司经营管理层交谈实地考察公司产品或服务,访谈公司客户等方法调查公司产品或服务及其用途,了解产品种类、功能或服务种类及其满足的客户需求

2.了解公司經营业务(可同时经营一种或多种业务),了解每种业务是否有相应的关键资源要素相关素组成是否具有投入、处理和产出能力,能够與商业合同、收入或成本费用等相匹配

通过实地考察、与管理层交谈、查阅公司主要知识产权文件等方法,结合公司行业特点了解公司业务所依赖的关键资源。

通过查阅公司业务制度、实地考察企业经营过程涉及的业务环节、对主要供应商和客户访谈等方法结合公司荇业特点,了解公司关键业务流程包括但不限于:  供应链及其管理,公司对供应商的依赖程度及存在的经营风险;主要产品的生产流程戓服务流程、生产工艺、质量控制、安全生产等;  营销体系包括销售方式、是否有排他性销售协议等壁垒、市场推广计划、客户管理,公司对客户的依赖程度及存在的风险;  核心产品或服务的研发流程、周期以及更新换代计划;  根据产业链分工情况调查公司是否将营运環节交给利益相关者,如有阐明其合作关系或商业联盟关系以及风险利益分配机制;  重要资本投资项目(如规模化生产、重要设备投资等)的投资流程,包括投资决策机制、可行性和投资回报分析等;其他体现所处行业或业态特征的业务环节

3.了解公司基于报告期内的苼产经营状况,在可预见的将来是否有能力按照既定目标持续经营下去。

(1)了解公司业务在报告期内是否有持续的营运记录是否不僅存在偶发***易或事项。营运记录包括现金流量、营业收入、交易客户、研发费用支出等

通过查阅商业合同,走访客户和供应商等方法结合对公司产品或服务、关键资源和关键业务流程的调查,了解公司如何获得收益包括但不限于:收入构成情况,包括产品或服务嘚规模、订价方式和依据;收入变化情况和影响其变化的原因;成本结构及其变动情况和变动原因;分析每种产品或服务的毛利率及其变動趋势和变动原因;公司的现金流情况尤其是与经营活动有关的现金流量,即经营的现金收入是否能抵补有关支出;在公司所处的细分荇业中分析比较公司与竞争对手之间在产品或服务分布、成本结构、营销模式和产品或服务毛利率等方面的优劣势,并预估公司在细分荇业的发展趋势(主要地区或市场的占有率及其变化)如果竞争对手的信息不存在,可分析公司与行业平均水平相比的优劣势

通过与公司管理层交谈,查阅董事会会议记录、重大业务合同等方法结合公司所处行业的发展趋势及公司目前所处的发展阶段,了解公司整体發展规划和各个业务板块的中长期发展目标分析公司经营目标和计划是否与现有商业模式一致,揭示公司业务发展过程中的主要风险(區别一般风险和特殊风险)及风险管理机制

(2)了解公司是否存在《中国注册会计师审计准则第1324号——持续经营》中列举的影响其持续經营能力的相关事项,并了解相关事项是否影响标准无保留意见的审计报告的出具影响持续经营能力的相关事项包括:

财务方面:净资產为负或营运资金出现负数;定期借款即将到期,但预期不能展期或偿还或过度依赖短期借款为长期资产筹资;存在债权人撤销财务支歭的迹象;历史财务报表或预测性财务报表表明经营活动产生的现金流量净额为负数;关键财务比率不佳;发生重大经营亏损或用以产生現金流量的资产的价值出现大幅下跌;拖欠或停止发放股利;在到期日无法偿还债务;无法履行借款合同的条款;与供应商由赊购变为货箌付款;无法获得开发必要的新产品或进行其他必要的投资所需的资金。

经营方面:管理层计划清算被审计单位或终止经营;关键管理人員离职且无人替代;失去主要市场、关键客户、特许权、执照或主要供应商;出现用工困难问题;重要供应短缺;出现非常成功的竞争者

其他方面:违反有关资本或其他法定要求;未决诉讼或监管程序,可能导致其无法支付索赔金额;法律法规或政府政策的变化预期会产苼不利影响;对发生的灾害未购买保险或保额不足

3.公司是否不存在依据《公司法》第一百八十一条规定解散的情形,或法院依法受理偅整、和解或者破产申请

CPA须关注的关键点:

1、公司资产是否独立于股东和实际控制人;

2、主要资产权属是否清晰;取得手续是否合法;昰否存在重大权属纠纷;

3、产权证明是否完善。关注重组、股东投资、资产交换、以物抵债、接受捐赠等取得的资产是否已办理过户手续;

4、资产是否完整关注有无账外资产或股东占用资产、公私混用的情形;

5、公司的重要资产不存在质押等限制性条件,没有因法律诉讼等重大争议、潜在纠纷等不确定因素

6、特别关注土地问题:

(1)以前划拨地未入账,改制时应办为出让地;

(2)集体土地问题当地是否允许集体土地流转,如允许核查相关规定,看是否履行了相关规定

7、关注商标和专利权。公司是否拥有与主营业务相关的商标、专利、非专利技术所有权

8、关注公司对无形资产的核算是否正确。对使用寿命不确定的关注判断是否恰当。

(1)没有明确的合同或法律規定的无形资产如永久性特许经营权和非专利技术等。要谨慎判断使用期限应当综合各方面情况,如聘请相关专家进行论证或与同行业嘚情况进行比较以及企业的历史经验等。

(2)对于划分为使用寿命不确定的无形资产在持有期间内不需要摊销,如果期末重新复核后仍为鈈确定的,应当在每个会计期间进行减值测试。同时应当在财务报表附注中说明该无形资产的有关情况,包括是否具有合同或法律规定、能否自市场上取得相关信息等

1、关注公司业务是否独立,与控股股东、实际控制人及其控制的其他企业是否存在同业竞争

通过询问公司控股股东、实际控制人,查阅营业执照实地走访生产或销售部门等方式,调查公司控股股东、实际控制人及其控制的其他企业的业务范围从业务性质、客户对象、可替代性、市场差别等方面判断是否与公司从事相同、相似业务,从而构成同业竞争

对存在同业竞争的,要求公司就其合理性作出解释并了解公司为避免同业竞争采取的措施以及作出的承诺。

2、关联方界定是否全面从严把握。特别注意:

(1)创新型企业的关键管理人员包括核心技术人员

(2)下列情形之一的法人或自然人,视同为公司的关联人:

① 与公司或其关联人签署协议或作出安排在协议或安排生效后,或在未来十二个月内成为公司的关联法人或自然人的;

② 过去十二个月内,曾经是公司的关聯法人或自然人的

3、关联交易金额和比例

(1)与控股股东及其全资或控股企业,在产品销售或原材料采购方面的交易额占主营业务收叺或外购原材料金额的比例,分析是否存在影响公司独立性的重大或频繁的关联方交易如果金额和比例大,说明公司直接面向市场独立經营的能力较差

业务独立性:通过查阅公司组织结构文件,结合公司的生产、采购和销售记录考察公司的产、供、销系统分析公司是否具有完整的业务流程、独立的生产经营场所以及供应、销售部门和渠道,通过计算公司的关联采购额和关联销售额分别占公司当期采购總额和销售总额的比例分析是否存在影响公司独立性的重大或频繁的关联方交易,判断公司业务独立性

(2)以承包、委托经营、租赁戓其他类似方式,依赖控股股东及其全资或控股企业的资产进行生产经营所产生的收入占其主营业务收入的比例如果金额和比例大,说奣公司缺乏开展生产经营所必备的资产

4、关注关联交易定价是否公允,未支付对价的也应关注

5、关注公司是否完整披露关联方关系和茭易

内部研究开发费用的确认和计量

新三板公司多为新兴的中小高科技企业,内部研究开发费用占收入的比重较高金额一般很大。同时新技术、新产品的研究开发有很多的不确定性,且技术更新产品换代的周期越来越短新技术、新产品很快就可能面临着被淘汰。因此微信公众号股权研究院表示CPA须关注的关键点: 

1、关注资本化条件和依据

(1)研究阶段和开发阶段界定时点是否合理,研究阶段支出全部費用化;

(2)开发阶段的支出资本化是否同时满足五个条件,必须同时满足才能资本化,否则费用化

(3)如果确实无法区分研究阶段的支出和开发阶段的支出,应将其所发生的研发支出全部费用化。

2、关注资本化的支出范围

(1)可直接归属于该资产成本的开发该无形资产时耗费的材料、劳务成本、注册费、在开发该无形资产过程中使用的其他专利权和特许权的摊销、按照《企业会计准则第17号借款费用》的规萣资本化的利息支出,以及为使该无形资产达到预定用途前所发生的其他费用

(2)在开发无形资产过程中发生的,除上述可直接归属于无形资产开发活动的其他销售费用、管理费用等间接费用、无形资产达到预定用途前发生的可辨认的无效和初始运作损失、为运行该无形资產发生的培训支出等不得资本化直接计入当期损益。

(3)仅包括在满足资本化条件的时点至无形资产达到预定用途前发生的支出总和,对於同一项无形资产在开发过程中达到资本化条件之前已经费用化计入损益的支出不再进行调整

(1)进入开发阶段的时点。参考意见:

实務中结合五个条件,更注重技术上的可行性和未来经济利益的流入如果未来经济利益的流入不能抵偿成本,一般不予资本化如制药荇业,一般以取得国家药监局《临床试验批件》之后界定为开发阶段;网游行业一般以技术具有可行性确定的日期之后界定为开发阶段(如游戏设计的文件的公测)。

(2)开发完成的时点参考意见:

实务中,一般以新技术获得***或无***的,以公开发布、投入市场等作为开发阶段的结束如制药行业,一般以获得新药***作为开发阶段的结束(如安永华明审计的三九医药);网游企业一般以游戏發布日期作为开发阶段的结束。如巨人网络(安永审计)、盛大网络、完美时空(普华审计)

特殊案例费用资本化问题考虑

1、某公司与某大学合作成立研发中心,研发中心独立运行具有自己的财务,该公司每年拨付一定的资金给研发中心用于研发研发中心由该大学研發人员和该公司的研发人员共同组成。 该中心具有明确的研发计划研发项目成功后,成果形成的专利或技术的所有权归双方所有使用權归该公司所有。研发成果的体现形式:包括专利、非专利技术等

由于研发中心的财务由大学负责,该公司不能掌握其研发费用的投入使用情况因此存在以下问题:研发费用资本化的金额的确定。有些项目的研发系伴随着项目的承接进行的在承做项目的过程中可能形荿了某项技术、专利或非专利技术,该技术可能在其他类似项目中发挥其作用那么在此种情形下,如何确定其研发费用资本化的时点、研发费用资本化金额

该项目的研发费用是否能够资本化,目前会计实务中存在两种观点。其一是认为不能资本化伴随项目产生专利,应計入项目成本原因是成本无法分割、经济利益流入不确定,不同的项目因环境不同都需进行设计研发,形成的技术不具有复制性其②是认为,基础化研发可以资本化个性化研发不能资本化,原因是任何项目设计都会利用基础性开发成果个性化研发制针对具体项目,不具有可复制性如果可以资本化关键问题是金额如何分摊。

2、动漫公司研发费用的核算、归集成本的结转以及减值问题。公司研发費用应在存货中归集并随之动画或电影的播放,按收入确认的进度分期(一般电影的播放为三年)结转成本并一致认为该研发如果不能形成版权,则研发费用直接费用化形成版权,但长期未播放应对存货提减值准备

3、中试阶段发生的支出是否可以资本化。很多创新型企业在研发产品工业化生产前多进行中试,有些企业甚至所有项目都要进行中试中试是指为了使科研成果顺应市场与产业化的需求,减少转化风险提高转化率,而进行的批量放大试生产、试营销、试使用的过程这个过程的目的在于验证、改进、完善实验室成果或悝论成果,消除各种不确定性因素取得可靠的数据,使之与其他相关技术匹配与生产实际相符合,与社会需要相一致从而使新技术順利应用到生产中,将新产品成功地推向市场从中试的目的和结果来看,倾向于确认资本化

新商业模式下收入的确认

CPA须关注的关键点:

创新型企业涉及所提供的商品或者服务本身的创新,又涉及经营运作模式的创新即采用了一些非传统的经营运作模式。创新型企业诸哆特点导致其收入确认方法、确认时点与传统行业可能有所不同需要企业和CPA做出灵活的专业判断。但是无论如何在判断收入的确认时,CPA要根据企业会计准则规定的五个原则来判断

1、采用买一赠一方式进行销售。

赠送的商品或劳务不做捐赠处理而是视同降价销售。例洳预存1000元现金可消费价目表上2000元的商品或劳务,则应视作降价50%销售一次消费价目表上1000元,应确认的销售收入为1000*()=500元

针对此类业务呮有在所交换服务项目不相同或相似、而且符合收入确认条件时,才能确认收入该收入一般应采用所提供产品的公允价值进行计量。

应將销售取得的货款或应收货款在本次商品销售或劳务产生的收入与奖励积分的公允价值之间进行分配将取得的货款或应收货款扣除奖励積分公允价值的部分确认为收入,奖励积分的公允价值确认为递延收益在积分兑换时转为收入。兑现奖励积分的时候可能会采用奖品的形式则递延收益确认收入的同时要确认奖品的成本。

4、系统集成的收入确认一般参照《企业会计准则--建造合同》确认。

也有的公司在項目实施完成并经验收方出具验收合格证明后才确认收入如新世纪。

5、远期销售合同不应按合同签订日期,应该按准则的五条件根據合同条款判断风险报酬转移的时点。

6、同时销售商品和提供劳务的情形

如果可以区分且能够单独计量,应分别核算销售商品和提供劳務的收入和成本;不能单独区分或能区分但不能单独计量的全部作为销售商品处理。 在区分销售商品和提供劳务的时候还需要考虑提供的劳务是一次性的还是持续的,如果是持续性的则需要考虑在相关受益区间分摊

如移动运营商出售话费充值卡、美容院促销出售消费充值卡、健身中心预售消费卡等。在预售发卡时销售方既未完成服务也未发生提供服务的费用,并且购买方在全额消费之前具有对销售方的债权在诉讼时效内具有要求退款的权利,因此根据收入费用配比原则和收入确认原则不能确认收入。即使销售方在售卡时规定的鈈得退款、有效期一年条款因与有关法律相冲突,仍不具有免责权利销售方应建立完善的内部控制体系和信息数据系统,有效控制和記录预售卡的销售及消费情况根据客户实际消费量确认销售收入。如果预售卡在有效期内一直没有消费完则可根据合理的会计估计在囿效期(或诉讼期)末确认销售收入。

如果预售充值卡收入金额较小、所占比重较小也可根据实质重于形式原则在预售时确认收入。但昰在预售时即确认收入必须作出严格限定,如果因大规模促销活动等原因导致预售收入大幅波动的情况下从谨慎性原则出发则不应确認收入。

8、电子商务服务商收入的确认

以淘宝网为例,公司主要从事C2C业务(个人对个人销售)和B2C业务(公司对个人销售)业务收入来源有两种,一是搜索竞价排名包括:C2C业务、B2C业务、P4P业务(pay for performance 按效果付费),二是品牌商城主要是B2C模式,收取佣金淘宝网主要根据关键詞搜索竞价排名的出价及关键词被点击的次数,交易额及规定的费率通过支付宝实时向卖家收费。

这种盈利模式体现在网络这个虚拟的卋界中面对的客户数量是巨大的,服务次数是巨量的单笔交易的金额则是相对微小的,总的交易单数是海量的这种商业模式收入的確认完全依赖于庞大计算机数据库系统,须经计算机专业审计人员对数据库系统进行测试后才能进行收入确认

9、网游公司收入的确认。

網游公司的收入主要来自网络游戏本身和相关的收费网络游戏包括收费游戏和免费游戏两种,对于收费游戏网游公司主要依据游戏玩家嘚游戏时间收取点卡费收入与玩家的人数和游戏时间成正比,道具收费是其另一收入来源;近年来发展起来的免费游戏正在成为网络游戲中的主流玩家可以不买点卡免费玩游戏,收入来源包括:虚拟道具收费和增值服务收费比如,服务性短信收费和其它增值短信服务收费许多商家青睐于其数量巨大的玩家,纷纷将广告投入其中网游企业的广告收入原则上在相关的广告开始出现于公众面前时才能确認。

10、动漫企业收入确认及与成本配比

从动漫企业的经营方式来看,可分自创形式和合作形式两大类自创形式(又称原创),自己创意自己加工,独享收益特点是生产周期长,前期投入大在取得许可后,通过出售(发行)或其他(如合作、授予、转让等)方式获取收入获取收益的时间较长。对动漫影视作品发行收入主要是发行动漫影视作品的收入,可以在将碟片实物交付给客户验收合格并取嘚其确认的证据后在合同约定的发行期间内分期确认收入

11、公益性质文化类企业收入的确认。

以剧院经营类企业为例按《企业会计准則-政府补助》相关规定,补贴收入应计入营业外收入进行核算但这样导致企业主营业务增长幅度偏小,贡献的利润远小于政府提供的補贴收入因此,也有人提议像剧院等带有社会公益性质的文化类企业,在执行企业会计准则的前提下可以要求将政府补贴视同主营業务进行确认,待探讨目前应按准则要求计入营业外收入。

1、公司业务及架构重组时的所得税是否已经缴纳完毕;(自然人股东交个人所得税企业参考财税[2009]59号文件)

2、公司改制重组过程中涉及的***、契税是否已足额缴纳;

3、公司有无为了避税目的向关联方转移利润嘚情况;

4、公司有无账外账、转移利润形成的小金库;

5、成本是否与收入配比结转;

6、所有交易是否真实,有无为取得******而虚假購物;

7、有无将控股股东或实际控制人的费用列入公司费用;

8、有无将应资本化的支出费用化;

9、所得税扣除与新税法要求是否一致是否得到税务局认可;

10、有无未代扣代缴个人所得税 ;

11、税收优惠是否合法,有无审批文件审批级别是否和税法要求相符。

12、有限责任公司整体变更为股份有限公司时盈余公积和未分配利润转增股本和资本公积,个人股东如何缴纳个人所得税

目前《国家税务总局关于股份制企业转增股本和派发红股征免个人所得税的通知》(国税发[号)对资本公积及盈余公积转增股本是否征收个人所得税作了规定。第一條规定股份制企业用资本公积金转增股本不属于股息、红利性质的分配,对个人取得的转增股本数额不作为个人所得,不征收个人所嘚税第二条规定,股份制企业用盈余公积金派发红股属于股息、红利性质的分配对个人取得的红股数额,应作为个人所得征税

另外國家税务总局网站对“有限责任公司整体变更为股份有限公司时,盈余公积和未分配利润转增股本和资本公积个人股东如何缴纳个人所嘚税?”问题咨询回复为:“您在我们网站上提交的纳税咨询问题收悉现针对您所提供的信息简要回复如下:

根据《国家税务总局关于盈余公积金转增注册资本征收个人所得税问题的批复》(国税函[号)规定:“青岛路邦石油化工有限公司将从税后利润中提取的法定公积金和任意公积金转增注册资本,实际上是该公司将盈余公积金向股东分配了股息、红利股东再以分得的股息、红利增加注册资本。因此依据《国家税务总局关于股份制企业转增股本和派发红股征免个人所得税的通知》(国税发[号)精神,对属于个人股东分得并再投入公司(转增注册资本)的部分应按照“利息、股息、红利所得”项目征收个人所得税税款由股份有限公司在有关部门批准增资、公司股东會议通过后代扣代缴。”

因此盈余公积和未分配利润转增股本应当按“利息、股息、红利所得”项目计征个人所得税,转增资本公积不計征个人所得税

上述回复仅供参考。有关具体办理程序方面的事宜请直接向您的主管或所在地税务机关咨询”

需要说明的是,转增资夲公积不计征个税的直接依据是国税总的网上问答并不是直接的税法条文。所以能否按上述路线实现规避很可能还是要看当地主管税務机关的态度。

目前对有限责任公司按净资产折股变更成股份有限公司个人股东的个人所得税事项没有明确文件规定。

实际上纵观所囿法规,对于股改过程中留存收益转增资本公积部分是否缴纳个人所得税都没有明确的政策规定实际上,各地政府对企业股份制改造过程中的涉及的个人所得税政策执行不完全一致某些地方政府为 鼓励当地企业上市并做大做强,允许企业对上述个税***或不交而有些哋方则严格征收税款。

确实各地在此方面政策的把握尺度差异还是很大的。例如在上海根据《上海市人民政府办公厅转发市财政局等伍部门关于推进经济发展方式转变和产业结构调整 若干政策意见的通知》(沪府办发[2008]38号)第十三条规定:“加强金融服务,支持本市有条件的中小企业上市对列入上海证监局拟上市辅导期中小企业名单的企业将非货币性资产经评估增值转增股本的,以及用未分配利润、盈餘公积、资本公积转增股本的可向主管税务机关备案后,在取得股权分红派息时一 并缴纳个人所得税。”

长海股份(股票代码300196)招股書本公司系由常州市长海玻纤制品有限公司整体变更设立的股份有限公司。2009年4月20日经长海玻 纤2009年第二次股东会审议通过,公司以截至2008姩12月31日经审计的账面净资产123,667,977.83元为基数按照 1:0.727755的比例折为9,000万股,余额计入资本公积整体变更为江苏长海复合材料股份有限公司。

公司整體变更过程中将原实收资本6,000万元、资本公积-股本溢价3,000万元转出形成股份公司股本9,000万元,根据国家税务总局的相关规定将作为股票溢价發行收入所形成的资本公积3,000万元转增股本由个人取得的数额,不作为应税所得征收个人所得税

2010年7月30日,常州市武进地方税务局出具《关於常州市长海玻纤制品有限公司整体变更设立江苏长海复合材料股份有限公司所有者权益结构调整涉税问题的处理意见》确认:长海玻纖整体变更为股份有限公司过程中尚未对盈余公积1,857,167.47元、未分配利润16,714,507.28元以及其他途径形成的资本公积96,303.08元进行实质性的分配或转增实收资本处悝,因此对转入资本公积的留存收益和其他途径形成的资本公积合计18,667,977.83元暂不征收个人所得税待企业将盈余公积、未分配利润、以及其他途径形成的资本公积对自然人股东实施分配或转增自然人股东实收资本时再按相关政策规定征收个人所得税。

天晟新材(股票代码300169)招股書发行人整体变更过程中,共计有2,616.60万元未分配利润和盈余公积转为资本公积根据税法的有关规定,该行为不涉及未分配利润和盈余公積转增股本因此,该行为不构成“利息、股息、红利所得”未产生纳税义务。

上述2,616.60万元资本公积不是由股票溢价发行形成因此在以後发行人用上述2,616.60万元资本公积转增股本时,根据税法的有关规定自然人股东须缴纳个人所得税

对违规享有的地方性税收优惠的,处理建議:

1、由主管税务机关出文确认新三板企业没有税务违法行为且暂不征收少缴的税款

3、由原股东承诺承担有可能追缴的税款

新三板公司审計中需出具的业务报告新三板公司申请文件需CPA出具的各种报告

1、审计报告(二年一期)(申报财务报表最近一期截止日不得早于改制基准ㄖ)

2、对原始财务报表与申报财务报表的差异情况出具的意见

除出具上述报告资料外会计师事务所及其签字人员还须对新三板挂牌申请攵件真实性、准确性和完整性出具承诺书;会计师事务所须对纳入公开转让说明书等文件中由其出具的专业报告或意见无异议的函,格式見事务所模板

申报审计报告及对原始财务报表与申报财务报表的差异情况说明参照公司IPO申报审计报告模版

CPA需要出具的书面资料:

1、全国股份转让系统公司出具审查反馈意见回复

全国股份转让系统公司反馈意见通知书要求CPA答复的

回复意见格式参照公司《全国中小企业股份转讓系统申请文件反馈问题的回复》模版

原始财务报表与申报财务报表差异的审核报告

新三板公司原始财务报表是指:

(1)股份公司设立之湔(有限责任公司依法变更为股份有限公司)的原始财务报表是指公司报告期各年度提供给地方财政、税务部门的财务报表,该报表应包括各发起人投入股份有限公司的经营性资产原所在法人单位的原始财务报表股份公司设立之后的原始财务报表是指公司报告期各年度经審计的财务报表。

(2)公司报告期各年度未编制合并财务报表时合并原始财务报表无法提供,但公司应说明未编制合并财务报表的原因

申报财务报表是经注册会计师审计的二年一期财务报表。

证监会认为二年一期的申报期应看作一个期间在这个期间会计政策须一致。

噺三板申报材料***有二份财务报表:申报报表、原始报表及纳税申报表。申报报表是经审计的二年一期财务报表;原始报表共三张表(资产负债表、利润表及现金流量表不需要其他报表和附注),原始报表由会计机构负责人、财务负责人和公司法定代表人签署并盖公嶂(不要求会计师、政府部门确认);纳税申报表(一张纸主表,其他表不要)为所得税纳税申报表需要税务部门确认,二年提供年喥所得税汇算清缴报表一期提供季度预申报表。

三份财务报表的关系一般为:原始报表与纳税申报表一致申报报表与原始报表的差异茬差异比较表中体现,因此差异比较表实质是描述申报报表与纳税申报表间的差异。

新三板公司申报财务报表与原始财务报表差异比较表(以下简称“差异比较表”)应包括如下内容:

(1)申报期间合并及母公司资产负债表差异比较表

(2)申报期间合并及母公司利润表差異比较表

新三板公司申报财务报表与原始财务报表无差异时,注册会计师应在引言段中删除有关“差异说明”的表述并在意见段中说奣“公司申报财务报表与原始财务报表不存在差异”。

新三板公司未编制合并原始会计报表时其原始会计报表与申报会计报表差异说明Φ,无需就合并申报会计报表与合并原始会计报表的差异项目进行说明但应说明未编制合并原始会计报表的原因。

注册会计师应检查新彡板公司提供的原始财务报表是否为经审计的报表;注册会计师应同时检查新三板公司提供的原始财务报表是否与报告期各年度提供给地方财政、税务部门的报表一致若不一致,公司对此应有合理解释在合理解释的基础上,一般应采用经审计的报表作为对比原始财务报表

注册会计师应将公司原始财务报表及其审计报告、差异比较表及其说明等已审核的资料形成专项工作底稿。

6.原始财务报表与申报财務报表差异原因

新三板公司申报财务报表与原始财务报表差异原因包括会计差错调整形成差异、会计政策变更形成差异

会计师对新三板掛牌申请文件反馈意见的专项说明

1、针对全国中小企业股份转让系统有限责任公司新三板挂牌申请文件反馈意见(以下简称反馈意见)中提到的需要申报会计师说明或发表核查意见的问题,项目组应履行审慎核查义务逐项落实有关情况包括:

(1)获取公司有关书面解释或補充说明

(2)核查有关会计资料和以前审计底稿,形成有关工作底稿

(3)获取公司、券商、律师对反馈意见的核查意见和回复

2、项目组应逐项回复反馈意见中提到的需会计师说明或发表核查意见的问题

(1)需会计师说明的问题

回复说明的格式可为:“(针对××问题),我们经核查后,有关情况说明如下…。

如同时公司、券商对相同问题也进行回复说明,项目组的说明尽量应与公司、券商回复保持一致

(2)需会计师发表核查意见的问题,至少应包括以下三段内容:

【核查程序】为项目组对反馈意见中提到的有关问题的核查程序及获取嘚证据。

【核查内容】为项目组实施对反馈意见中提到的有关问题的核查和落实情况。如同时公司、券商对相同问题发表了核查意见項目组的核查情况应与公司、券商回复保持一致。

【核查结论】为项目组履行审慎核查义务后,对上述核查情况明确发表的核查意见洳果涉及修改财务报表和附注的,应在核查意见中逐项予以明示

3、根据事务所质量控制制度的有关规定,项目组出具的“会计师对全国Φ小企业股份转让系统申请文件反馈问题的回复”在签发前应履行质量控制复核程序。

未来人无股权不富请加股权微信号:guquancn

笔者本身是软件工程专业出身泹是对如何写需求分析仍然是一知半解,拿到需求仍然不知道如何下手,才能达到写需求分析的目的

今天看到一篇文章,让我受益良哆同时参考此文,笔者也尝试写了一个需求分析一个小小的程序,居然写了21页笔者自己都感到惊讶。

所以我也来转载一下此神文。

转载之前笔者还是列举下自己在实际操作中碰到的一些问题:

/u/article/details/?locationNum=2&fps=这样的大型web应用。而这期间RUP、XP、敏捷开发、持续集成??????一個接一个的新概念层出不穷,令人眼花缭乱现在想来,恍如隔世

但更令我印象深刻而难以忘怀的,是我亲自经历的、亲眼目睹的、道聽途说的一个又一个的软件项目它们有的获得了成功,但更多的是令人沮丧的失败套用一下大文豪托尔斯泰体:幸福的家庭都是一样嘚,不幸的家庭却各有各的不幸;幸福的软件项目都是一样的不幸的软件项目却各有各的不幸;或者说,成功的软件项目都是一样的夨败的项目却各有各的问题。我常常在想我们的项目开发到底怎么了,进而把它们一个一个的剥开来深入分析竟然触目惊心。它们有嘚是需求的问题有的是客户关系的问题,还有设计的问题、技术的问题、时间管理的问题、人员培养的问题??????但归根到底更哆的还是需求的问题需求分析既是一份体力活儿,更是一份技术活儿它既是人际交往的艺术,又是逻辑分析与严密思考的产物正是峩们在需求分析过程存在的巨大隐患,最终导致了那么多项目的失败也许你认为我在危言耸听,好吧我来举几个典型事例分析分析吧。我的第一个故事来自大名鼎鼎的东软我在2005年接一个项目的时候,听说这个项目之前是东软做的当时东软在做这个项目的时候,整个過程经历了10多次结构性的大变更局部性的调整更是不计其数。据说某天早上客户对某个功能不满意,他们不得不对几百处程序进行修妀之后客户对修改的内容还是不满意,又不得不将几百处修改重新改回来最后这个项目导致的结果是,整个这个项目组的所有成员都離开了东软并似乎从此不愿涉足软件开发领域。多么惨痛的教训啊!我常常听到网友抱怨客户总是对需求改来改去但客户对需求改来妀去的真正原因是什么呢?当我们对客户的需求没有真正理解清楚时我们做出来的东西客户必然不满意。客户只知道他不满意但怎样財能使他满意呢?他不知道于是就在一点儿一点儿试,于是这种反复变更就这样发生了如果我们明白了这一点,深入地去理解客户的業务进而想到客户的心坎儿上去,最后做出来的东西必然是客户满意的记住,当客户提出业务变更的时候我们一定不能被客户牵着赱,客户说啥就是啥我们要从业务角度深入的去分析,他为什么提出变更提得合不合理,我有没有更合理的方案满足这个需求当我們提出更加合理的方案时,客户是乐于接受的变更也变得可控了。第二个故事来自我自己的项目一个早期的项目。在这个项目中客戶扔给了我们很多他们目前正在使用的统计报表,要我们按照报表的格式做出来这些报表都是手工报表,许多格式既不规范又很难于被计算机实现。这些报表令我耗费了不少脑细胞直到最终项目失败都没法完成。这件事留给我的深刻教训是不能客户怎么说软件就怎麼做。客户提出的原始需求往往是不考虑技术实现基于非计算机管理的操作模式提出来的。他们提出的很多需求常常比较理想而不切实際毕竟人家是非技术的。但我们作为技术人员需求分析必须实事求是的、基于技术可以实现的角度去考虑。那种“有条件要上没有條件创造条件也要上”的鲁莽行事,结果必然是悲惨的所以我们必须要基于技术实现去引导客户的需求。同时计算机信息化管理就是┅次改革,对以往手工管理模式的改革如果我们上了信息化管理系统,采用的管理模式却依然是过去的手工模式新系统的优势从何而來呢?因此我们做需求就应当首先理解现有的管理模式,然后站在信息化管理的角度去审视他们的管理模式是否合理最后一步一步地詓引导他们按照更加合理的方式去操作与管理。2007年我参与了一个集团信息化建设的项目。这个项目中的客户是一个庞大的群体他们分別扮演着各种角色。从机构层次划分有集团领导、二级机构人员、三级机构人员;从职能角色划分,有高层领导、财务人员、生产管理員、采购人员、销售人员等等。在这样一个复杂场景中不同人员对这个项目的需求是各自不同的。非常遗憾的是我们在进行需求分析的时候没有认真分析清楚所有类型人员的需求。在进行需求调研的时候总是集团领导带领我们到基层单位,然后基层单位将各方面的囚员叫来开大会这样的大会,各类型的人员七嘴八舌各说各自的需求还有很多基层人员在大会上因为羞涩根本就没有提出自己的需求。这样经过数次开会需求调研就草草收场。我们拿着一个不充分的需求分析结果就开始项目开发最终的结果可想而知。直到项目上线鉯后我们才发现许多更加细节的业务需求都没能分析到,系统根本没法运行不得不宣告失败。一个软件项目的需求调研首先必须要进荇角色分析然后对不同的角色分别进行调研。需求调研的初期需要召开项目动员大会这是十分必要的。但真正要完成需求分析应该昰一个一个的小会,1~3个业务专家只讨论某个领域的业务需求,并且很多问题都不是能一蹴而就完成的我们必须与专家建立联系,反复溝通后完成需求分析必须遵从的是一定的科学方法,而不是盲目的大上快上我的最后一个故事可能典型到几乎每个人都曾经遇到过。峩们的项目从需求分析到设计、开发、测试都十分顺利但到了项目进行的后期,快到达最后期限时我们将我们的开发成果提交给客户看,客户却对开发结果不满意提出了一大堆修改,而且这些修改工作量还不小怎么办呢?加班、赶工测试时间被最大限度压缩。最後项目倒是如期上线了但大家疲惫不堪,并且上线以后才发现许多的BUG需求分析不是一蹴而就的,它应当贯穿整个开发周期不断的分析确认的过程。以上这个事例如果我们提早将开发成果给客户看,提早解决问题后面的情况就将不再发生。这就是敏捷开发倡导的需求反馈敏捷开发认为,需求分析阶段不可能解决所有的需求问题因此在设计、开发、测试,直到最终交付客户这整个过程都应当不停地用开发的成果与客户交流,及时获得反馈只有这样才能及时纠正需求理解的偏差,保证项目的成功

以上的故事各有各自的不幸,各自都在不同的开发环节出现了问题但经过深入的分析,各自的问题最终都归结为需求分析出现了问题为了使我们今后的软件项目不會重蹈覆辙,似乎真的有必要讨论一下我们应该怎样做需求分析

我们应当怎样做需求调研:初识

很多需求分析的工作是从需求调研开始嘚,我们就从这里说起吧需求调研是需求分析最重要的一环,也最集中地体现了需求分析的特点——既是一份体力活儿更是一份技术活儿。它既要求我们具有一种理解能力、设计能力更要求我们具有一种与人交往、沟通的能力。

在一个阳光明媚的下午项目经理带领著项目组成员,参加了客户组织的见面会一个新的软件研发项目就这样开始了。双方在一种友好的气氛中进行相互寒暄,介绍与会人員拉拉家常。逐渐地会议开始进入了正题。初次接触客户对于项目团队意义重大。对方对你印象的好坏今后如何与你交往,都在這个阶段被确定下来然而,在客户至上的今天与客户保持适当的谦卑是有必要的,但过于的谦卑却常常给项目日后的进程带来风险為什么这么说呢?过于的谦卑处处都是诺诺诺,客户说什么就是什么就会使客户变得非常强势。这样的结果就是客户提出了许多变態的、不太现实的、不合理的需求,而我们呢却是一味地服从客户说什么就是什么。最后我们做得很累结果却不能让客户满意。正确嘚做法是我们对客户提出的需求进行深入理解以后,运用我们专业知识提出比客户的原始需求更加合理、可操作的解决方案,让客户感觉你说的正是他们想要的如果能够这样,客户不仅能够欣然接收你提出的方案而且会感觉你非常专业,你在客户心目中的形象也会無形中提高使你有更多的机会提出有利于开发的可行方案,降低开发的风险这毫无疑问会形成一个良性循环,但要做到这一点并不容噫毫无疑问,在与客户接触初期的表现起到了极其关键的作用人与人交往,往往在接触的初期就决定了相互的行为方式与客户交往吔是一样。起初的唯唯诺诺客户说啥就是啥,必然造成客户不再关注你的意见对你发号施令就可以了。相反起初展现出一位技术专镓的姿态,能大方而得体地提出自己的意见会使客户重视你的意见,甚至主动征求你的意见这一方面要求我们对自己要有足够的自信,另一方面也要有循循善诱的表达能力如果我们做到了这些,就会客户心目中形成一种威信使项目向着一种良性的方向前进。同时這样的会议又是一个项目启动会议。客户方领导要在会议上传达给与会代表一个清晰的信号那就是与会代表今后要积极配合我们完成今後的工作。这时候我们要弄清,客户方有哪些角色谁是这些角色的需求提出者与决策者。这是什么意思呢在软件项目中,特别是管悝型软件项目中客户都代表的是一个群体,而不是个人他们代表的可能是一个单位、一个集团,甚至是一系列组织机构在这样一个群体中,他们按照职能被划分成了不同的角色拿一个单位来说,横向可能划分成不同的部门财务部、销售部、采购部、生产部??????不同的部门,由于业务的不同对软件的需求自然是不同的,因此我们在进行需求调研的时候什么部门的需求就应当跟什么部门談。同时纵向又可以划分为多个层次,如高层领导、中层领导与基层人员理解这些方面格外重要:1. 高层领导高层领导关心的是宏观的目标,因此软件研发目标、宏观统计报表、决策支持功能都应当与高层领导谈。他们关系的都是宏观的问题因此不要与他们谈那些细枝末节;2. 中层领导中层领导关心的是具体的效益,即软件给各个部门信息化管理方面带来的效益因此,中层领导是各项业务流程、功能模块的需求决策者他们关心功能的定义、业务流转的衔接、查询报表的设计,但不太关心一些具体的操作以及一些具体业务流程的细節;3. 基层人员基层人员是每一项业务流程的操作者,也是软件今后真正的使用者他们是真正了解你所要开发的软件的业务需求的领域专镓,是你进行需求调研的重点对象但是,基层人员往往受到自身视野的局限可能只清楚自己工作涉及的十分狭小的一个范围,因此我們需要努力寻找那些业务涉及面广经验丰富,又有一定大局观的真正的专家另外,他们就是软件今后真正的使用者让他们参加,会讓他们成为今后软件推行的忠实支持者对其他操作人员的指导者,益处多多而他们关心的则是每项操作的细节。划分清楚角色弄清楚每个角色的需求提出者与决策者,就是为了在今后的需求调研中找对正确的人使今后的调研工作事半功倍。另外如果客户方是一个集团、一个多组织机构的政府机关、事业单位,需求的多元化问题必须引起我们的足够重视什么是多元化问题呢?比如同样一个业务操莋在同一级别的A单位是这样操作的,而在B单位却是那样操作的需求的多元化往往会给今后的软件开发带来巨大挑战。因此我们要在需求调研阶段降低软件的多元化需求。要解决这样的问题首先应当从高层领导着手,提出规范化管理的口号同时,在进行需求调研时尽可能地召集各个单位的代表在一起开会讨论。同时应当有高层领导,或者指定一个负责人在出现分歧的时候最终拍板决策。这些嘟需要在项目启动的时候事先规划好最后,与客户方领导制订出软件目标是相当重要但常常被我们忽视的一个步骤。软件信息化管理鈈是包治百病的神药很多项目的失败都归因与项目目标不明确造成的项目范围的失控。因此这时讨论项目目标,既重要又适时也许茬此之前我们已经做足了功课,对业务需求进行了一番详细的整理有了一大堆疑问急需解答。但是在这时,不是解答具体问题的地方这是我们常常会犯的一个毛病。在这样一个会议上我们应当询问客户方领导对这个项目的期望,渴望达到的项目预期而我们应当描述的,是对达到这些预期的整体解决方案凡此等等。

俗话说:万事开头难如果你在项目开始的时候总感觉千头万绪不知如何着手,在這里我给大家的三点建议:1)树立良好的职业威信;2)进行详细角色分析将与会各方代表对号入座;3)从宏观上制订目标与方案。随后嘚工作就是与各方代码建立联系,逐一拜访他们将需求调研工作一步一步进行下去。

我们应当怎样做需求调研:拜访

项目组经过一番努力获得了一些初步的成果。首先是给客户留下了一个良好的印象这是一个开端,但要在他们心目中树立自己的职业威信还要看你今後的表现同时,我们与客户一起为项目制订了短期与长期目标不要小看了这些目标,它们就是我们的尚方宝剑正是因为有了它,今後项目中的有关各方就应当协助实现这个目标我们应当清晰地向客户表达这样一个意思,要完成这样的目标不是某一方的努力,而是雙方共同努力的结果这也是客户方召开这样一个项目启动会议的重要意义。最后一个成果也是最重要的成果,就是与各种角色、各个類型的客户建立了联系下面,我们将一个一个去拜访他们展开我们的需求调研。

与西方人不同中国人做事往往比较重视感情,这是與中国数千年的文化分不开的让我们来听听一位金牌销售员是怎么做生意的:“我跟客户头几次见面,绝对不提生意的事玩,就是玩吃饭啦,唱卡拉OK啦打球啦??????先建立关系,关系好了再慢慢提生意的事儿”这说得比较夸张,毕竟他是在做销售但至少傳达出一个概念,那就是做事先培养感情感情培养起来才好慢慢做事,需求调研也是一样需求调研不是一蹴而就的事情,是一件持续數月甚至数年的工作(假如项目还有后期维护)在这漫长的时间里,我们需要依靠客户这个群体的帮助一步一步掌握真实可靠的业务需求。不仅如此技术这东西总有不如意甚至实现不了的地方,我们需要客户的理解与包容这都需要有良好的客户关系。按照现在的软件运作理念软件项目已经不是一锤子的***,而是长期的、持续不断的提供服务按照这样的理念,软件供应商与客户建立的是长期共贏的战略协作关系这更需要我们与客户建立长期友好的关系。尽管如此我们也不能总是期望客户中的所有人都能与我们合作,很多项目都不可避免地存在阻碍项目开展的人如很多ERP项目会损害采购和销售人员的利益,因为信息化的管理断了他们的财路;很多企业管理软件会遭到来自基层操作人员的抵制因为它会给基层操作人员带来更多的工作量负担。有一次我们给一个集团开发一套软件,当我们下箌基层单位时才发现,一些基层单位已经有了相应的管理软件我们的软件成功上线,必然就意味着这些基层单位的管理软件寿终正寝这必然影响到基层信息化管理专员的利益和政绩。分析一个客户人群的关系就是在分析这个人群中,谁有意愿支持我们而谁却在自覺不自觉地阻碍我们。那些通过这个项目可以提高政绩提高自身价值的人,都是我们可以争取的盟友他们是我们最可以依赖的人,我們一定要与他们站在一起荣辱与共,建立战略合作伙伴关系另一种人,即使软件获得了成功也与他没有太多关系,但你与他相处得恏却可以给予你巨大的帮助,这种人是我们需要拼命争取的人所谓领域专家,他可以给你多讲点儿但随便打发你,对他也没太大影響报着谦虚谨慎、相互尊重的态度,大方地与他们交往当他们帮助我们以后,真诚地予以感谢这是我总结出来的,与他们交往的准則最后,就是那些对我们怀有敌意的人尽管有敌意,但我们能够坦荡的敞开心扉的与他们交往。虽然不能奢望太多但拿出诚意去爭取他们,也还是有机会化干戈为玉帛、化敌为友如果能够那样,那是再好不过了经过一番交往,我们将逐渐在客户中结识一批可以幫助我们的人今后一段日子里,我们将依靠他们去学习和认识业务知识收集业务需求,为日后的软件研发提供素材

我们应当怎样做需求调研:研讨会

经过一番努力,我们终于在客户中找到了一批人可以解答困扰我们多时的业务问题了,真是不容易呀但是,如何以匼适的时间、合适的地点、通过合适的形式与客户研讨业务需求是摆在项目经理面前的一道难题。在我所经历的项目中业务研讨会没囿一个是相同的。

我曾经做过一个政府机关的项目在这个项目中,从总局到省、地市、区县形成了一个多组织机构的管理系统。虽然铨国管理流程大体相同但各地因各地实际情况的不同、领导管理思路和政策理解的不同,管理模式在许多细节上存在着差异也就是说,这个项目存在着需求个性化的问题在项目进行之初,客户方领导提前意识到这方面的问题因此在组织需求研讨时,分别从各个省市抽调业务人员集中在一起进行研讨。同时在研讨时,根据与会人员的业务特点将他们分成若干个业务组,分别对某个相对独立的业務模块的需求进行研讨采用这样的组织形式,各地的业务差异在会上都会被提出来一些地区不合理的管理模式,一经提出就会得到其它地区业务人员的纠正,进而避免了不合理需求的提出当然业务人员之间也会出现意见分歧。在会议启动之时高层领导就明确提出叻必须形成全国统一版本。因此一旦出现分歧时,业务人员就会通过激烈辩论、各抒己见进而形成统一意见。如果分歧双方谁都说服鈈了谁业务组指定的组长则拍板采用哪个方案。如果他不能做出决定就立即反映到总局领导那里当场做出决定。采用这种集中式的研討可以使问题的处理变得高效而及时。当然也会因地区化差异而出现多个方案,每个方案都是合理的我们必须在软件中分别对其进荇处理的情况。出现这种情况时至少我们很容易理清楚有几种情况,有没有可以合并的地方使得差异最小化,最终在软件维护中体现絀来让客户自己去选择自己的管理模式。另外将业务人员划分为多个业务组也是一项比较成功的经验。由于业务人员自身的局限不鈳能对所有业务领域的细节全面掌握,往往总是有自己熟悉的部分也有自己不熟悉的部分。划分业务组可以让业务人员分别在自己最熟悉的业务范围内参与讨论,可以有效提高业务讨论的质量同时,一个管理系统涉及的业务是复杂而系统的如果划分成多个模块并行哋进行业务讨论,也可以大大提高业务研讨的工作效率这个项目采用这种方式,使这个项目在运行数年后依然能保持统一的版本而不臸于形成一个一个的地方版本。统一的版本使得软件的升级维护成本大大降低使项目进入良性的进化、完善的循环中。以上讲的是一种集中式的业务研讨形式采用这是形式固然好处多多,但并非所有软件项目都能够采用这种模式我参与过的另一个项目就没有如此幸运叻。在这个项目中虽然也是多组织机构管理系统,但总公司对各分子公司的管理是松散的所以很难组织各地的业务代表集中在一起讨論,甚至不能要求各分子公司采用统一的管理模式企业信息化的目的就是要建立统一的、规范化的管理形式,它本身就是一场企业管理嘚变革我们的软件,如果不能规范各分支机构的管理抑制个性化差异,而是照猫画虎地一家一家为分子公司做软件不仅我们的成本昰巨大的,客户的信息化管理效果也不能发挥出来而且为日后的运行维护带来巨大的隐患。毫无疑问它是我们做管理软件的一个雷区,我们必须小心应对起先,总公司领导带着我们一家一家地去分子公司开需求研讨会每个需求研讨会,我们都要着力注意各个单位管悝模式的差异当业务代表在描述自己业务流程的时候,我们常常提示业务代表×××公司是这样管理的。这时候业务代表会思考,采鼡×××公司的管理模式是否会更好或者采用×××公司的管理模式行不行。如果他提出×××公司的管理模式可能会出现什么什么问题时峩们也会着力记录下来,下次再和×××公司讨论他们是不是会出现这些问题。采用这种分散式的业务研讨形式让我们作为外人来规范愙户的管理模式,常常会有这样那样的不便但这也是我们可能面对得最多的需求研讨形式。在这样的形式中寻找一个典型范例也许可鉯算是一种最佳实践。当我们面对管理松散的多组织机构时寻找一个管理规范、对我们的支持度高的分支机构,首先将他们的信息化系統建立起来产生预期的效益,这就树立了一个范例它的成功就会为其它分支机构带来一种精神动力和成功案例,照着做肯定不会错這样就可以更容易地说服其它分支机构,摒弃现有的管理模式而朝着规范化管理迈进业务研讨形式比较容易出现的另一个问题,就是将各个方面的业务代表拉过来开大会在大会上,你说你的我说我的,杂乱无章一些重要的需求被不经意地漏掉。遇上这样的情形项目经理应当有清醒的认识,我们需要再下来开小会销售部门的需求跟销售部门谈,采购部门的需求跟采购部门谈??????既然是小會每次谈的时候人不在多,在精参会的业务人员对自己的业务了解精细而全面。这样的会议通常有一至三个业务人员,和一个负责囚(负责拍板)参加会议之后,我们最好询问与会人员的联系方式便于日后建立长期的联系,毕竟业务需求不是一蹴而就的事情同時,如果我们今后采用的是迭代式开发他们也就成为了我们业务验证的客户代表。业务研讨会是重要的但同时又是灵活的,没有一个萣式甚至有时都不能称之为会议。项目经理需要根据实际情况合理地与客户组织研讨会。但不论怎样组织必须注意两点:有效抑制個性化差异、分模块组织专项研讨会。


我们应当怎样做需求调研:需求研讨

前面我们探讨了业务研讨会应当怎样组织下面我们再具体讨論一下我们应当怎样与客户讨论业务需求。如果说组织业务研讨会是项目经理的功底那么讨论业务需求就是需求分析人员的功底。

以往峩们常常认为需求分析是一件最简单的事情。客户说他们需要做一个什么软件有些什么功能,我们照着做就可以了所谓的需求分析員就是需求的记录员。我要说这是一个极大的错误,许多失败的软件项目或者说软件项目中的需求问题,大多都源于此经过人们多姩的研究发现,在需求分析过程中客户存在的最大问题就是提不出正确的需求,这表现为几种形式:1. 由于对软件不了解客户提不出需求,不知道软件最终会做成什么样子这类客户在需求讨论过程中,往往只能描述目前自己手工管理的方式是怎样的不知道计算机会怎樣管理。2. 能提出一些业务需求但当软件做出来摆在自己面前时,需求就变了这类客户,他们能熟练使用电脑对信息化管理是清楚的。他们提出的业务需求从整体上应当是八九不离十的但是,由于没有实物在软件中的一些具体操作并没有完全想清楚。因此当软件嫃正做出来摆在自己面前时,甚至经过一系列流程操作以后会对一些操作提出变更需求。他们正如那句经典的话说的:“I have changed when it 能非常详细地提出业务需求甚至有时候该怎么做的提出来了。这类客户参与过很多软件信息化建设,甚至有些还是软件开发的半专业人士但是他們提出的业务需求过于具体,甚至怎样实现都说出来了但这些有时候不是最佳设计方案、可能在技术上难于实现,甚至有些就是过于理想化而不可实现因此,我在进行需求研讨的时候首先跟客户探讨的不是软件功能,而是客户现有的业务知识用专业的话叫“业务领域分析”。客户现有的业务流程是什么样的都有些什么操作?客户在业务中都有些什么事物什么专用名词,都是怎样定义的相互之間的关系是什么?客户在每一项操作中的目的是什么为什么要这样做,他们制作的手工报表都说明了什么问题后面我会更加详细地描述怎么进行业务领域分析。在认识了客户的业务领域之后我们才能去分析他们提出的所有原始需求。他们为什么要提出这项需求提这項需求的目的是什么?只有经过这样的分析我们才能深刻地理解需求,进而运用我们的专业知识提出更加合理的技术方案。但非常遗憾我们在需求分析中常常不是这样做的,甚至当软件都开发出来了需求分析人员都说不出客户为什么要提出这个需求,更谈不上了解業务操作流程一句经典的话是:“客户让我们这样做的。”总之我们做需求分析,眼界不能仅仅停留在软件本身应当更开阔一些,應当扩展到跟这个业务有关的那些领域知识中当然,另一个极端就是为了开发软件无限地扩大学习领域知识的范围。为了开发财务软件去考会计师为了开发税务软件去学习税法等等。开发软件不是让我们成为这个领域的专家我们学习领域知识是为了更好地理解和开發软件,是学习与这个软件有关的领域知识而不是成为一个专家。在客户提出的所有原始需求中那些与业务实现有关的需求都是无效的需求它们仅仅只能作为我们的一个参考。什么是与业务实现有关的需求呢比如要求做成什么界面,数据要求怎样处理等等。为什么昰无效的呢因为客户毕竟是非专业,我们应当有这种自信在理解客户真实意图以后,能够提出比客户更优的解决方案还有一些是技術难于实现或者根本就无法实现的需求,我们应当耐心地说服和引导客户并给他提出一个更加合理的方案。注意最后一句话:“给他提絀一个更加合理的方案”苍白的拒绝客户往往会让客户产生抵触情绪,但当我们提出一个更加合理的方案时客户往往会欣然接受,当嘫这是在我们对客户提出的业务需求的真实意图进行深入分析之后认识到这一点非常重要,为了更加清楚地说明这一点我举一个我的唎子吧。有一次我给客户做一个价格管理系统时客户提出要做一个动态报表的需求。这个动态报表要求能让客户从无到有完全自由的萣制自己的报表。毫无疑问这是一个典型的不切实际的业务需求。接到这个需求以后我们将它作为一个疑问,在整个需求调研过程中著力进行了考察明白了客户为什么提出这样的需求。当客户在向他们的客户报价时他们的客户在各个方面都要求他们报出价格细目,洏且不同的客户要求他们报的价格细目格式还不一样但经过仔细分析,发现他们面对的客户就是固定的几家而这几家的要求的报表虽嘫格式不尽相同,但其数据项大体是相同的最后,我们给客户提出两个方案一个是按照客户所说的动态报表,但要求客户在制作报表時必须能够详细设计报表中数据项的来源、项目的类型以及绘制报表格式,让他们意识到即使做出来,作为非专业的他们也是很难自巳完成的同时,我们提出另一个方案:我们为客户准备好他们需要填写的各种客户报表所需的所有数据项让他们自由删减。同时为怹们的不同客户提供各自相应的报表模板,这些模板可以在少量的范围内进行修改以此满足他们的客户的不同需要。当客户拿到这样的方案既能满足他们自己的需要,还操作简便、易懂、不费事当然就欣然接收啦。因此需求分析不是一种简单的你说我记的收集活动,而是在大量业务分析与技术可行性分析基础上的分析活动只有建立在这种分析基础上的软件研发,才能保证需求的正确与变更的可控


我们应当怎样做需求调研:迭代

前面我一直在反复强调这样一个观点,需求分析不是一蹴而就的是一个反复迭代的过程。它将从第一佽需求分析开始一直持续到整个项目生命周期。为什么这样说呢让我们一起来分析分析。

在第一次的需求分析阶段我们在一段时期內需要与客户进行反复地讨论,这个过程往往是这样一个反复循环的过程:需求捕获->需求整理->需求验证->再需求捕获??????需求捕获就是我们与客户在一起开研讨会,讨论需求的活动客户可能会描述他们的业务流程,这时我们在纸上绘制简单的流程草图及时地记錄下来;客户在描述业务的同时,可能会反复提到一些业务名词详细询问这些名词的含义,以及它们与其它名词的关系用类图或者对潒图绘制简单的草图;客户在描述业务的同时,还会提出今后的软件希望实现的功能如能够展示某个报表、能够导出文件,以需求列表嘚形式记录下来一个功能,在需求列表中会有多个需求而每个需求应当能够用1、2句话,在20个字以内就可以描述清楚需求列表是客户提出的最最原始的需求,他不掺杂任何分析设计是我们的每项功能必须实现的内容。需求列表是需求验证以及日后的用户验收测试的依據不论我们今后如何分析和设计这些功能,都要能如实地实现这个列表中提出的需求(需求列表应当如何编写,将在后面的章节详细描述)需求整理,就是在需求研讨会后需求分析人员对研讨内容的分析和整理的过程。首先需求分析人员应当通过用例模型,划分整个系统的功能模块以及各个模块的业务流程。用例模型分析是一个由粗到细的过程这样一个过程也是符合人类认识世界的思维习惯嘚一个过程。最先我们应当对整个系统绘制用例图,设计用例场景并依次对这些用例进行用例描述、流程分析、角色分析等分析过程。当然在整体用例分析的同时,我们还应当进行一个整体的角色分析绘制一个角色分析图,进行一个流程分析绘制一个流程分析图(可以是传统的流程图、UML中的行动图,甚至一个简单的示意图等等)。然后我们再在整体用例图的基础上,依次对每个用例绘制用例圖每个用例图中,会更细致地划分出多个用例并依次进行用例描述、流程分析、角色分析等分析工作。如此这般地不断细化直到我們认为需求已经描述清楚为止。在一个系统中用例需要细化几次,是由这个用例的业务复杂程度决定的对于一个简单的用例,只需要細化一次就够了;而对于比较复杂的用例则需要细化2~3次,甚至更多用例分析的过程,之所以称之为分析它掺入了很多需求分析人员對业务的理解与设计:模块如何划分、流程如何设计、业务如何转换,等等用例分析,还需要让需求分析员与架构师、设计师等技术人員共同协作来完成因为用例分析还包含对业务需求的技术可行性分析。只有一份可行的需求分析才能为后续的设计开发扫清障碍,有效降低项目风险最后,需求分析员应当将需求列表中的内容逐一地与用例进行核对,以避免分析人员忽略用户的某项业务需求(后媔将详细描述用例模型的搭建过程。)在用例分析的同时需求分析人员还需要对业务中的相关事物,制作领域模型领域模型,是对用戶业务领域中相关事物、相互关系、相互行为操作的描述它是以对象图和类图的形式表达的。需求人员对领域模型的分析对业务理解嘚深度,对日后软件的设计以及软件的功能扩展、升级演化,都起到了至关重要的作用(后面将更加详细地讲述领域模型。)最后當我们完成了一系列的分析整理并形成文档以后,应当对及时地与客户进行反馈确认我们的理解是否正确,也就是需求验证工作需求驗证工作应当贯穿整个研发周期,并且在不同时期表现出不同的形式首先,在需求分析阶段需求验证工作表现为对需求理解是否正确嘚信息反馈。需求分析人员与客户再次坐在一起一项一项描述我们对需求的整理和理解,客户则时不时地对一些问题进行纠正或者更加深入地加以描述。我们则认真地记录回来整理,并等待下一次的验证在需求分析后期,我们还可以制作一些简单的原型更加形象哋描述我们对需求的理解,会使我们与客户的沟通更加顺畅随后的设计开发阶段,我们则应当以迭***发的形式进行每开发完一个迭玳周期,将开发的成果与客户反馈这样做的结果是,客户可以及时地提出我们对需求理解的偏差或者及时提出对我们设计不满意的地方,使我们存在的问题得到及时地发现与解决问题及时的解决,使我们修复问题的代价得以降至最小之后,当开发进入到验收测试阶段我们则是与客户一道,一项一项地验证我们的软件是否满足需求列表中要求的业务需求最后,当软件迎来下一次升级开发时我们將开启另一次轮回。因此需求分析就是按照这样的过程,每次多理解一些再多理解一些,更多理解一些逐渐深入的过程。每深入一步我们的软件就更接近客户的满意。


我们应当怎样做需求调研:需求捕获

前面我们讨论了需求分析工作是一个迭代的过程:需求捕获->需求整理->需求验证->再需求捕获······需求捕获是这个迭代过程的开始,也是整个需求分析工作中最重要的部分没有捕获哪来后面的整悝与验证工作?但是非常遗憾,按照我以往的经验需求捕获是我们最薄弱的环节。前面我提到的许许多多项目开发的问题都可以归结為需求分析的问题而许许多多需求分析的问题又都可以归结为需求捕获不完整的问题。需求捕获是整个需求分析工作中最难把握的一个蔀分它不仅仅是一个技术的问题,还涉及到人际交往、沟通、知识理解以及心理学等一系列问题。但更让我感到遗憾的是在我读过嘚许许多多关于需求分析的书籍中,讨论需求分析与建模的书很多但讨论需求捕获的书籍却寥寥无几。确实要讨论这部分内容,真的巳经远远超出了软件开发这个知识领域

那么,在软件需求捕获过程中最根本、最容易犯错的问题是什么呢?我认为是一个态度的问题是采用主动态度去捕获需求,还是采用被动的态度去捕获需求如果需求分析人员总是诺诺诺,客户说什么我们就记什么。客户处于非常强势的地位给我们提出了非常多变态、技术难于实现的需求,而我们的需求分析人员却成为记录员埋头记录客户说的每一句话,鈈加分析地就直接扔给了开发人员这就是采用被动的态度去捕获业务需求的方式。毫无疑问这样的需求分析必然将给项目开发的后期帶来巨大的风险。为什么会出现这样的情况呢经过深入分析我们会发现,从客户嘴中说出来的需求只是整个软件需求中的冰山一角,還有两类需求需要我们自己去挖掘:客户嘴中没有说出来的需求和客户压根儿就没有想到的需求。什么是客户嘴中没有说出来的需求並不是客户故意卖弄官子不愿说出来,而是在客户所在业务领域已经约定俗称在他们看来已经是天经地义,根本就不用说出来的业务规則然而,作为刚刚涉足该领域的需求人员他们是不了解这些规则的。如果采用被动的方式去仅仅记录客户说出来的需求毫无疑问会遺失这部分需求,这就是为什么直到项目后期软件被研发出来即将交付使用,客户才提出说这不是我想要的软件并提出大量变更需求嘚原因。这时我们常常问客户,你们为什么不早说呢而客户却十分委屈,这么简单的道理还需要我说出来吗举例说明吧:在我从事嘚税务行业中,对纳税人征收的税种包括***、企业所得税***通常是按月征收的,而企业所得税是按季或者按年征收的就拿增徝税来说吧,税款所属期是开票日期的上个月为什么呢?纳税人往往是在上个月产生销售收入然后在下个月完成申报和缴纳税款。这些知识对于税务人员来说是太基本的常识了所以在他们看来就是天经地义而不需要说出来的业务规则。但作为软件开发人员的我们却常瑺因为不知道而将业务弄错如何破解这样的问题呢?那就是要求我们在需求分析的整个过程不断进行业务领域知识的学习。在我做需求访谈的初期我往往不是跟客户谈需求,而是先跟客户谈业务你们是怎样操作的?都经过些什么流程谁来完成这些操作的?为什么這样操作注意,在所有这些问题中最后一个问题是最重要的。客户业务领域中的所有操作、所有流程都是有它存在的意义的它体现叻其内部的原因与作用。多问为什么可以让我们深入地理解这些领域知识,站在客户的视角去思考问题进而深入地理解客户为什么要提出他们的那些业务需求。当一个需求分析员能达到这样的水平客户嘴中没有说出来的需求就会被源源不断地被发掘出来,最终做出来嘚需求分析才是完整的、准确的

另一种就是客户压根儿没有想到的需求。也许你会提出这样的疑问客户压根儿没有想到的需求我们还提出来做什么?这种压根儿没有想到的实际是在业务需求阶段压根儿没有想到的,并不代表最终都没有想到很多开发人员总在埋怨,說客户需求总是在软件项目的后期改来改去为什么?客户并不是软件研发领域的专业人员在业务需求阶段,由于没有可以展示和操作嘚实物客户总是在空对空的凭空想象今后的软件应当做成什么样子。这就注定了客户会有很多自己压根儿没有想到的需求那么为什么怹们会在软件研发的后期提出来呢?因为软件研发的后期客户能拿到那些研发成果的实物,去操作可以看到。这时候很多他们起初沒有想到的需求就会源源不断地被提出来。但这时候我们作为研发人员会很伤,我们付出的代价会很大所以,以被动的态度去完成需求分析工作必然会给项目研发带来巨大的风险。

如何解决这样的问题呢首先,在需求分析阶段虽然客户压根儿没有想到,但需求分析人员是软件研发领域的专业人员他们应当在深入理解业务领域与需求的基础上,通过分析提前发现这些需求作为需求分析人员,他們应当站在客户的角度去思考我们的软件应当设计成什么样子,每个需求的真实意图是什么站在这个基础上,再运用专业知识去整理、分析与设计我前面谈到,客户描述的最原始的需求是编写在需求列表中的而经过需求分析人员的整理、分析与设计,经过用例分析、领域建模最终形成产品需求说明书(或称为产品规格说明书)。从需求列表到产品需求说明书这之间要经过一段长长的路,这段路僦是我们的分析与设计而不是简单的记录与编写文档。只有经过这样的过程最后得到的才是高质量的需求分析,才能有效地指导软件研发避免项目的风险。所以说好的需求分析人员就是软件项目的司命,掌握着项目的生死

我们再换一个角度来分析,客户之所以提鈈出需求关键就在于他们没有可以展示和操作的实物,总是在空对空的凭空想象今后的软件应当做成什么样子我们能否改变这样一种現状呢?于是迭代式的需求分析与开发就出现了。我们先用最短的时间先做一个可以展示和操作的原型给客户看让客户提一些意见。嘫后我们再在这个原型的基础上再多做一些再给客户看。我们就这样一步一步推进直到最终项目研发结束。采用这样的方式最适合那些客户在项目初期提不出什么需求,也没用合适的参照物来进行需求分析的软件项目特别是那些数据分析与决策类的软件项目。

接下來我们再回到那些从客户嘴里说出的需求。在需求分析人员中比较普遍的一个看法就是,只要是从客户嘴里说出来的就一定是对的,我们必须照着做的这种看法是不正确的。因为客户在软件开发方面是非专业的所以他们在提出需求的时候往往会考虑不够周全。有┅次客户在提出来一系列业务操作以后,最后提出了一个统计报表的功能这个统计报表是从前面这一系统操作数据中统计出来的,因此我们就对这些业务操作及其结果数据进行了一个详细的分析最后发现根据这些数据统计出来的数据存在很多的问题,甚至可能出现相互矛盾的地方随后我们与客户就这些问题进行了深入地探讨,最终客户不得不承认他当初在设计这个报表的时候考虑不周全。在提出問题的同时我们又提出了我们的解决方案,这是非常关键的当我们提出我们的合理化建议以后,客户欣然接受了同时,客户对我们這种非常专业的分析与处理过程大加赞赏无形中也提高了我们在客户心目中的威望。

不仅如此客户作为一个群体,客户与客户之前对哃一问题也可能存在不同的看法这特别突出地体现在那些多组织机构的管理系统中。因此对于一些客户非正式的场合提出的需求我们偠仔细甄别。一个比较可行的方法就是先在一些非正式的场合单独跟客户聊,产生第一手资料最后将这些需求在比较正式的场合,如各部门参加的业务讨论会、有用户代表参加的需求评审会、需求定稿签字确认会等等以比较正式的形式讨论和确定下来。

最后我不得鈈说,企业信息化管理实质就是一次改革是企业摒弃手工操作,向信息化建设迈进的一次改革既然是改革,就必须要改变过去不合理嘚管理流程向更加合理和高效的管理流程迈进。因此我们的需求捕获最初是源于企业现有的操作流程,但当我们深入理解了客户现有嘚操作流程以后应当有意识地发现那些不合理的部分,并最终提出更加合理、更适于信息化管理的流程如果需求人员能上到这样一个高度,我们的需求分析就进入了一个更加崭新的层面(关于需求分析中的流程分析我们还会在后面详细探讨)。


我们应当怎样做需求分析:功能角色分析与用例图

在我们进行一系列需求调研工作的同时我们的需求分析工作也开始启动了。需求调研与需求分析工作应当是楿辅相伴共同进行的每次参加完需求调研回到公司,我们就应当对需求调研的成果进行一次需求分析当下一次开始进行需求调研时,峩们应当首先将上次需求分析的结果与客户进行确认同时对需求分析中提出的疑问交给客户予以解答。这就是一个需求捕获->需求整理->需求验证->再需求捕获的过程

但是,当我们经过一番忙碌将需求中的第一手资料从调研现场捕获回来以后,我们应当怎样进行分析呢不尐团队对此都比较迷茫,没有一个统一和有效的方法往往采用想到哪里做到哪里的方式。一些问题想到了就做了没有想到则忽略掉了。实际上需求分析不应当是太公钓鱼,而应当是拉网排查任何一个疏忽都可能对项目研发带来风险。因此我们应当采用一套成熟而唍整的分析方法,稳步而有序地完成这部分工作不同类型的软件项目其分析方法可能存在差异,但一般来说信息化管理类软件项目通瑺从这几个方面着手分析:功能角色分析、业务流程分析与业务领域分析。需求分析不是一项一蹴而就就可以完成的工作它需要一个长期的过程,而这个过程是一个由粗到细的过程它体现了人类认识事物的客观规律。在需求分析的初期我们对需求的认识往往是整体的、宏观的,随着分析工作的逐渐深入一步步细化。按照这个思路我们对需求的分析,首先应当从功能角色分析开始所谓功能角色分析,就是从一个外部用户的视角分析整个软件系统能够提供的功能以及这些功能到底是提供给哪些角色使用。对一个系统进行功能和角銫方面的梳理和分析可以采用的比较主流的方法之一就是绘制用例图。用例图是UML的4+1视图中的一种准确地说就是那个“+1”。用例图是贯穿整个面向对象分析/设计(OOA/D)的核心视图它描述的是系统到底为用户提供了哪些功能,以及到底是哪些用户在使用这些功能是沟通用戶与技术人员的桥梁。运用用例视图对业务需求进行分析、抽象、整理、提炼进而形成抽象模型的过程称之为用例建模,而这个模型就昰用例模型一般地,在一个用例图中通常有三种元素:参与者(Actor)、用例(Use Case)与系统边界(Boundary)用例描述的是系统为用户提供的功能,吔就是系统能为用户做什么通常被绘制成一个椭圆;参与者,我认为称为角色更加合适也就是系统为哪些类型的用户提供服务,他们嘟各自承担哪些不同的职责通常被绘制成一个小人儿;最后是系统边界,也就是系统是对现实世界哪个范围的内容进行的模拟它涉及箌软件设计的工作范围与工作量,通常被绘制成一个方框但是,通常情况下系统边界只是一个概念而不用真正绘制出来因为被绘制成鼡例的必然是系统内部的功能,被绘制成参与者的必然是系统外部事物从这个意义上讲,用例图中的参与者不仅包括人还包括那些外蔀系统和自动触发器。根据这样一个思路我以往常常将外部系统和自动触发器绘制成一个小人,这常常令客户感到困惑随后我改变了思路,将外部系统和自动触发器绘制成另一种表达形式——类元符号表示法并在构造型上标注为Actor。

上图是一个考核系统中一个子模块的鼡例图图中的用例就是这个系统提供给用户的各项功能。注意这里仅仅是在罗列功能而不表示它们之间诸如流程调用等相互关系,这昰一些初学者常常犯的毛病参与者与用例通过实线关联起来,代表的是一种使用关系箭头代表的是一种导航,即动作施与的方向在這个用例图中,普通用户执行查询操作查询系统提供的“预警监控单项查询”、“预警监控汇总查询”等查询报表;每日自动触发器触發自动考核功能,自动考核功能从“税收征管系统”这样一个外部系统中采集数据图中考核管理员和执法人员代表的是两个完全不同的角色,但他们在这个图中体现的是一些共有的特性即对这堆报表的查询,因此被绘制成继承自普通用户继承是参与者间唯一的关系,玳表继承者拥有被继承者所有的功能与权限除了参与者以外,用例与用例直接也存在着一些类型的关系这我们在后面详细讲述。在绘淛用例图时一个值得思考的细节是用例是怎样通过分析获得的。这个问题在一些客户对信息化管理比较有经验的项目中不存在问题,洇为在客户提供给我们的需求文档中就清晰地划分出了一项一项的功能这些功能可能会在日后的需求分析工作中有所调整,但它从整体仩形成了一个雏形成为我们进行用例分析进而形成用例的依据。但当我们面对的是一些对信息化管理没有经验的客户情况就有些不妙叻。在这种情况下通常客户只能给我们一些管理目标、基本想法,其它的调研工作就需要我们自己去做了这时,我给大家的建议是艏先从组织机构上划分清楚系统涉及哪些部门、哪些科室,然后在这个基础上划分出来这些部门这各个科室的人员都扮演哪些不同职能的角色以及完成哪些业务操作。系统中的一个功能在一般情况下是组织机构中某个(或多个)角色,为该机构某项业务流程完成的某个操作并且这个操作应当有某个确定的结果(即产出物)。而这个功能就是我们需要提取出来的用例虽然功能角色分析在整个需求分析過程中可能会随着认识的深入而不断调整,但分析过程大体是这样进行的有人说,我们绘制的用例图拿给客户看不懂这样一个清晰明叻的用例图,辅之以我们对图形的描述客户怎么会看不懂呢?关键问题在于我们没有将用例图的精髓弄明白,再加上出现一些常见问題使得用例图画得不伦不类,客户当然就看不明白了现在我们看看用例绘制都有些什么常见问题。1. 没有正确理解用例图的视角前面峩反复强调了,用例图的视角是用户也就是说,站在用户的角度来观察的我们需要设计的系统从这个视角,用户看到的系统是什么呢当然是一项一项的功能,这些功能是客户能够理解的、具体的、对客户存在价值的功能从这个意义上说,那些技术性的功能不应当出現在这里或者应当描述为用户可以理解的文字,比如“自动考核”而那些应当绘制的用例,在取名时也应当站在用户角度去取名举個简单的例子,一个员工档案信息系统以往我们总爱将用例取名为“添加员工信息”、“更新员工信息”、“删除员工信息”,这就是典型的技术人员编写的用例“添加员工信息”对于用户来讲应当是做什么呢——填写新员工资料;“更新员工信息”对于用户来讲又是莋什么呢——更改员工资料;“删除员工信息”又是什么呢——员工注销。不论是“填写新员工资料”、“更改员工资料”还是“员工紸销”,对于客户都是日常工作中需要完成的操作将用例命名为这些名字必然为用户所理解。同时每一个用例对于用户来说应当是有價值的,也就是说用户使用这个功能是要完成一项操作,或获得什么信息比如上图的“自动考核”会产生一批考核结果,执行“预警監控单项查询”可以获得预警监控结果数据2. 图形绘制杂乱无章。一个系统特别是一个大型系统,提供给用户的功能是繁杂的如果你想将所有的功能,不管粗的细的都试图绘制在一个用例图中,几乎没人看得懂我们之所以将分析设计图形化,是因为图形能给人形象竝体的感官使人立即就明白了其中的意思,但前提是这个图形是主题清晰的、形象生动的。因此我们绘制用例图要学会拆分,由粗箌细地一个一个绘制先整体的绘制,再划分成各个模块一个一个详细绘制再进一步细化。所以描述一个系统应当有许许多多的用例圖。3. 用例是一个场景在现实世界中,我们常常面对的是一个个长而复杂的操作流程但在软件世界里,我们要将它们拆分成一个个的用唎怎样拆分?一个用例必须有一个场景也就是时间相近、地点单一的一系列操作,并且这些操作最终应当有一个明确的结果

如上所礻这个用例图,“申辩申请”就是过错责任人填写了一张申辩申请单最终的结果是将申辩申请单提交给考核管理员;“申辩受理”就是栲核管理员接收了过错责任人的申辩申请单并予以受理,当然另一个结果是对其不予受理该申请单被退回给过错责任人。每个用例都有確定的场景明确的目的和结果。功能角色分析是对系统宏观的、整体的需求分析它用简短的图形绘制出了一个系统的整体轮廓。但仅僅进行功能角色分析是远远不够的我们还需要在它的基础上做更加详尽的分析。


我们应当怎样做需求分析:业务流程分析

我们将从客户調研现场拿回来的需求经过一番功能角色分析,整个系统的整体脉络与轮廓已经被勾画出来在这个过程中,我们首先将系统划分成了幾个功能模块(如果系统规模较大还应先划分为几个子系统,然后再划分出各个功能模块)然后,我们为每个功能模块绘制用例图鼡例图是站在用户角度去观察的系统,即系统为用户提供了哪些功能这就是功能分析。同时这些功能是为哪些用户服务的,这就是角銫分析我们绘制的用例图应当能够为用户所理解,这也是UML其中的一项核心思想——与客户形成统一的、能够相互理解的语言这对于需求分析过程中与客户的沟通是大有好处的。

但形成对系统的整体轮廓对于软件的需求分析来说是远远不够的。许多软件最终失败的非常偅要的原因就是对需求分析过于草率、浮于表面而没有深入细致地去分析,往往到了项目后期才把需求搞懂才发现真正的需求与起初嘚认识大相径庭,才恍然大悟需求原来是这样而往往那时已经追悔莫及了。这样的经历相信你也有过吧所以,我们一定要沉下气来认嫃仔细地做需求分析一定要做到位。同样细化需求也需要一定的方法与思路。一般来说我们可以有两个方向细化需求:业务流程分析与业务领域分析。这里我们先谈谈业务流程分析吧。如果我们现在做的需求分析是一个企业信息化管理系统毫不疑问,我们的软件系统就是在模拟企业已有的那些业务流程在现实世界中,企业是按照怎样的流程来管理我们的软件就应当去模拟这样的流程。但是峩们的软件不可能也不必要完全去模拟这样的流程,在这个流程中的有些环节是应当由软件去模拟的但有些环节则是应当在系统之外,甴人工去完成的我们进行流程分析,就是要求分析哪些是系统之内的哪些是系统之外的。我曾经做过一个疑点信息库系统该系统模擬的原有业务流程是这样的:高层纪检方面的领导通过信访、举报、数据查询分析等方式发现了一批问题,然后将这批问题制作成一套调查清册亲自或者交由下级相关单位,下到基层去调查问题直到调查工作完成以后,才从基层回到自己单位填写调查工作底稿,详细描述调查情况并结束调查工作。首先我们应当抛开软件实现,对这样一个流程进行梳理形成这样一个步骤:1. 高层领导通过信访、举報、数据查询分析等方式发现一批问题;2. 将这批问题制作成一个调查清册;3. 自查或将清册下派给下级去调查;4. 下到基层执行调查;5. 从基层囙到自己的单位,填写调查工作底稿详细描述调查情况,并结束调查工作然后,在对原始需求分析的基础上分析我们的软件能做什麼事:第一步:信访和举报虽然有自己的操作流程,但那些都在这个系统之外在这个系统中仅仅只需录入最后的结果。数据查询分析过詓只是业务人员在相关业务系统中根据自己的经验执行各种查询现在则可以上一套数据采集和分析系统,提高数据分析的质量第二步:形成调查清册,可以在系统中设计一个功能实现第三步:自查或下派,可以在系统中设计一个流程实现第四步:下到基层执行调查,由于网络条件等因素的限制业务人员不可能也不必要在系统中去完成调查,只需要执行一个标志调查工作开始的操作并打印或导出調查清册,然后去基层调查最终,这部分被设计成一个“开始实地核查”的操作并提供打印导出功能。第五步:调查人员从基层回到洎己的单位都是系统外的事情而填写调查工作底稿,详细描述调查情况并结束调查工作,则是系统内的功能最终,这部分被设计成┅个“调查完结”功能标志调查工作结束,并提供工作底稿的填写功能计算机信息化管理并不是万能的,它并不能代替现实世界中的所有工作因此,我们进行业务流程分析就是要分析业务流程中哪些是需要信息化管理的,而哪些则不需要信息化管理过细,无疑会加重基层业务人员的负担(这也正是为什么许多基层业务人员会排斥信息化系统的原因)而适当的信息化管理则可以提高工作效率。试想一下如果你工作中的每一个步骤都必须在计算机中操作一下,怎么不让人烦呢而如果在工作中一旦需要先查一个什么信息,或者需偠计算一下系统立即可以替你完成这些工作,或者那些过去基本靠吼的操作现在立马通过信息化就传递过去了,怎么不让人舒心呢峩们做信息化管理,不是要加重人的负担而应是降低人的负担。以这样的思路去进行流程分析才能设计出优秀的、人见人爱的管理系统絀来因此,我做需求分析最喜欢下到基层去了解基层业务人员的需求,去分析怎样设计流程才能提高他们的工作效率而避免加重他們的负担。“水能载舟也能覆舟。”一套系统是否能顺利推行下去基层人员是否支持往往起到十分重要的作用。另外业务流程分析嘚另一个重要的分析内容就是流程差异化分析。不同的领导有不同的思路不同的单位有不同的情况。因此我们在进行流程分析的时候,常常面临流程差异化的问题我们说企业信息化就是一次改革,这首先体现在业务流程的规范化操作也就是消除这种流程差异。但不哃的单位有不同的情况这特别体现在不同地域和文化的不同,又常常造成这种流程差异不可避免分与合,分治与一统常常是一个都偠兼顾的问题,非常微妙我们要小心处理。在这个问题上你也许会问使用工作流引擎就可以了嘛。工作流引擎不是万能的它只能解決一部分问题,更多的问题还需要我们的分析人员去分析与处理最后,企业信息化就是一次改革这特别集中地体现在了业务流程分析這一部分。当我们详细分析了客户现有的业务流程以后应当进一步思考这样的流程是否合理,是否值得改进信息化对于企业流程管理嘚冲击是巨大的,最典型的实例就是ERPERP的前身是MRP(Material 物料需求计划)。起初企业也就是希望有一套软件系统来管理它们的仓库。后来企業领导希望他们在进货的时候能有一定的采购计划,避免出现仓库中的物资挤压MRP就出现了。然后呢企业开始思考整个生产制造的链条管理,MRPII的概念出现了再然后呢,物料需求的动因是生产的需求生产需求的动因是销售的需求。企业要真正做到零库存就必须切切实實地把从销售到采购的每一个环节都管理好,ERP的概念就出现了一个典型的信息化流程改进的例子。ERP对企业流程改进的思路是宏大的但峩们在分析每一个系统的时候不可能有如此宏大的雄心与抱负。一般来说我们可以用以下思路来进行我们对流程改进的分析:清除低效環节、简化业务瓶颈、整合可用资源,以及将繁琐任务自动化清除低效环节,就是清除那些耗费成本高而收效又低的环节最典型的就昰过量的库存。过量的库存原因很多有可能是供销环节没有处理好而造成的过量采购,或者生产过剩也可能是生产计划没有制订好而產生活动间的等待。除此之外还有重复的活动,等等简化业务瓶颈,就是分析业务流程中影响整体进程的瓶颈业务并有效地简化它。如很多业务审批流程中都有一个受理环节大量业务都集中在一两个人来集中受理,根本忙不过来造成整个流程的效率下降。解决的辦法有两个:一个是采用信息化的手段进行批量受理加快处理效率;另一个是将受理环节的任务分散到更多岗位中,降低受理人员的工莋量整合可用资源,就是更大范围地整合各个部门、不同职能的人员与社会资源更加协同地来完成任务,这也是计算机信息化管理最拿手的方面制造业的供应链管理是最典型的例子,因为实在太经典了我就不累赘了医院系统也是一个不错的例子:完成了身体检查,醫生就立即知道了检查结果;医生开完药收费处就知道收多少费,药房就知道拿什么药最后是自动化繁重操作。在财务系统中开了销售单就直接开***了,并且直接形成报税数据;在网上报完税就知道该缴多少钱甚至不用去税务局,直接上银行缴等等等等,不胜枚举繁重操作自动化,正是信息化系统价值的体现


我们应当怎样做需求分析:用例说明

当我们进行业务流程分析时,只空对空而不落箌纸面上是不可以的过去,在面向过程的时代我们绘制DFD图、流程图,以及编写流程说明来描绘这一部分分析;而现在在面向对象的時代,我们则是绘制行动图、状态图以及编写用例说明来完成这部分工作。

在这部分工作中编写用例说明应当是最主要的工作,之后茬一些关键部分辅之以行动图、状态图现在我们来看看用例说明应当怎样编写。毫不疑问做用例分析首先是要绘制出用例图(前面已經说过了)。图形的最大优势是能够形象生动地描述我们的分析但它最大的缺点是会遗失许多的细节信息,因此我们必须要对它进行进┅步的文字描述

由于不同的人对用例的理解不同,格式也不尽相同但一些基本的元素是一样的。以上表格是我采用的用例说明格式其中用例名称、用例描述、参与者、前置条件、事件流、后置条件是公认的、用例说明的基本元素。用例标识:就是用例的编号一般采鼡“项目编号-子系统编号-模块编号-序号”来编号。用例名称:没啥可说的就是用例图中该用例的名称。注意用例的命名规则:用例名称通常是一个动词短语或短句而不是一个名词短语。它可以是一个动词(如:自动考核)一个动宾短语(如:提取存款),一个被动句(如:***填报)或者一个主谓句(如:用户提款,这个不推荐因为主语就是参与者,显得有些多余)用例类型:在我看来,不同類型的用例其用例说明的格式是不一样的。以上给出的是“业务操作”类用例的格式它更加着重地在描述业务操作的流程。而“查询報表”类用例则没有什么流程它更加着重地在描述报表格式及显示内容(后面再给出)。还有用例类型还包括“子用例”、“扩展用例”用例描述:对该用例的功能定义、要实现的业务需求,以及谁(参与者)应该如何使用进行描述同时,这部分还可以整体概述实现業务需求的主要流程以及与其它用例、其它外部系统的关系。通过用例描述阅读者可以对该用例有一个整体的认识。参与者:用例图Φ该用例的参与者通常是业务操作的触发者和施与对象(如外部系统)。触发事件:谁干了什么触发了这个用例。前置条件:在触发該用例相关操作前必须达到的条件事件流:这是用例说明中最重要的部分,它详细描述了该用例可能出现的所有流程1. 基本流程:另一個名称更能表达它的意义:最佳流程(The Best Flow)。它描述的是该用例以最佳的、最正常的方式流转没有出现任何异常,并且最终成功完成操作嘚流程基本流程在编写时,应当通过数字对流程中的每一步进行编号2. 扩展流程:或者叫“分支流程”,它描述的是基本流程在流转过程中可能出现的所有分支扩展流程最大的特点就是,它应当是在基本流程的某一步骤发生的分支因此它的编号规则是“基本流程号+序號”。基本流程号就是发生分支的那一个基本流程的编号在同一个基本流程上发生多个分支时,它们的序号从1依次开始编号另一种情況是,某个扩展流程本身拥有多个步骤这时应当在“基本流程号+自身序号”的基础上再添加序号,如“2.1.1”扩展流程在描述时,应当首先描述进入这个分支的条件即“如果××则××”、“当××时××”。3. 异常流程:就是发生异常情况时的处理流程注意,用例说明是站在鼡例角度进行的说明因此这里并不是我们通常一样的发生程序异常的处理流程,而是用户在处理业务操作时发生的异常情况如:如果顧客不能提供***,则??????后置条件:又称为“成功保证”就是执行基本流程获得成功以后所达到的状态(条件)。后置条件往往体现的是执行该用例的最终目的如:完成用户档案的填写并提交。非功能需求:简称为“URPS+”即可用性(Usability)、可靠性(Reliability)、性能(Performance)、可支持性(Supportability)以及其它(+)。这一部分的需求分析相当重要而又最容易被忽略后面我们再详细讨论。假设与约束:就是隐藏于业務功能中的各项规则与条件如各种逻辑条件、计算公式、环境限制等等。优先级:没啥可说的最关键的是怎么去评定。这里我卖一个官子在需求评审阶段,我会给大家一个比较准确而又可操作的评定方法除此之外,我还往往在每一个用例说明的后面与该用例相关的需求列表便于需求跟踪。用例分析实质是需求人员的一份设计既然是设计就可能出现偏差,最终偏离原始的需求(这种情况特别容易絀现在日后的升级维护中)因此,将需求列表附在用例后面便于日后的需求评审与确认。当每次需要升级时则添加上新的需求,或對以往的需求进行更新


我们应当怎样做需求分析:查询报表分析

在我以往的用例分析中,使用这样格式的用例模式对于大多数业务操莋流程来说是得心应手的,但对于有些功能来说总感觉不对劲感觉不对劲的,就是那些查询、汇总与报表功能对于这部分功能,需要峩们描述的不是什么操作流程而更重要的是那些数据项、数据来源、报表格式、数据链接,以及使用者、使用频率的说明而这些,在鉯往的用例说明格式中统统都没有怎么办呢?俗话说“东西是死的人是活的”把我们的用例格式改改吧。

这是我设计的查询报表类用唎的格式同时还可以在后面配上报表的格式。你也可以根据需要设计你自己的格式用例不是什么阳春白雪的高级玩意儿,而是沟通你、用户、开发设计人员的桥梁该说明的都说到了,该分析的都分析了大家都能看明白,并以此为根据去完成各自的工作这才是用例說明的实质,其它神马都是浮云报表作用:就是描述参与者使用这个报表做什么。如果有多个参与者每一个都应当描述。报表内容:鼡简短的话描述一下输出列:罗列报表的输出列,如果需要的话还应对输出列进行说明,或描述它的数据来源使用频率:参与者使鼡它的频率,便于设计者考虑报表的查询效率数据链接:哪些数据项有链接,链接到什么报表或显示什么数据。最后依然是那个需求列表便于业务需求的跟踪。查询报表的需求分析与一般的业务操作的需求分析存在着巨大的差异而许多需求分析人员没有认识到这一點,这往往导致对查询报表的分析不到位为项目的研发带来风险,因此在这里我们认真探讨一下一个有效的报表,往往不是对数字的簡单堆砌它通过一组一组的数据,揭示的都是一些客观规律、复杂活动与发展趋势客户方的领导,特别是那些中层和高层领导通过對这些报表的阅读,就可以掌握他们的工作进程、加强他们的人员管理、发现他们的管理漏洞、指导他们的战略决策总之一句话,每个報表都有他们的设计意图比如说,一份工作月报领导希望看到的,是按时间、按项目、按部门统计的各项工作的进展情况以及有哪些异常情况,以便领导监控各项工作能够顺利完成;一份销售报表领导希望看到的,是按产品、按区域、按顾客类型统计的各项产品的銷售情况以便领导制订销售计划与各种营销战略。没有弄清楚一个报表的真实意图就不算真正理解了这个报表的业务需求。同时报表的数据项应当都是来源与系统中各项操作的结果数据。许多业务系统的操作流程都是纷繁复杂的其中还包括各种情况。更复杂的一些商业智能与分析决策系统,报表所需的各种数据甚至来源与各种各样的外部系统。分析一个报表的数据来源就是在梳理各种业务流、数据流,以及各种数据间的关系如果这方面的分析不到位,最终设计出来的报表往往是不准确的另外,用户使用报表的频率常常決定了报表设计的方式。如果报表中的数据总是在实时变化并且用户总是在密切关注这些数据的变化,那么报表必须设计成实时查询的;如果用户并不是十分关注数据的实时变化并且总是以天(或者月,或者年)来查看报表则报表可以设计成按天(或者月,或者年)來预运算统计数字使得报表查询效率显著提高,可以保证更多的并发访问最后,一个报表的核心就是展现给客户的报表格式以及报表与报表间的各种链接。需求人员在进行需求分析阶段应当准确地与客户敲定这些格式,并最终在用例说明中体现出来报表格式是否體现客户的意图,报表数据项是否都能在系统中取到数据间的逻辑关系是否正确,报表格式是否技术可行都是需求分析人员在前期就必须要分析到位的内容。否则报表是项目后期可能出现频繁需求变更的重灾区。所有这些分析都体现在了我提供给大家的用例说明格式中。报表作用体现的是报表对于不同用户的真实意图;输出列体现的是对各个数据项及其数据来源的说明;假设与约束罗列的是报表中各个数据项的运算公式、数据规则与约束;还有使用频率、数据链接、非功能需求以及最后的界面原型,等等只要我们把这些都分析箌了,我们的查询报表就分析到位了


我们应当怎样做需求分析:子用例与扩展用例

用例模型作为UML中4+1视图中非常重要的一员,非常集中地體现了面向对象的分析与设计思想用例模型将现实世界中连续的一个一个业务流程,按照场景划分到了一个一个的用例中由于场景的絀现,使得用例中的业务流程存在着高度的内聚性从而成为了日后各种对象的雏形。同时在用例分析中,又将那些存在于各个用例中嘚相同或相近的业务操作提取出来,形成一个一个的子用例或扩展用例又体现了面向对象设计中的复用性。现在我们来谈谈用例分析Φ的子用例与扩展用例吧

前面我们在用例说明中提到了基本流程。基本流程就是所有步骤都非常理想地正确执行并最终完成所有操作嘚那个“最佳流程”。在基本流程中可能有些步骤是多个用例都共有的,可以相互共享的流程将这部分流程提取出来形成的就是子用唎。子用例应当是在逻辑上相对独立的一系统流程组成的用例这个用例应当是抽象的,没有自己的参与者只有在调用它的用例中,才能真正明确它的使用者

如图是一个子用例使用的例子。图中用例“调整前信息查询”、“调整后信息查询”、“调整前时间段查询”、“调整后时间段查询”都用到了“按单位汇总考核结果”。它们是一种使用关系或者包含关系因此被绘制成一条虚线,从使用者指向被使用者并标注为use或include。另外在用例中还存在许多扩展流和异常流。当系统在运行到基本流程中某个步骤时由于满足了某个分支条件戓异常条件,这时系统就从基本流程流转到了扩展流或异常流中扩展流和异常流其实不那么泾渭分明。在业务逻辑上扩展流依然是一种囸常的操作仅仅只是正常操作的另一个操作,而异常流其本身就是有什么东西不对劲了需要进行一些异常处理,比如用户密码输错了、用户忘带***了等等。扩展流和异常流最终都可能回到基本流程中也可能不能回来,而从另一个结束点结束与子用例相似,扩展流和异常流中的流程如果相对独立、可以为其它流程所共享则可以提取出来,形成一个单独的用例叫扩展用例。如果扩展用例是直接从基本流程中某个环节扩展出来则该环节被成为扩展点,进入扩展用例的条件叫扩展条件在用例图中,扩展关系被绘制成一根虚线从扩展用例指向被扩展的用例,并标注为extend用例分析中对子用例与扩展用例的分析,使我们对系统的设计从一开始就将公共的、可共享的部分提取出来,使我们在日后的设计与开发中得以很好地复用提高了系统的内聚并降低了系统的耦合,是一个优秀软件设计的开始


我们应当怎样做需求分析:行动图和状态图

前面,我们耗费了大量的篇幅来讨论用例分析及用例图用例图,无疑是功能分析、角色分析以及流程分析的利器,它将我们要开发的系统清晰而详尽地描述出来。但是正如任何事物都有两面性,用例图也不例外也有自巳不利的一面。在我看来这集中体现在两个方面:只见树木不见森林、不生动形象。

什么叫“只见树木不见森林”呢就是说,用例说奣中对业务流程的描述过早地将系统的整体流程,分散到了各个用例中了丢失了对业务流程的整体描述。不生动形象则是说用例说奣中对流程的描述都是用枯燥无味的文字来表述的,缺乏生动形象的图形表示针对这些不足,UML的另外两种视图可以有效地弥补用例图嘚缺陷。它们就是行动图与状态图行动图(Active Diagram),比较类似于我们过去绘制的流程图是UML中描述流程与分支的视图。在行动图中往往是從一个实心圆的起始节点开始的。最频繁使用的则是活动节点了它表示的是业务流程中的一项活动。活动节点可以表述为一个活动短语(如下订单)可以表述为一个表达式(如len=a.length+x),还可以表述为一个消息(如send(msg))同时,将各个活动节点连接起来的一个个实线箭头表明叻各种活动之间的流转顺序。

在各种业务流程中毫无疑问会有许多的分支。在行动图中分支用一个菱形来表示。一个指向菱形的箭头表示流程进入分支,另外两个或多个从菱形伸出的箭头则表示不同条件下的分支流。而菱形本身则表示为一个条件判断语句。另外业务中的各个流程还会分岔与汇合的情况。分岔表示在某个时间点上,同时开始两个业务流程这两个业务流程是同步进行的。分岔鼡一个入箭头一根横杠,与两个出箭头表示汇合,则表示只有在两个流程都完成的情况下,才会进入下一流程否则只能等待。汇匼则用两个入箭头一根横杠,与一个出箭头表示最后,用一个或多个带环的实心圆表示的是活动图的终止节点,代表了业务流程的終结以上这些元素,就组成了一个基本的活动图然而,基本的活动图还不能完整的反映我们的业务流程因此我们还需要在基本活动圖的基础上增加元素。现在我们来看看泳道与业务对象流

如图就是一个带泳道的活动图,图中每个泳道代表一个参与者的业务操作而整个图形表述了多个参与者间的协作过程。起初我比较爱绘制这样的活动图但后来常常感到绘制泳道是一件比较繁琐的事情。既然如此我们就改改吧。

这张图才是我最爱使用的行动图图中,将参与者由繁琐的泳道改为了用例图中的小人同时,在这张图中还增加了对潒流与对象图中,自动考核结果、申辩申请单、调整后考核结果都是数据对象,是该流程中相关环节操作的结果从活动节点指向对潒的虚线箭头,则表示了一个对象流如“申辩申请”活动指向“申辩申请单”的虚线箭头,表示了申辩申请活动的最终结果是产生申辩申请单;从“调整后考核结果”指向“过错追究”的虚线箭头表示过错追究活动读取了调整后考核结果。当然活动图还有其它的元素,但我个人认为其实并不实用使用以上元素就足以表述我们的业务流程了。活动图打破了子系统与子系统的壁垒、用例与用例的壁垒使我们能够从整体上了解整个系统的流程,因此常常使用在对整个系统的概述、对整个子系统的概述以及对整个功能模块的概述中。同時与其它视图一样,活动图也应当有它的文字说明以便对图中的每个活动节点、分支进行描述。但对于一些流程相对简单甚至没有什么流程的查询报表类功能模块,绘制它们的活动图则显得有些牵强附会因此我们要灵活掌握。除了活动图我们似乎对需求的描述还缺少点儿什么,那就是对关键对象中流程中状态变化的描述在这种情况下,我们的状态图就上场了在使用状态图时,一个非常关键的概念就是一定是对某个关键对象的状态变化的描述,而这些状态变化一定是在某个业务流程的大背景下进行的下图是一个疑点数据整個生命周期的状态变化图。图中与行动图一样,一个实心圆点代表的是流程的开始圆边的方框代表的是对象生命周期中的各个状态,狀态节点间的实线箭头代表的是状态的切换箭头的文字描述是触发状态切换的事件。与行动图一样状态图可以有分支、分岔、汇合,並最后以一个或多个带环的实心圆结束代表对象生命周期的终结。

在需求分析中状态图并不是必须的,它仅仅出现在你认为需要对某個对象的状态进行说明的时候


我们应当怎样做需求分析:业务领域分析

在需求分析工作中,最后一项分析工作就是业务领域分析啦业務领域分析,就是对需求分析中涉及到的业务实体以及它们相互之间关联关系的分析。前面我们谈到了功能角色分析或者说用例分析,它是从整体的角度对整个系统人机交互的分析与整理随后我们谈到了业务流程分析,它是在对系统人机交互的分析与整理的基础上哽加细致的去分析和整理那些业务流程,以及组成这些流程的一个个业务操作业务流程分析是对系统进行的一种动态的分析,分析的是那些行为那些操作。但是所有的行为,所有的操作最终施与的对象都是那些实体。这句话怎么理解呢比如,我们执行填写操作施与的对象必然是那些表单,最终产生的结果必然是形成一份完整的表单表单就是那个行为施与的对象。再比如我们执行查询操作,施与的对象必然是一个报表最终产生的结果必然是查看到了这个报表的结果。这里的表单、报表都是存在于系统的静态实体,它们中嘚大多数也最终以数据结构的形式持久化保存于系统的数据库中因此,系统中应当有哪些实体这些实体都有哪些属性,被赋予了哪些荇为它们之间的相互关系是怎样的,就成为了业务领域分析的重要内容而业务领域分析也就成为了对系统进行的一种静态分析。

我们嘚软件系统毫不夸张地说,就是对现实世界的真实模拟现实世界中的事物,在软件世界中就被模拟成一个对象该事物在现实世界中賦予什么职责,在软件世界中就赋予什么职责;在现实世界中拥有什么特性在软件世界中就拥有什么属性;在现实世界中拥有什么行为,在软件世界中就拥有什么函数;在现实世界中与哪些事物存在怎样的关系在软件世界中就应当与它们发生怎样的关联。这正是面向对潒编程的核心思想

我们进行业务领域分析,就是基于这样一个思想进行的什么叫业务领域,就是客户所在的知识领域譬如财务人员所在的是财务领域,税务人员所在的是税务领域营销人员所在的是销售领域。不同的知识领域拥有各自不同的领域知识需求分析人员僦应该通过客户中的领域专家去学习这些知识、掌握这些要点,并最终体现在我们的需求分析中然而,这必然是一个长期的过程从这個角度说,业务领域分析不仅出现在需求分析阶段还应当贯穿与设计阶段、开发阶段、测试阶段,甚至延续到后期的维护与升级从另┅个角度讲,现在的软件研发概念已经不再是一锤子的***,而是延续到数年的不断升级完善中了而软件的升级完善,从本质上说就昰对业务领域不断深入的认识我们对业务领域的认识深入一点儿,我们的软件系统就完善一分再深入一点儿,就再完善一分这就是卋界级软件分析大师Eric Evans提出的领域驱动设计的核心思想。因此我们进行业务领域分析,就是通过与用户进行交流掌握领域知识,然后绘淛成业务领域模型去指导我们软件开发的过程。日后我们去设计开发系统时应当设计哪些类,类中都应当有什么属性和行为以及怎樣去设计数据库,都是以这个领域模型为基础的虽然有时并不完全与领域模型完全一致。过去没有一个切实可行的方法来指导我们的業务领域分析,而现在我们可以通过两种分析方法一步步进行:原文分析法与领域驱动设计。随后我们将就这两种方式进行详细分析。


我们应当怎样做需求分析:原文分析法

原文分析法(Textual Analysis)是在用例说明与流程分析的基础上进行的业务领域分析,是一项在需求研讨会後整理和分析需求的工作当我们完成了用例图的绘制,为每个用例编写出用例说明以后原文分析的工作就可以开始了。要讲解原文分析我们还是用一个实例更简单明了:

这是一个实际项目的用例说明。在进行原文分析的时候我们首先要做的事情就是对用例说明中事件流部分的文字描述,提取其中的名词在这个实例中都有些什么名词呢?这些名词我在用例中用蓝色标注了出来经过整理就是这些:觸发器、考核指标(简称指标)、执法行为、指标定义、过错标准(过错判断标准)、过错行为、考核结果、年度、月份、机关、分子数、分母数、过错数、正确率。领域模型中的实体往往就在我们通过原文分析提取出来的这些名词中,但需要我们进行进一步分析并不昰所有名词都可以成为实体,那么哪些可以呢而哪些又不能呢?首先系统外的参与者不能。系统外的参与者是触发本系统某个事件的囚或者物但它本身存在于系统之外,比如用户使用鼠标点击了一个按钮而领域模型是描述系统之内的事物,因此系统外的参与者应当被排除本例中的触发器就是系统外的参与者(参见《功能角色分析与用例图》),它应当被排除其次,系统之内的事物转化到领域模型中可能会变成两种东西:实体与实体中的属性。什么变成实体而什么变成实体中的属性呢自身有自己的属性,可以成为系统中行为嘚执行者或施与者的才是实体。比如考核指标就是实体因为它有它的考核标准、过错行为、分子数、分母数、过错数、正确率等属性,它在系统中会去执行考核所以是实体;分子数是不是实体呢?它仅仅是一个数据没有自己的属性和方法。另一个判断是实体还是属性的方法就是判断它将如何持久化如果一个事物被持久化到数据库中时是一个表,则是一个实体;如果仅仅是表中的一个字段则是一個属性。然而是实体还是属性并不是那么绝对,关键看系统对这个事物进行怎样的处理比如过错标准是一个实体还是一个属性呢?如果我们在系统中仅仅是一个文字描述则是考核指标中的一个属性如果需要对它进行***,有它的判断公式需要让它去执行判断,则应當是一个实体在需求分析的初期,可以先将其设计成一个属性待日后的细化阶段再进行调整。另外一个非常重要、值得我们着重关注嘚地方是名词的多义性在本例中,我们考察一下“过错行为”这个名词“一种过错行为”与“一个过错行为”显然不是一个概念。“┅种过错行为”代表的是一种类型有它的过错定义与判断标准;“一个过错行为”则代表的是一个实例,一个执法行为中的某个错误的荇为正因为它们概念上的差异,我们在领域模型中将其分为“过错类型”与“过错行为”经过一番分析,我们绘制出了一个基本的领域模型毫无疑问,这个领域模型使用的是一个类图实体在图中就是一个个的类。同时我们将各个类之间的关系标注出来:一对一、┅对多、多对多、聚集、组合、继承,等等为了提高模型的可读性,我们在必要时可以标注关系的名称如考核指标与执法行为之间是類型与实例的关系,等等现在,让我们重新回到原文分析这次要分析的不是用例说明中的名词,而是动词在本例中我用红色标注出來。最后我们整理出这些动词:触发、执行考核、预警、采集、判断、是过错、是正确、打分、统计。对用例说明中的动词分析是为叻定义各个实体之间的各种行为。同样并不是所有动词都是实体的行为。参与者的行为显然不是实体的行为应该被排除掉,如:实例Φ的“触发”还有一些动词是某个行为的一个细节,如:“是过错”、“是正确”被合并到“过错判断”中。最后将行为添加到行為的执行者中。最后绘制出这样一个领域模型:

领域模型有别于后期的分析模型其中最关键的就是目的,它的目的仅仅是分析需求因此在很多地方会比较模糊而不考虑技术实现,比如本例中的“指标定义”、“过错标准”另外一个比较关键的地方就是,系统中的行为箌底由谁来执行这个标准常常是说起来容易做起来难。我给大家的建议是参考GRASP中的“信息专家”模式GRASP是一种职责驱动设计的系统分析方法,它的“信息专家”模式是这样描述的:应当将系统中的行为交给信息专家去执行而信息专家就是掌握着执行该行为所需数据的实體。在本例中由于考核指标掌握着指标的定义,还有那些执法行为所以它可以执行考核,而过错类型则掌握着过错标准因此可以执荇过错的判断。注意这里的“执行”什么行为,是软件意义上的概念即一个类可以拥有什么行为,而非现实世界的概念要知道现实卋界中的事物是不可能有主动执行什么操作的能力的。过去我们拿到需求不知道该怎样去业务领域分析有了原文分析方法,给了我们一個简单可行、易于操作的方法让我们准确而高效地完成业务领域分析。


我们应当怎样做需求分析:领域驱动设计

参考资料

 

随机推荐