重温软件工程——对软件工程的初步了解

第一部分:软件工程的概述

一 软件=程序+软件工程

   在看到这个公式时,我想大家也很容易理解这个,一个软件的实现都离不开程序的支持,程序是软件的“血肉”,那么仅仅有程序就可以了吗?答案是否定的,因为一个优秀的软件,离不开好的架构和设计方案,更离不开团队的共同协作,,,,,,,那这一系列的实现,一定需要相关的方法,而这些方法和思想,正是我们软件工程所要研究的部分,这就是我们软件”骨架“。

接下来,给大家举一个简单的例子:现在我们是一名建筑设计师,要建设北京的鸟巢体育场,目前所需的建筑材料和工人都已经到位,那么现在我们要做的就是如何通过系统的,有序的,可量化的方式方法把这些元素有机的组合到一块,形成一个建筑,这个鸟巢不仅坚固而且还美丽漂亮.。那么我想软件工程就是把需求分析,设计,写码,维护等一系列过程有机的组合到一块,从而形成一个用户认可的软件(这个用户认可可能没有一个统一的标准),那么这就是软件工程所要做的。

我们先补充点基础知识,重点介绍一下程序这个概念:先看一下官方定义:程序(program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。为实现预期目的而进行操作的一系列语句和指令。程序,在这里指的是源程序,就是一行一行的代码。仔细看过去,它们的确是建立在数据结构上的一些算法。(程序=数据结构+算法)但是光有代码还是不行的,这些一行一行的代码不会自己运行,得有人编译成机器能懂的目标代码,而编译不仅仅是 cc 和 link 命令,对于一个复杂的软件,我们不但要有合理的软件架构(Software Architecture),软件设计和实现 (Software Design & Implementation), 我们还要用各种文件来描述各个程序文件之间的依赖关系,编译参数,链接参数,等等。这些都是软件的构建。

在软件的开发过程的当中,我们的代码不可能是一成不变的,对代码进各方面的改动,有时候需要更改程序的配置,这些过程是对源代码的管理,我们称之为配置管理,我们还有一系列的工具和程序来保证程序的正确性,这些工具和程序本身应该更正确,才能保证别的软件的质量,这就是质量保证, 具体的验证过程叫软件测试.,同时,我们的软件时有一定目的性的,在做软件之前,我们需要对软件进行相关的需求分析,把相关的可行性要求列举出来,为以后的工作做好准备,接下来就是软件的设计编码的实现,测试,到最后的软件交付,后来,我们也可能对软件进行相关的测试后期维护

软件生命周期(SDLC,Systems Development Life Cycle,SDLC):是软件的从产生直到报废或停止使用的生命周期(上面叙述的一系列过程)周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。

软件的核心部分是:构建管理,源代码管理,软件测试,项目管理,到后来,我们也包括了用户的体验,用户界面的设计,也包括相关的商业用途和行为。

所以,上面讲解的所有的内容就是为了推导:

软件=程序+软件工程

从而得到一个扩展的推论是:

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

程序是所有内容进行的基础,软件工程决定了软件的质量和使用周期,商业模式决定一个软件企业的成败

 

二 软件工程是什么?

(一)软件工程的定义;

   (1)概念:  软件工程是把系统的, 有序的, 可量化的方法应用到软件的开发, 运营, 和维护上的过程。

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

(3)加深理解:我们在开发,运营, 维护软件的过程中有很多技术, 做法, 习惯, 和思想体系。 软件工程把这些相关的技术和过程统一到一个体系中, 叫 “软件开发流程”,软件开发流程的目的是为了提高软件开发, 运营, 维护的效率;以及用户满意度, 可靠性,和软件的可维护性。

(二)软件工程的特点:

  (1)复杂性:

      软件可以说是人类创造的最复杂的系统,大型的软件系统有着超过数百万的代码,同时,软件的各个模板之间有着各种各样的依赖关系,随着系统的成长和模块的增多,这些关系的数量的增长速度也会是很快的,随意复杂性也可想而知。

(2)不可见性:

软件代码的运行方式是以机器代码的形式运转的,我们看到的源代码并不等于软件本身,软件的最终运行形式我们是看不到的,一单出现错误(代码量大的情况下),我们无法准确的重现程序到底出现什么问题,这个不可见性也是很可怕的。

(3)易变性:

客户的需求不可能是一成不变的,随着用户需求的变化,软件的可变性也随之增加,有时候修改软件的改变部分是很困难的。

(4)服从性:

   软件开发的目的是为人们服务,它需要一定的硬件需要,同时也要符合用户的需求,这一些的服从性也是非常重要的一部分

(5)非连续性;

   人们很容易理解连续性,增加输入,就能看到相应的输出增加,但是许多软件系统却没有这样的特性,有时候输入很小的变化,会引起输出极大的变化

(三)软件工程的目标:

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

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

(3) 通过数据和其他方式展现所开发的软件时可维护和继续发展的

 

注意:

  评判是否足够好的标准:

   A:用户的满意度:Bug少,符合用户的需求,软件的效率高

   B:可靠性:软件的运行性能良好,安全性高

   C:软件流程的质量:软件团队人员的组件,还有团队的整体能力和职业素质等,与软件的Bug成负相关关系。

   D:可维护性:软件期初的架构有问题,导致软件的维护难度增大,对软件的整个生命周期也会造成相应的影响。

第二部分:个人开发流程

软件开发的过程中,团队的开发是不可避免的一种表现形式,但是团队的发展,离不开个人的努力,然而,个人的开发也需要一定的开发流程来提高我们的而开发效率和产品的质量,接下来我们看一下个人开发的具体开发流程

(一)具体操作流程图:

(二)PSP的特点:

• 不局限于某一种软件技术 (如编程语言),  而是着眼于软件开发的流程,  这样不同应用的工程师可以互相比较。

• 不依赖于考试, 而主要靠工程师自己收集数据, 然后统计提高。

• 在小型,初创的团队中,  高质量的项目需求很难找到,这意味着给程序员的输入质量不高,在这种情况下,  程序员的输出 (程序/软件) 往往质量不高, 然而这并不能全部由程序员负责。

• PSP 依赖于数据

• 需要工程师输入数据, 记录工程师的各项活动, 这本身就需要不小的代价。

• 如果数据不准确或有遗失, 怎么办?  让工程师编造一些?

• 如果一些数据不利于工程师本人 (例如: 花很多时间修改缺陷), 我们怎么能保证工程师能如实地记录这些数据呢?

• PSP的目的是记录工程师如何实现需求的效率,  而不是记录顾客对产品的满意度。工程师可能很高效地开发出一个顾客不喜欢的软件, 那这个工程师还是一个优秀的工程师么?

这些内容在邹欣老师的《构建之法》的基础之上做的重点总结。由于是初学者(大神可绕过),部分观点可能不太正确,欢迎大家批评指正!让我们一起进步!

参考资料:《构建之法》邹欣 人民邮政出版社

时间: 2025-01-01 01:51:27

重温软件工程——对软件工程的初步了解的相关文章

对软件工程以及相关概念的初步认识

这学期要学一门软件工程导论的课,毋庸置疑,这对我们软件工程专业的学生是很重要的.可以更好的构建我们自己的知识框架. 听老师说这门课不仅学习软件开发以及软件工程方法论的一些专业术语,还会学习原型设计.项目管理.效能分析. 这第一节课对我就感触很深,我自己学习编程已经快两年了,从来没有从工程的角度看过自己的代码.... 就先说说程序吧,以前电子管时代的程序都是写在纸上的,打孔子的,打孔表示1不打孔表示0. 想想阿波罗登月背后的传奇人物凯瑟琳·约翰,从最初的数学计算员干起,手头却没有计算机,全都是用纸

软件工程:软件工程过程与方法

尽管程序员领着一份不错的薪水,可是他们也同样付出了巨大的精力与时间.随着软件规模的日益庞大,用户需求的不确定以及快速变更,使得软件开发已经不能停留在小作坊式的个人英雄时代,它已经发展为如今的依赖团队合作的行为,常规的管理方法已经无法满足软件开发的实际需求.而软件工程正是研究如何以系统性的.规范化的 .可定量的过程化方法高效开发与管理.维护软件的交叉性学科. 软件工程过程有哪些 常见的软件开发过程模型有哪些 UML中一般有哪些图 软件工程过程有哪些 软件工程是一门系统科学,是研究与应用如何以系统性

《现代软件工程构建之法》读后感

通过本学期学习的<现代软件工程构建之法>,让我们对于软件工程有了深刻的了解.基于上学期学习的<软件工程>,延伸了我们的知识.配合本学期<软件的测试>让我们懂得了本书的重要性. 本书共分十七章,结合本学期学习的<软件测试>我们对于本书主要从测试入手.本书有关于单元测试的简要介绍,有关于个人开发的流程,两人合作的代码规范和审查,团队的模式和开发流程,还有软件的分析和设计方法,软件各种的测试方法,运用的测试工具等.就我目前只能了解这些,当然还有跟多,还要我们细细体

读《构建之法-现代软件工程》前三张后感

刚开学的第一天,学校发下了书本,有六本书,当时会在上这门课的头一天晚上去看看书本的内容,去大概了解这门课程.其中有一门课程的书吸引了我,感觉这本书和其他的教科书有所不同,它不像其他书一样那么的死板,除了公式,就是理论,没什么奇特的地方.而这本书却很奇特,它不但吸引了我,还让我觉得很有趣,这本书是邹欣老师写的一本书,一本胜似小说的书,平时爱看小说的我,就开始喜欢上了这本书,这本有关软件工程的小说书. 到现在,老师也上了好几次课,我们也对软件工程有了一些初步的了解,而软件工程这本书,我也大概的看完了

软件工程网络15个人阅读2(201521123118张金伟)

问题一 看到软件工程这本书,我的第一感觉就是又要开始编程写代码了,对于一个编程薄弱的人,并且属于网络专业的学生来讲,学习这门课程到底有多大的用处,或者说能从这本书中学到什么东西?通过百度查询了一下网络工程的定义:本专业培养的人才具有扎实的自然科学基础.较好的人文社会科学基础和外语综合能力;能系统地掌握计算机网和通信网技术领域的基本理论.基本知识;掌握各类网络系统的组网.规划.设计.评价的理论.方法与技术;获得计算机软硬件和网络与通信系统的设计.开发及应用方面良好的工程实践训练,特别是应获得较大型

软件工程人才的社会需求现状与发展分析

第二组Tsia 刘栩菁(组长)2018013072    汇总上传  胡志怡 2018012150   资料搜集  杨芳凝2018013194   技术指导 尧舜孜               2018012189   资料搜集   姚远    2018013498  资料搜集   张金鑫2018013497   编写 集体花费时间:五个半小时 各花费:2到4个小时 作为一名软件工程专业的大一新生,我们得先了解这个专业是学什么的,能干些什么. 1.软件工程简介 软件工程是一门研究用工程化的方法构

软件工程《构建之法》—概论

一.第一章计算机专业术语 1.1 软件=程序+软件工程 程序=数据结构+算法 软件=程序+软件工程 可以扩展为 软件企业=软件+商业模式 1968年提出了“软件工程”这个概念,软件工程就是把系统的,有序的,可量化的方法应用到软件开发,运营以及维护上的过程.软件需求分析,软件设计,软件构建,软件测试和软件维护都属于软件工程的领域.软件工程与我们生活工作与学习都息息相关,比如计算机科学,计算机工程,管理学,数学,项目管理学,质量管理学,软件人体工学,系统工学,工业设计和用户体验. 软件开发流程就是人

单元测试软件工程概述

软件工程简介 软件工程(Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科.它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面. 在现代社会中,软件应用于多个方面.典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等.同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,政府部门等.这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活

《20170911-构建之法:现代软件工程-阅读笔记》

1.软件分为系统软件,应用软件和恶意软件.软件=程序 + 软件工程 2.软件工程是系统的,有序的,可量化的方法应用到软件的开发,运营,和维护上的过程. 3.软件的特点:复杂性,不可见性,易变性,服从性,非连续性,可移植,昂贵的,抽象性. 4.软件工程所包括的领域有软件需求分析,软件设计,软件构建,软件测试和软件维护. 5.软件危机的原因:(1) 用户需求不明确. (2) 缺乏正确的理论指导. (3) 软件开发规模越来越大. (4)软件开发复杂度越来越高. 6.软件工程的目标----创造"足够好&