构建之法
第一章 概论
程序=数据结构+算法;
简单的程序可以扩展为满足各种功能的应用软件,再扩展到一个保证服务质量的软件服务;
一个复杂的软件不但要有合理的软件架构、软件设计和实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数,这些都是构建的过程;
我们需要一些工具、流程和文档来保证程序的正确性,这些工具、流程应达到很高的质量,才能保证开发出的软件的质量,这称为软件质量保证,具体的验证过程称为软件测试;
软件团队要从需求分析开始,把合适的需求梳理出来,然后开展后续工作,如设计(软件架构)、实现(写数据结构和算法)、测试,到最后发布软件;
软件在运行过程中,会发生这样那样的问题,我们需要解决这些在软件运行过程中发生的问题,这称为软件维护;
以上的一系列过程组成了软件生命周期;在这一个周期中,负责软件项目的人,就是项目经理;
在相关法律完善之前,软件行业还有一个行规,即应该有**职业道德规范来约束**IT人的行为;
软件=程序+软件工程;
构建管理、源代码管理、软件设计、软件测试、项目管理等是软件工程的核心;
软件企业=软件+商业模式;
软件开发的不同阶段:
- 玩具阶段:尝试各种“Hello World”程序,写程序练习数据结构、算法等;
- 业余爱好阶段:使用JS、JSP等语言写写网站;
- 探索阶段:钻研新技术、应用新技术在软件行业创新;
- 成熟产业阶段:银行软件系统、互联网搜索行业、电子商务系统、操作系统;
软件工程是把系统的、有序的、可量化的方法应用到软件开发、运营和维护上的过程;
软件工程包括:软件需求分析、软件设计、软件构建、软件测试、软件维护等领域;
软件的五大特性:
- 复杂性:软件各个模块之间的各种显性和隐性的关系,随着系统的成长和模块的增多,这些关系往往成几何级数增长,而理解和运用这些复杂性的人并没有太大的变化;
- 不可见性:软件的源代码并不是软件本身;软件以机器码的形式高速运行;
- 易变性:软件的变化包含两种情况:一是让系统更好的工作,二是让系统干更多的工作,但是与此同时,正确地修改软件是一件很困难的事情;
- 服从性:软件的运行受到硬件的影响、受到人的影响甚至还会受到环境的影响;
- 非连续性:连续的输入,不一定会带来连续的增长,也就是说系统的输入和输出关系不是那么明确;
哲学家的宗旨是:我思过我在;科学家的宗旨是:我发现故我在;工程狮的宗旨是:我构建故我在;
软件工程的一个重要任务就是在时间、成本等多种约束条件下决定一个软件在什么时候能“足够好”,可以发布;