形成套路,善用工具
今天聊得是软件工程,那为什么以套路来引入话题,因为软件工程就是在软件开发中一种套路,像设计模式一样,是软件开发过程中,许许多多的前辈们经理了一些坑之后总结出来的方案,我们按着他们的脚步走,便能避开更多的弯路,从而能撸出一个健壮的软件产品,其实一切皆套路。
一、软件工程是什么?
分析软件工程必须必须从两个纬度进行解读
1、软件
软件即程序,软件=程序=数据结构+算法。从脑图与公式中可以得出软件的相关要素,软件产品的特点是自动的,确定的,高效的,交互的。然而要设计并开发部署一款大型软件并不是一种容易的事情,所以我们就要引入工程的概念。
2、工程
工程指的是软件工程,那么工程意为Engineering、Project。
Engineering指的是附带技术属性的一种应用,指的是我们在这种应用中会使用 工具 、方法、技巧 等相关技术去实现。
Project指的是项目,既然是Project,那么便拥有管理属性,这也是工程一词的第二个性质。在软件开发过程中如何合理约束软件作用范围,软件开发成本,软件开发时间等等问题,都涉及管理学的问题,而这种管理不是普通的ERP管理,而是对于整个软件项目的大局观的定格。
总结上述两点,我们可以对软件工程下一个属于自己的简单定义:即
使用高效的工具,妥善的方法与巧妙的技巧对软件产品进行研发;使用科学的管理方法对软件开发过程中资源的高效管理,从而生产出有效的、实用的和高质量的软件的过程。
二、为什么需要软件工程
早期:软件规模小(只需一个或几个人便能完成开发),个人主义思想强烈,代码等同于个人的艺术(追求写出优美的代码,而不会考虑到别人是否读得懂,效率是否高,是否健壮)。
结果:出现软件危机(百度之),提出软件工程思想。程序员是软件大厦里面的劳工,项目经理是小小包工头。
三、软件工程化的实现
软件工程化的实现依赖于科学的软件开发步骤,系统的架构,资源的管理等等方面,这里就开发流程工程化进行描述:
1、需求分析
指的是明晰用户需求,业务需求,功能需求。是整个软件开发流程中最基础的一个步骤也是最关键的一个步骤,时常会因为需求不明确而导致软件复工增加开发成本,这一流程是整个开发中的第一个步骤,其参与者可以是需求分析师,有时候可以带上前端工程师,后端工程师参与从而在整个开发流程中了解用户需求,从而改进产品,提高用户体验。当调研结束时一般会开具需求规格说明书。
2、软件设计
2.1、概要设计
顾名思义,概要设计指的是先对整个系统的整体概要进行设计,包括其中一些软件功能的逻辑,一些数据的关联关系,用户角色等,且包含一些特定的运行环境进行考虑并设计,比如运行的服务器,运行的客户端等等情况进行分析。最终开具概要设计说明书
2.2、详细设计
详细设计指的是对概要设计里面提出的若干问题进行详细的设计,比如一些重要程序的算法设计,一些数据结构的设计,数据库的设计,UI原型设计等等。也是对整体概要的具体细化设计。最终开具详细设计说明书。
3、软件开发
软件开发环节其实并没有什么工程类的套路,如果有便是架构思搭建整体架构框架,然后又具体程序员去搬砖的过程,这其中关乎到系统的架构与程序开发代码质量等等问题比较泛,所以就不再累述,要知道的是一般是根据具详细设计说明书进行开发。比如有时候参考接口文档,数据库文档等等文档进行开发即可。
4、软件测试
软件测试这一方面对于本公司来说一般只是简单使用人力智能测试-.-。但是要知道一般测试的分类与方法。
4.1、方法
可分为白盒测试,黑盒测试。
4.2、内容
可分为功能性测试,性能测试(暴力压接口看瓶颈等)。
4.3、阶段性
单元测试(JUnit)、集成测试、BVT、系统测试、UAT等。
5、软件发布与维护
软件发布与维护包括关于版本的管理部署实施的内容,也包括服务器的架设等等,展开描述又会引入许多内容,具体手段可以参考脑图。
6、软件开发周期
6.1、瀑布流
瀑布流开发周期指就是传统的开发流程,即上述的五个步骤顺序的往下走,待一个流程走通后才进入下一个阶段,虽然这种开发方法在软件开发中普遍的应用,但是常常会因为需求定义错误等问题导致后面软件开发经常复工,所以使用瀑布流一定要建立在保证每一个步骤都准确的前提,这样便会加快开发效率,否则只能适得其反。
6.2、原型
原型开发模式指的是在开发前期使用原型构建工具对软件原型进行构建,甲乙双方依据软件原型进行沟通确认,等原型完全定下后才进入具体设计与开发环节。使用这个方法好处是可以让甲方看到最终的软件效果,减少一些需求的歧义性,后面的开发流程也会加快,但是这个过程比较麻烦的一点是绘制一个令甲方满意的原型并不容易,时间也是一个重要的问题。
6.3、增量
增量指的把一个大型软件通过分期的方法解耦成若干个小型软件的集合,再依次对这些小型软件进行开发的过程。与瀑布流相比,增量开发模式的特点在于他的迭代周期多了许多,当每次完成一个部分时可以快速定位并修改存在的问题,然后立刻开始下一个部分的设计开发,其中与用户的交流时间变多,但是每一细节都能很精确的掌控。
7、相关书籍
《构建之法》
《软件工程:实践者的理论方法》