一、软件工程学习先导
1、软件工程学习目的
- 软件项目的开发其实是一个工程,整个开发过程是可以有效组织起来的;
- 对于开发过程的各个阶段,已经有很多解决问题的最佳实践,有很多方法来帮助我们高效完成任务;
- 我们还可以借助工具来协助管理,提升开发效率。
你只有掌握了这些逻辑,才能步步为营,不被快速发展的软件开发行业所淘汰。因为你脑袋里装有软件开发的战略,相对于赤手空拳、盲打莽撞的人来说,你更能在未来获得先机。
2、学习步骤
- 基础理论:从宏观的角度建立起软件工程的知识结构,展现软件工程学的全景图,让你掌握从软件工程的基础概念到主流的软件过程方法论。
- 项目过程:按照软件生命周期,把知识点拆成:规划、需求分析、设计、编码、测试、运行维护这六个阶段。
- 案例分析:一起看看大公司是怎么应用软件工程的。
从知到行,打好基本功,掌握软件工程学中涉及的方法和工具,学会举一反三,在软件项目的开发和管理过程中,能运用自如;也希望软件工程的思维,可以让你脱离技术的拘泥,有更高的格局和视角去看待工作和生活中的问题。
3、软件工程知识架构全景图
软件工程 = 工具 + 方法 + 过程。
二、怎样理解软件工程
1、软件是怎么产生的
举个例子,如微信,2010 年 11 月 20 日立项,2011 年 1 月 21 日第一版上线,当时的功能还非常简陋,只能发送文本消息和照片。之后才是一个个版本的迭代,直到你现在看到的微信。
像这种有人参与、有计划、有步骤地造一件产品,我们通常称为“工程”。
所有工程的本质,就是要做出有用的产品。
2、软件危机
当软件的规模越来越大,复杂度不断增加,软件项目开发维护过程中的问题就逐步暴露出来:软件产品质量低劣、软件维护工作量大、成本不断上升、进度不可控、程序人员无限度地增加。
所以在 60 年代,“软件危机”的概念被提出来。
软件工程,它是为研究和克服软件危机而生。
软件工程定义:就是要用工程化方法去规范软件开发,让项目可以按时完成、成本可控、质量有保证。
3、软件工程演化史
参考建筑工程,整个软件开发过程也被分成了几个阶段:需求定义与分析、设计、实现、测试、交付和维护,这也就是我们常说的软件项目生命周期。
各个阶段都会有人的参与,于是产生了软件项目里的各种角色:项目经理、产品经理、架构师、程序员、测试工程师、运维工程师。而对这整个过程的管理,我们通常称之为“项目管理”。
也很自然就衍生出一套最基础的过程模型:瀑布模型。
然而瀑布的特性决定了它只能从上往下流,而且从上到下走完整个周期很长,所以一旦出现了需求的变更,将会非常痛苦,很多事情需要重头再来。
于是基于瀑布模型,又衍生出 V 模型、原型设计、增量模型、螺旋模型等模型,试图改善瀑布模型存在的一些缺陷。这些改进模型的发展趋势上就是缩短项目周期,快速迭代。
4、工程思维
工程方法通常会分成六个阶段:想法、概念、计划、设计、开发和发布。
- 想法:想法阶段通常是想要解决问题。最开始问题通常是模糊的,所以需要清晰地定义好问题,研究其可行性,检查是否有可行的解决方案。
- 概念:概念阶段就是用图纸、草图、模型等方式,提出一些概念性的解决方案。这些方案可能有多个,最终会确定一个解决方案。
- 计划:计划阶段是关于如何实施的计划,通常会包含人员、任务、任务持续时间、任务的依赖关系,以及完成项目所需要的预算。
- 设计:设计阶段就是要针对产品需求,将解决方案进一步细化,设计整体架构和划分功能模块,作为分工合作和开发实施的一个依据和参考。
- 开发:开发阶段就是根据设计方案,将解决方案构建实施。开发阶段通常是一个迭代的过程,这个阶段通常会有构建、测试、调试和重新设计的迭代。
- 发布:将最终结果包括文档发布。
站在整体而非局部去看问题:如果能站在项目整体来看问题,你就会去关注项目的质量、项目的进度、项目的成本、项目的最终用户。