大话软件工程:需求分析与软件设计
上QQ阅读APP看书,第一时间看更新

0.2 本书的使用

0.2.1 适用的课题

本书中提出的理论、方法、工具和标准,以及相应的软件管理流程、规则等,均以企业管理信息系统的构建过程为主要目标对象,书中重点在分析和设计的方法。企业管理信息类系统的范围覆盖了构成企业的主要要素(人、物资、能源、资金、信息等),常见的名称有:MIS、ERP、PM、CRM、HR、OA等。

选用企业管理信息系统作为研究分析和设计方法的对象,主要是考虑这个对象相对于其他类型的对象(图书管理系统、售票管理系统等)来说更加复杂、特别是关于项目管理(PM)部分的内容更是所有管理类系统中比较复杂的,如果通过阅读本书的案例读者可以基本上理解所讲述的理论、方法等内容,那么在进行其他类型系统的分析和设计时就会感到比较容易了。

本书虽然采用了企业管理信息系统的案例,但书中提供的理论和方法是具有普遍意义的。

本书以构建虚拟的“蓝岛工程建设集团”企业管理信息系统为案例的主线。

0.2.2 适用的对象

本书推荐的读者对象可以是下述各领域的从业者(因企业不同定义不同,仅作为参考)。

1.软件开发

(1)业务人员:需求调研/需求分析师、业务架构师、实施工程师。

掌握从需求调研、分析、业务设计(架构、功能、数据)、应用设计(界面、复用等)的方法、标准,可以与客户、技术两个方面进行全方位的沟通、表达。

(2)技术人员:技术架构师、开发工程师(程序员)、测试工程师。

掌握业务人员是如何将客户需求转换为支持开发的设计资料,快速、准确地理解业务设计资料。同时帮助提升由编码程序员向开发工程师、架构设计师转换的能力。

(3)管理人员:项目经理、产品经理、配置管理员等。

本书的内容可以支持软件项目进行定性、定量的过程管理,包括:开发流程的设计、分析与设计方法、工作量的计算、投入资源的判断、确定交付物以及交付标准等。

2.教育培训

(1)大学和培训机构中,从事相关教育和培训的老师。

一般软件开发企业和企业信息中心大都缺乏有经验、知识和能力的业务分析与设计人才(特别是高端人才),由于缺乏体系化的方法,这些人才的养成通常是靠自己的经验积累,难以速成,采用了本书提供的知识体系就可以大幅度地缩短教育培训周期。

(2)大学信息管理专业的学生:学习分析与设计方法,在进入社会前就掌握一门实战技能。

(3)大学软件工程专业的学生:理解软件工程的实用性,特别是设计在软件工程中的作用。

(4)大学计算机专业的学生:理解、掌握设计的理念、基本方法,拓展思路,开阔眼界。

3.专业咨询

对于从事企业管理类的专业咨询师来说,利用本书提供的方法可以将企业管理咨询的成果用逻辑图形来表达,减少由于大量使用文字和表格表达带来的不确定性,使得咨询师向客户提出的主张更加具有说服力。同时也使得专业咨询的成果可以成为构建企业管理信息系统的依据,提升专业咨询成果在信息化建设过程中的价值。

注:关于专业咨询

专业咨询包括从事各类企业管理咨询、各类业务领域咨询(如财务、物流等)。

0.2.3 使用的效果

笔者通过常年的培训和验证确定了本书的实用效果,本书的知识为软件企业和读者带来的收获可以用三个词来归纳:设计、图形、工程。这三个词所代表的知识和能力就是解开在背景中所谈到软件开发者的“3低”问题(产品价值低、产品质量低和产品复用率低)的钥匙,如果这三个问题获得解决,那么用户存在的问题也就会随之得到解决。

1.树立和强化“设计”意识,明确设计带来客户价值

本书不但可以让读者掌握设计的理论和方法,而且可以确认是设计决定了产品的价值,同时,理解提升产品的复用率也必须要依赖于设计(特别是“应用设计”)。

