首页 > 其他 > 详细

《构建之法》关键字于解析总结

时间:2019-09-07 19:05:39      阅读:71      评论:0      收藏:0      [点我收藏+]

专业术语整理:

 Program = data structure + algorithm
 Software = Program +Software Engineering
 Software Company =Software + Business Model

第一章

*********************************************************************************************************************************************************

1.1软件 = 程序+软件工程

从一个简单的程序,扩展到一个满足各种功能的应用软件,再扩展到一个能保证服务质量的软件服务

这里的程序,也指的是源程序,他是建立再数据结构上的一些算法。程序还要对数据进行操作

一个复杂的软件不但要有合理的软件构架软件设计与实现、还要有各种文件和数据来描述各个程序

文件之间的依赖关系编译参数链接参数,这些都是软件构建的过程

有些程序要配置不同的界面,运行在中文、英文或者其他语言的操作系统上;有些程序还有32位版本、64位版本等。

这是源代码管理的问题--也叫配置管理。还有一系列的工具、流程和文档来保证程序的正确性,才能保证开发出来的

软件的质量。这就是质量保障,具体的验证过程叫做软件测试

软件团队的人员也会流动,新的成员要尽快读懂已有程序,了解程序的设计,这叫程序理解

软件在运行过程中还会出现这样与那样的问题,需要时不时给软件大补丁,或维护众多的服务,这叫软件维护、或者

服务运营。这一系列过程就是软件的生命周期,在这一周期中,有人得负责软件项目的管理

一个好的软件,即使功能和同类软件区别不大,但却会让人感觉到非常好用。这就是软件的用户体验,用户体验和数

据结构、算法没有直接的关系,但是很多费城成功的软件就赢在了这方面。软件还要处理不同的语言、不同地区的用

户对界面和功能的不同需求,这叫做软件的国际化和本土化

有些软件企业的商业模式有些是合情合理的;但有些不怎么合法;在相关法律完善之前,软件行业还有一个行规,即应

该有职业道德规范来约束IT人的行为

上面这些和软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管)相关的内容,是软件工程的核心部分

广义上的软件工程也包括用户体验、用户界面设计等

所以一个推论是:

        软件=程序+软件工程

一个扩展的推论是:

        软件企业=软件+商业模式

软件开发的不同阶段

1、玩具阶段      写程序练习数据结构/算法,用新语言尝试一下“Hello World”

2、业余爱好阶段    用JavaScript、ASPNET、Ruby写写网站

3、探索阶段      钻研新技术,应用新技术在软件行业创新

4、成熟的产业阶段   银行软件系统,互联网搜索行业、电子商务系统、Windows操作系统

*********************************************************************************************************************************************************

1.2软件工程是什么

         软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。

         软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。

         软件工程和下列的学科相关:计算机科学、计算机工程、管理学、数学、项目管理学、质量管理、

         软件人体工学、系统工程、工设计和用户体验设计。

*********************************************************************************************************************************************************

1.2.1软件的特殊性

         系统软件:操作系统、设备驱动程序、工具软件等

         应用软件:用户使用他们来完成工作、从管理核电厂到文章,或者是通信、游戏、浏览网页、播放视频等

         恶意软件:软件病毒等

1)复杂性    软件可以说是人类创造的最复杂的系统类型,大型软件有超过百万行的源代码,有上万个不同的文件。而软件工程师

          的肉眼通常一次只能看到30-80行源代码(相当于显示器的一屏)。软件的各个模块之间有各种显性或隐性的依赖关系,

          随着系统的成长和模块的增多,这些关系的数量往往以几何数的速度增长。

2)不可见性   软件工程师能直接看见源代码,但是源代码不是软件本身。软件以机器码的形式高速运行,还可能在几个CPU核上同时

          运行,还可能在几个CPU核上同时运行

3)易变性    软件看上去很容易修改,修改软件比修改硬件容易多了。人们自然的期待软件额能在下面两种情况下“改变”a)让软件做新的

          事情;b)让软件适应新的硬件。但是与此同时,正确的修改软件是一件困难的事请。

4)服从性    软件不能独立的存在。他总是要运行在硬件上面,他要服从系统中其他组成部分的要求,他还要服从用户的要求,行业系统

          的要求(例如银行利率的变化)

5)非连续性   人们比较容易理解连续的系统;增加输入,就能看到相应输出的增加。但是许多软件系统却没有这样的特性,有时输入上很小

          的变化,会引起输出上极大的变化

这些特性的前四个事佛瑞德.布鲁克斯(Fred Brooks Jr.)在No Silver Bullet 一文中提到的

第五个特性是瓦茨拉夫.拉力齐(Vaclav Rajlich)提到的

