《构建之法》学习(1)——软件与软件工程
《构建之法》学习(1)——软件与软件工程
1.软件=程序+软件工程
从一个小故事引入,点出了软件工程的核心部分:构建管理、源代码管理、软件设计、软件测试、项目管理。以及它的推论:
软件=程序+软件工程
软件企业=软件+商业模式
在我们学习了数据结构和算法之后,就有了程序。在程序之上,软件工程决定了软件的质量;商业模式决定了一个软件企业的成败。软件从业人员和软件企业的道德操守会极大地影响软件用户的利益。
2.软件工程是什么
以航空产业与软件产业类比,软件开发分为玩具阶段、业余爱好阶段、探索阶段、成熟的产业阶段。
2.1软件
软件是可以运行在计算机及电子设备中的指令和数据的有序集合。
软件具有其特殊性:复杂性、不可见性、易变性、服从性、非连续性。
软件的特性:
有许多不同的程序设计语言、软件工具和软件开发平台
存在许多不同的软件开发流程
软件团队中存在许多不同的角色
软件通常既可以存储在磁带上,也可以存储在CD/DVD上
软件可以说是人类创造的最复杂的系统类型,看上去很容易修改,修改软件比修改硬件容易多了,但是正确地修改软件是一件很困难的事情。
2.2软件工程
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
以开篇的故事为例,我们之前学习过c、c++、JAVA,实现某个基础算法可能很简单,但是软件工程不仅仅是编写代码,在“软件”的基础上有软件需求分析、软件构建、软件测试和软件维护。
3.软件工程与计算机科学的关系
软件工程与许多学科都相关,例如:计算机科学、计算机工程、管理学、数学、项目管理学、质量管理、软件人体工学、系统工程、工业设计和用户界面设计。
计算机科学: 软件工程:
发现和研究长期的、客观的真理 短期的实际结果(具体的软件会过时)
理想化的 对各种因素的折衷
确定性,完美,通用性 对不确定性和风险的管理,足够好,具体的应用
各个学科独立深入研究,做出成果 关注和应用各个相关学科的知识,解决文体
理论的统一 百花齐放的实践方法
强调原创性 最好的、成熟的实践方法
形式化,追求简明的公式 在实践中建立起来的灵感和直觉
正确性 可靠性
4.软件工程的目标
研发出符合用户需求的软件
创造“足够好”的软件
展现所开发的软件是可以维护和继续发展的