软件行业的从业人员普遍对“设计”的意识不强,软件实现过程的重心都在编码上,甚至没有意识到产品的价值是设计出来的(他们认为是开发出来的)。不但刚毕业入职的大学毕业生没有设计意识,就是从事了多年软件行业的工程师中也不乏不知设计为何物者。

分享

软件开发,如同拍电影

培训会上学员提出了软件行业的常见问题:软件不做出来不知道什么样、不知道怎么使用、更不知道效果如何。当软件一旦开发出来,大家看到了软件的样子后,马上就进入了软件的修改阶段,有时修改所花的时间甚至比开发用的时间还要长。针对这个问题大家进行了讨论,但是讨论的结论是:这是常态,没有办法,因为不做出来就无法确认、验证。

老师也向学员们提出反问:为什么比软件构成更复杂的建筑却能在设计完成时就知道了它的样子、用法和效果,且完成后没有大规模的修改呢?同理,再设想一下,电影导演能够说电影不拍出来就不知道效果,拍完后效果不理想再做修改吗?大家的回答是:不行。那么,为什么单单软件开发做不到?问题出在哪里呢?

大家给出的原因五花八门,但有一点是共同的,那就是:缺乏设计。

通过学习,学员们亲身感受到了经过体系化的、标准化的设计之后,不需要等到开发完成就可以知道开发完成后的效果和价值了,而且还能用设计成果验证完成的产品是否符合设计的要求。

缺乏设计造成了在软件生产过程中没有“共同语言和指导原则”,特别是缺乏了“业务设计/应用设计”的内容带来的影响更大,因为这个部分是所有干系人都必须要理解的(技术设计的内容不需要所有干系人都理解),这个设计完成后,不但知道了软件完成后的样子、使用方法、效果和价值,而且它还是软件生产过程中的核心指导原则(因为它是所有相关人都必须知道和遵守的)。

笔者认为,要做到提升设计意识,需要从大学和软件企业两个方面同时着手。

1)对大学和大学生

在软件企业内,软件是由“业务人员”和“技术人员”两方面的共同工作完成的,但是大学和培训机构只培养“从事技术开发的人才”,而缺乏专门培养“从事分析与设计人才”的课程,这是其他行业所没有的现象。

大学应该增加“分析与设计”相关的学科,在大学生毕业前就要给学生树立基本的设计意识,特别是计算机专业的学生,他们不但要学习编程技术,还要加强业务设计/应用设计的学习,因为前者主要解决的是“实现”的方法,后者主要解决的是“创新”的能力。如果在大学阶段就给学生植入了设计意识,学生进入企业后从“程序员”成长为“工程师”的时间和路途就会大大地缩短。

2)对软件企业和软件工程师

对于软件企业来说,解决的产品的3低(低质量、低价值、低复用)问题,除了提升设计水平和能力外别无他途。因此,应该以制造业、建筑业等为参考,明确设计的作用和设计师的定位与价值,要能够肯定地表明:在软件生产过程中,从事业务设计/应用设计的工程师是核心,并且理解:

● 业务设计/应用设计决定产品的最高价值

最高价值指的是系统为客户的业务提升了效率和效益,这是客户投资信息系统的目的。

● 技术设计/开发保证了产品的最低价值

最低价值指的是系统可用(没有bug、性能优秀),但这不是客户投资信息系统的目的。

2.利用“图形”表达设计,是提升质量、效率和工程化的基础

生产“产品”,不论是哪个行业都是用图的方法表达设计结果,“用图说话”是设计的常识。利用图形进行表达和交流,不但可以提升质量和效率,它还是设计工程化的基础。

由于企业管理类软件实现的对象是抽象的(建筑、机械因为内容是具象的,所以比较容易理解),这就需要从逻辑上理解对象和传递意图。软件行业从业人员(特别是业务人员)有一个共同的弱点就是缺乏逻辑概念和表达方法。而在用图形进行设计时,由于“逻辑”的表达是标准的、可见的,因此掌握了图形化的设计方法就能大大地提升相关人员的逻辑表达能力,从而直接地提升了设计的质量和意图传递效率。

