【构建之法】第1章-概论

本章重点:

  • 计算机科学的领域
  • 软件工程与计算机科学的关系
  • 软件的特性
  • 软件工程的定义与组成部分

1 软件 = 程序 + 软件工程

程序 = 数据结构 + 算法

一个复杂的软件不但要有合理的软件架构(Software Architecture)软件设计与实现(Software Design,Implementation and Debug),还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数,等等。这些都是软件构建的过程。

1.1 软件的生命周期(Software Life Cycle,SLC)

  • 源代码管理(Source Code Control):也叫***配置管理(Software Configuration Management)***,指对于不同版本源代码的管理和控制;
  • 质量保障(Quality Assurance,QA):用一系列工具、流程和文档来保证程序的正确性,这些工具(也是软件)、流程应该达到很高的质量,才能保证开发出来的软件的质量;
  • 软件测试(Test):指具体的验证过程;
  • 需求分析(Requirement Analysis):对于来自客户等的需求进行分析,把合适的需求梳理出来,然后逐步展开后续工作;
  • 程序理解(Program Comprehension):指软件团队人员读懂已有程序、了解程序设计的过程;
  • 软件维护(Software Maintenance):也叫***服务运行(Service Operation)***,指软件运行过程中出现问题后,软件团队成员对其进行修复(如打补丁)的过程;

以上就是软件完整的生命周期,再这一周期中,需要有人负责软件项目的管理(Project Management)

1.2 一个成功软件的要点

  • 用户体验(User Experience):软件的好用与否;
  • 国际化和本地化(Globalization & Localization):对于来自不同语言、不同地区的用户对界面和功能不同需求的处理;
  • 商业模式:需要由***职业道德规范***来约束IT人的行为;

结论

  • 软件 = 程序 + 软件工程
  • 软件企业 = 软件 + 商业模式

1.3 软件开发的不同阶段

  • 玩具阶段:写程序联系数据结构/算法,用心的语言尝试一下“Hello World”;
  • 业余爱好阶段:用JavaScript、ASP.NET、Ruby写写网站;
  • 探索阶段:钻研新技术,应用新技术在软件行业创新;
  • 成熟的产业阶段:银行软件系统,互联网搜索行业,电子商务系统、Windows操作系统。

2 软件工程是什么

  • 软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程;
  • 软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护;
  • 软件工程和下列的学科相关:计算机科学、计算机工程、管理学、数学、项目管理学、质量管理、软件人体工学、系统工程、工业设计和用户体验设计。

2.1 软件的特殊性

软件的分类

  • 系统软件:操作系统、设备驱动程序、工具软件等;
  • 应用软件:用户使用它们来完成工作,从管理核电厂到写文章,或者是通信、游戏、浏览网页、播放视频等;
  • 恶意软件:软件病毒等。

软件开发过程的难题

  • 复杂性(Complexity):软件可以说是人类创造的最复杂的系统类型,文件繁多、模块之间关系复杂;
  • 不可见性(Invisibility):软件工程师能直接看见源代码,但源代码不是软件本身,工程师是无法看到自己的源代码是如何具体地在机器上被执行的;
  • 易变性(Changeability):软件看上去很容易修改,修改软件比修改硬件容易多了。而正确地修改软件是一件很困难的事情;
  • 服从性(Conformity):软件不能独立存在,它总是要运行在硬件上面,它要服从系统中其它组成部分的要求、用户的要求和行业系统的要求(例如银行利率的变化);
  • 非连续性(Discontinuity):连续性系统中增加输入,就能看到相应输出的增加,而软件中则往往很难看到这种情况。

2.2 软件工程与计算机科学的关系

1)计算机科学与软件工程的不同侧重点:

计算机科学软件工程
发现和研究长期的、客观的真理短期的实际结果(具体的软件会过时)
理想化的对各种因素的折衷
确定性,完美,通用性对不确定性和风险的管理,足够好,具体的应用
各个学科独立深入研究,做出成果关注和应用各个相关学科的知识,解决问题
理论的统一百花齐放的实践方法
强调原创性最好的、成熟的实践方法
形式化,追求简明的公式在实践中建立起来的灵感和直觉
正确性可靠性

2)“工程”与“科学”的其它区别体现:

  • 哲学家的宗旨:我思,故我在
  • 科学家的宗旨:我发现,故我在
  • 工程师的宗旨:我构建,故我在

3)不同项目的特点:

  • Build To Learn:目的是做进一步的试验,试图发现客观规律或探求某方法的优劣。这些项目经常是科研论文的基础工作;
  • Build To Show:为了突出地展现某个技术的作用,开发一些以演示为目的的软件,这些项目很吸引眼球,经常获得新闻报道,但是功能未必全面或实用;
  • Build To Serve:为了服务一定范围的目标用户而构建的工具等,如SDK;
  • Build To Win:以在市场上赢得用户为目标而构建的软件。

2.3 软件工程的知识领域

根据IEEE在2014年发布的SWEBOK V3.0(Software Engineering Body of Knowledge),提到了软件工程中以下15个知识领域(Knowledge Area,KA):

知识领域理论基础
生命周期软件需求、软件设计、软件构建、软件测试、软件维护
专门领域软件配置管理、软件工程管理、软件工程过程、软件工程模型和方法、软件质量
理论基础计算基础、数学基础、工程基础

2.4 软件工程的目标 – 创造“足够好”的软件

  • 用户满意度:用户体验好;
  • 可靠性:软件不会出现崩溃、导致死机等问题;
  • 软件流程的质量:开发流程规范,团队成员互相协作高效进行;
  • 可维护性:代码可读性高,有足够的、详细的文档等。

本书(《构建之法-现代软件工程》)的目标是,让读者通过理论学习和具体项目的练习,做到下面三点:

  • 研发出符合用户需求的软件;
  • 通过一定的软件流程,在预计的时间内发布“足够好”的软件;
  • 能证明所开发的软件是可以维护和继续发展的。

3 参考

[1]邹欣. 构建之法:现代软件工程(第三版)[M]. 人民邮电出版社.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值