软件工程:如何在项目中把软件做好
软件的全生命周期
在项目中开发软件,首先要了解一个软件的全生命周期。
一般来说,一个软件的全生命周期大体可以分为3个大的阶段:①前期准备阶段;②开发实施阶段;③后期运维阶段。
软件开发过程中的问题与理论支撑:软件工程与项目管理
从整体了解了软件的全生命周期后,我们还需要知道在软件开发的阶段中究竟会遇到哪些问题,以及依据什么样的理论来解决这些问题。
具体来说,在软件开发的过程中存在两类比较常见的问题:一类是有关分析和设计的问题(与软件工程相关),另一类是有关软件开发的过程管理问题(与项目管理相关)。
因此,软件工程和项目管理是支持软件开发过程的两个支柱。
软件工程与项目管理在软件开发过程中的环节
在项目的软件开发过程中,项目管理的环节包括:项目启动、项目规划、项目执行、项目监控、项目收尾;软件工程的环节包括:需求工程、设计工程、编码工程和测试工程。
可以看到,完成一个项目开发,项目管理工作的起止点要长于软件工程工作。二者关系的说明如下:
Ⅰ.项目启动:将项目启动设定在项目合同签约后开始。项目启动的工作包含项目组成立、项目经理的确定、人力资源、技能培训、成本预算等。
Ⅱ.项目规划:项目规划的工作包含《工作任务一览表》编制、执行计划制订、管理规则确定等。
Ⅲ.项目执行:主要工作是对开发过程进行组织、管理,是对应软件工程的重点内容。
Ⅳ.项目监控:主要工作是对进度、成本、质量等进行监督,监督的范围软件工程全过程。
Ⅴ.项目收尾:主要工作是软件交付、文档归档、总结分享等。
软件工程与项目管理的定义、作用与相互影响
● 软件工程:提供软件开发所需要的知识,包括分析、设计、编程和测试等一系列工作的理论、方法、技术、标准、规范等。
● 项目管理:给出达成开发目标和确保软件工程得以正确实施的保证措施,包括组织、流程、管理、规则等内容。
其中,软件工程确保软件本体的正确、合理;项目管理确保软件开发的过程、结果的正确、合理。
软件工程主要包含需求分析、软件设计、系统编码、测试验证等;
项目管理则有三个目标:质量目标、进度目标、成本目标。
- 质量目标:软件按照设计要求完成编码和测试,保证运行结果正确,运行效率、系统安全、满足客户需求等;
- 进度目标:确保在计划的每个时间段所需的人力资源可完成、交付指定的内容等;
- 成本目标:软件按照设计要求完成编码和测试,保证运行结果正确,运行效率、系统安全满足客户需求等;
这三个目标总结起来就是:用最合理的成本 在最合适的时间 满足用户的需求。
需要清楚的是,质量目标的达成取决于软件工程中需求分析、软件设计、系统编码、测试验证等的设计水平;而进度和成本目标的达成取决于软件工程能否进行标准化并做到量化管理;
软件工程与项目管理关系
更详细地来说,项目管理标准化的前提是软件工程化;而项目管理标准化则是软件工程完美执行的保证。
要想让软件工程和项目管理两个支柱发挥预期的作用和价值,就要实现这两者的对接和协同,做法是首先要实现这两者的标准化。
而标准化的前提就是工程化。
所谓软件标准化就是以软件工程的知识为基础,结合项目管理,建立起在软件开发过程中的模式、标准、规范以及相应的交付物,从而提升软件开发工作的效率和效益。
所谓软件工程化就是参考其他成熟的传统行业(建筑业、制造业等)的标准化做法。工程化有两个显著的特点:一是要规定分析设计的结果是以图形为主、文字为辅的表达形式;二是工程化方式强调“传递与继承”,即上下游工序间传递的信息准确、无歧义,工程化的生产是严格“按图制作”的。
构建符合工程化要求的软件标准需要5个步骤:
1、对象拆分:拆分,化大为小,化繁为简
2、要素量化
3、标准化:分类、归集,给出标准定义、建模
4、工程化(条件)
- ①模块化:模块粒度有大(一个系统)有小(一个界面)
- ②结构化:①模块之间关系结构化②模块之间存在传递与继承的先后顺序
- ③图形化:图形为主,文字为辅对分析和设计成果进行表达
5、工程化(标准)
- ①可计量
- ②可执行
- ③可传递
- ④可继承
- ⑤可检验
- ⑥可追溯
因此,标准化就如同一把诸多问题的通用钥匙。但符合工程化要求的文档一定是标准化的,但标准化的文档却不一定满足工程化要求。
所以,要做到符合工程化的标准化。
符合工程化的标准化
可以从需求(工程)和设计(工程)2个部分 来理解、拆分软件(工程)。采用工程化的流程步骤(第一步做什么、第二步做什么、第三步做什么等等,如1.1需求调研、1.2需求分析、2.1概要设计、2.2详细设计、2.3应用设计),并且每一步流程都形成工程化的文档(如1.1需求调研行政需求汇总、1.2需求分析形成需求规格书、2.1概要设计形成概要规格书、2.2详细设计形成详细规格书、2.3应用设计形成应用规格书等)。
而对于每一个流程步骤的量化来说,则可以给出更详细的量化指标:如需求调研要求3种需求访谈:事前问卷、原型问卷、管控构成等等;需求分析要求参考4个需求模版:需求原型、控件定义、规则说明、逻辑图形;应用设计要遵从2种客户价值:业务价值、应用价值等等。通过具体的量化指标指导每一步软件开发过程以及形成工程化的文档。
而以上过程就是对象拆分、要素量化、标准化、工程化(方法)、工程化(标准)的工程化流程的体现。
软件开发过程的标准化
有了以上的理论与工程化方法,就可以将工程化方法应用到具体的开发过程中,从而实现开发过程的标准化。而实现软件开发过程中各个环节工作的标准化也就实现了软件的标准化。
可以看到,开发过程包括①项目过程②软件过程③支持过程④管理过程⑤组织过程的项目管理过程以及需求过程、设计过程的软件过程。
工程化软件在项目中的落地
将以上工程化方法落地到项目管理、开发过程的各个环节中去,形成符合工程化的标准化文档:售前咨询解决方案>需求调研资料汇总>需求规格说明书>概要设计说明书>详细设计说明书>应用设计说明书>技术设计规格书>测试 于验收报告>其他资料>项目总结报告>资料库,进而通过这些工程化的标准化文档来指导新的项目开发。
对于项目中的研发人员、管理人员来说:一次完整的开发经历,胜过数次不完整的开发经历。
因此一次完整的开发经历所带来的经验、收获以及相关符合工程化的标准化文档,对于下一次新项目的开发来说更加有用、更加宝贵、更加高效。
软件项目的总结
最短的业务/应用设计决定了这个水桶的最大装水量。
● 业务设计:确保了系统的“业务正确性”,业务设计的对象是纯业务内容。
● 技术设计:确保了系统的“技术可用性”,技术设计的对象是纯技术内容。
● 应用设计:确保了系统的“易用应变性”,应用设计的对象是业务+技术的内容。
其中,应用设计包括业务、技术、UI、美工以及体验等诸方面知识和技术的集合体,分为两个层面:
(1)系统的表面:决定系统操作的易用性(友好、人性化等)。
(2)系统的内部:决定系统响应需求变化的能力。
因此在软件项目中需要充分认识到业务设计、技术设计、应用设计的作用及其重要性。
在交给用户之前对系统要做到3个层面的验证:
- 业务验证:首先要确保业务全部正确,符合各项标准和规则,可以提升效益。
- 应用验证:其次要确保系统是易用、好用的,符合人性化设计,可以提升效率。
- 测试验证:最后要确保系统完全按照设计要求开发,满足业务和应用的验证内容。
了解软件的逻辑与架构
从软件技术角度来说,软件本质就是由架构、功能和数据三个方面构成的。
架构决定了系统的业务范围和核心框架,有了承载功能和管理的载体。
功能决定了系统开发的主要工作内容和工作量。
数据决定了数据使用的范围及其全生命周期。
一个系统中的架构、功能和数据都是看得见的对象,可以分别用架构图、原型界面、数据实体等来表达,但是架构、功能和数据背后的逻辑关系都是不能直接看见的,要充分地理解和掌握这3种逻辑:业务逻辑、数据逻辑和管理逻辑。
一个系统/软件背后的逻辑就是业务逻辑、数据逻辑、管理逻辑的关联、组合。
因此需要认识到,业务逻辑的形态影响管理逻辑的形态;业务逻辑的结构影响数据逻辑的结构。系统的架构设计必须要以实际发生的数据(资源、资金等)过程为载体,由人为设置的数据(预算值、计划值、比例值等)过程为辅助,如此架构才是合理、稳定的。
认识到数据的重要性
软件包括架构层、功能层、数据层。可以说,没有数据,就没有业务。没有业务就没有软件。因此需要认识到数据的重要性。
收集,得到的是,数据;
数据经过加工,得到的是,信息;
信息经过提炼,得到的是,知识;
知识经过升华,得到的是,智慧。