分享

用图形做设计,是质量、效率,也是效益

参加培训的学员中,需求/设计团队与开发团队不在同一个地方工作的现象非常多,而且现在利用交易平台进行外包设计/外包开发的应用场景也越来越多,这就带来了沟通的效率和质量问题,原来在同一个地方可以面对面沟通时这个问题还不是那么突出,但是不见面进行沟通就变得很困难,软件开发不像建筑和制造,后者的图纸是标准的,只要有图纸不论何地的承包商都可以按图制造。但是软件行业不行,由于缺乏标准的设计方法(特别是业务设计/应用设计部分),以文字和表格为主的传递效率很低,质量很差,很难做到一看资料就明白十之八九,这里的一个主要问题就是由于表达的没有图形化造成的(虽然也可使用UML,但只能在懂得UML的人之间进行传递)。

在培训的前后,老师都要出题让学员用图做设计,然后让大家互相解读对方设计图的意图,通过这样的训练可以明显地感受到学员们表达和认知能力的提升,由于大家掌握了同一标准的设计方法,所以在分开进行设计和开发的情况下,不但可以提升工作效率,同时也能大大地减少原来由于缺乏逻辑表达方式而带来的高沟通成本(时间、人力、经费等)。

案例中的问题说明:因为用图形表达逻辑的方式是标准的,所以双方在读取逻辑时都非常准确,没有歧义,因此,可以看出图形化的表达方式不但可以大幅度地提升工作效率和效益,最终还可以促进产品质量的有效提升。

3.建立“工程”化的设计体系,让软件工程从一门知识转化为一套可操作的“技术”

设计工程化,是提升软件开发的效率、质量、复用率以及强化过程管理的重要手段。

在软件行业中(特别是针对业务设计/应用设计部分),很难确定它们的工作内容、工作量、所需资源的能力、交付物、交付质量、交付时间等内容,软件的生产过程虽然是一个“工程”,但由于很多的内容不能定性、定量,所以很难用工程化的方式进行管理。

分享

程序员与工程师,程序与工程

在一次以技术开发者为主的培训会上,老师向学员们提了这样的问题:

● 问大家:认为工程师的能力比程序员高一级的请举手,大家都举了手。

● 问大家:“认为自己是程序员的举左手,认为自己是工程师的举右手”,结果大多数人举了左手,只有3个人举了右手。

● 问这3人:如果你们认为自己是工程师的话,请说明什么是工程、什么是工程师。

结果这3个人马上就改举左手了(全场大笑)。

“工程”是一个过程,这个过程你不去实践一遍是没有感性认知的,大学毕业进了企业后直接做了开发工作(程序员),由于不知道分析与设计的过程,因此对自己所开发的功能是“知其然而不知其所以然”,所以程序员长期都是做“小工”的。

因此老师给新学员提了一个建议:大学毕业进入软件公司后做的第一件事不是做程序员,而是去做“学徒”,体验一次从需求调研到设计的全过程,这个过程可以帮助你理解什么是“工程”。这个过程可能要花费2~3个月或更多一些的时间,但这将会大大缩短你从“程序员→工程师”的距离和时间。如果开始没有花费这个时间,很有可能过了5年甚至是10年之后,你会发现自己还站在“程序员”的原处,没有走向“工程师”的位置。

从事建筑设计、制造设计的大学毕业生是一样的,他们进入公司后的第一步是先下到工地/车间去实习,实习一段时间后再进入到设计岗位工作,这使得他们懂得了什么是工程,这个过程的体验成果使他们受益终身。

学习过软件工程的人很多,但是深知软件工程具体有什么作用的人不多,软件工程的知识不能落地,不但造成设计水平低、产品价值低,而且对软件过程进行的项目管理也不容易。

本书参照传统工程的设计分类与标准制定的方法,让软件工程从一门“知识”成为一门可以按部就班学习,并且可以实操的“技术”,同时工程化的做法也可以有效地改变现实中存在的“业务设计/应用设计”部分的资料“只可字会、不能图传”的现象。