这些特性是由软件的本质决定的,软件还有其他特征:

1、有许多不同的程序设计语言、软件工具和软件开发平台

2、存在许多不同的软件开发流程

3、软件团队中存在许多不同的角色

4、软件既可以存储在磁带上,也可以存储在CD/DVD上

*********************************************************************************************************************************************************

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

中国高校中的三种计算机软件的机构

    1、计算机科学与技术系或学院

    2、软件学院

    3、软件工程、软件工程学院

计算机科学这以学术邻域可以分为这些下面这些偏理论的领域:

    计算理论、信息和编码理论、算法和数据结构、形式化方法、程序设计语言

以及下面这些偏实践的领域:

    计算机体系结构、并行计算和分布式系统、实时系统和嵌入式系统、操作系统、计算机网络、科学计算、安全和密码学、

    人工智能这个邻域覆盖了许多相关的邻域,如模式识别、机械学习、数据挖掘、信息提取、等

    计算机图形学、计算机视觉、多媒体

    数据库和大规模数据处理

    万维网

    自然语言处理和语音

    人机交互

    软件工程

计算机科学和软件工程的不同侧重点

    计算机科学                软件工程

    发现和研究长期的、客观的真理       短期的实际结果(具体的软件会过时)

    理想化的                 对各种因素的折衷

    确定性,完美,通用性           对不确定性和风险的管理,足够好,具体的应用

    各个学科独立深入研究,做出成果      关注和应用各个相关的学科的知识,解决问题

    理论的统一                百花齐放的实践方法

    强调原创性                最好的、成熟的实践方法

    形式化,追求简明的公式          在实践中建立起来的灵感和直觉

    正确性                  可塑性

各个项目中的各个特点:

    Build To Learn:开发软件,构建系统的目的式做进一步的试验,试图发现客观规律或探求某方法的优劣。这些项目经常是科研论文的基础工作。

    Build To Show:为了突出地展现某个技术的作用,开发一些以演示为目的的软件,这些项目很吸引眼球,经常获得新闻报道,但是功能未必全面或实用。

    Build To Serve:为了服务一定范围的目标用户而构建的工具等,有时以公开SDK的形式发布,让别的研发人员使用

    Build To Win:以在市场上赢得用户为目标而构建的软件。这也是种种科学发现、技术突破最好的试金石。

*********************************************************************************************************************************************************

1.2.3 软件工程的知识领域

    生命周期    软件需求、软件设计、软件构件、软件测试、软件维护

    专门领域    软件配置管理、软件工程管理、软件工程过程、软件工程模型和方法、软件质量

    理论基础    计算基础、数学基础、工程基础

*********************************************************************************************************************************************************

1.2.4软件工程的目标——创造“足够好”的软件

1)用户满意度    用户在使用时发现了软件的很多问题,影响了用户使用软件的效率。

2)可靠性      某个软件经常会崩溃,某个操作系统会时不时死机,某个网站往往在最需要的时候登不上去。

3)软件流程的质量  软件团队和开发流程的问题太多,导致团队成员无法互相协作,按时交付软件。这也可以说式软件团队的bug

4)可维护性     某个软件太难维护了,按下葫芦起了瓢,修复了一个问题,另一个问题又出来了。也没有足够的文档,维护人员需要更多的资金和时间来维护这个

           软件,甚至建议推倒重写。

*********************************************************************************************************************************************************

通过本书学习,作者希望读者达到的目标:

  1、研发符合用户需求的软件

      通过实际的工作手机、推导、提练需求,并在软件发布后通过实际数据验证需求的确被满足了。需求来自于实际,而不是自己想象出来的“需求”或者人云亦云

      的需求(例如:虚拟的、没人用的、也没有数据的“图书馆管理系统”)

  2、通过一定的软件流程,在预计的时间发布“足够好”的软件

      这个软件并不是期末前两天由两三个同学熬通宵赶出来的急就章,而是经历了一定的软件流程,通过全体团队成员的努力,在一个长期阶段(一个学期)内逐步完成的。

      对于现实生活中的软件团队来说,好产品不是某个英雄长期加班突袭出来的

  3、能证明所开发的软件式可以维护和继续发展的

      例如,对用户需求的分析有详细的文档说明,包括对将来发展的分析和计划。主要功能的设计文档说明和软件的实际行为一致,源代码完整并能构建出符合之来给你要求的版本。

      能用软件管理软件看到源代码的每次修改记录,Bug的修改过程。关键模块有可以正常执行的单元测试、压力测试脚本,等等-

 

《构建之法》关键字于解析总结

原文:https://www.cnblogs.com/kingvist/p/11482139.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!