软件工程课堂笔记简版
- 格式:ppt
- 大小:557.50 KB
- 文档页数:16
软件工程概论1、软件危机1)、软件工程的目的:倡导以工程的原理、原则和方法进行软件开发,以解决当时出现的软件危机。
2)、软件危机:指在计算机软件开发和维护过程中所遇到的一系列问题。
A 、如何开发软件以满足对软件日益增长的需求。
B 、如何维护数量不断增长的已有软件。
3)、软件危机的主要表现形式A 、软件开发成本高,研制进度无法准确估计,用户不满意。
B 、软件产品的可靠性得不到保证。
C 、软件产品难以维护。
D 、软件发展跟不上硬件的发展和用户的要求,硬件成本逐年下降,软件成本越来越昂贵。
2、软件工程概念1)、软件:计算机系统中的程序及其文档。
程序是计算任务的处理对象和处理规则的描述;文档是为了便于理解程序所需的阐明性资料。
细言之,软件有三层含义:A 、个体含义:即指计算机系统中的程序及其文档。
B 、整体含义:即指在特定计算机系统中所有上述个体含义下的软件的总称。
C 、学科含义:即指在研究、开发、维护以及使用前述含义下的软件所涉及的理论、方法、技术所构成的学科。
2)、工程:将理论和所学的知识应用于实践的科学。
3)、软件工程:应用计算机科学、数学及管理科学等原理,开发软件的工程。
它借鉴传统工程的原则、方法,以提高质量,降低成本为目的。
其中,计算机科学、数学用于构造模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。
3、软件工程框架(参见附图软件工程框架示意图)1)、软件工程目标:生产具有正确性、可用性和开销合宜的产品。
A 、正确性:是指软件产品达到预期功能的程度。
B 、可用性:是指软件基本结构、实现以及文档为用户可用的程度。
C 、开销合宜:是指软件开发、运行的整个开销满足用户要求的程度。
2) 、软件开发活动:生产一个最终满足需求且达到工程目标的软件产品所需要的活动。
软件开发的基本活动包括:需求、设计、实现、确认、和支持。
A 、需求:就是定义问题。
B 、设计:在需求的基础上,给出被建系统的软件设计方案。
软件工程重点软件工程是一门涉及软件开发和管理的学科,它关注的是实际的软件开发过程以及如何管理和维护软件项目。
在软件工程中,有几个重要的概念和技术需要我们了解和掌握。
需求分析在软件开发的初期阶段,需求分析是非常重要的工作。
它涉及到与客户进行沟通,了解客户的需求和期望,然后将这些需求转化为明确的软件功能和特性。
需求分析的目的是确保我们开发的软件能够满足用户的期望,并且能够在满足需求的实现尽可能高的质量和性能。
设计模式在软件开发中,设计模式是一种解决常见问题和提高代码可读性和可维护性的方法。
设计模式是一种通用的解决方案,它可以在不同的软件项目中复用,从而提高开发效率。
常见的设计模式包括单例模式、工厂模式、观察者模式等。
掌握常用的设计模式可以帮助我们更好地设计和组织代码。
软件开发方法论软件开发方法论是软件工程中的一个重要概念。
它是指在开发软件时采用的一套规范和方法。
常见的软件开发方法论包括瀑布模型、敏捷开发和 DevOps 等。
每种方法论都有其特点和适用场景,我们需要根据具体的项目需求选择合适的方法论。
软件测试软件测试是一个重要的质量保证环节。
它涉及到对软件进行各种测试,以确保软件能够正常运行并满足用户的需求。
常见的软件测试方法包括单元测试、集成测试和系统测试等。
掌握软件测试的方法和技巧可以提高开发效率和软件质量。
版本控制版本控制是一个用于管理软件开发过程中的代码和文档版本的技术。
它可以追踪每个代码版本的修改记录,并且可以方便地进行代码的合并和冲突解决。
常见的版本控制系统包括 Git 和 SVN 等。
掌握版本控制技术可以方便地进行团队协作和代码管理。
软件项目管理软件项目管理是指在软件开发过程中对项目进行规划、组织和控制的过程。
它包括项目计划、需求管理、进度控制和风险管理等。
软件项目管理的目的是确保项目按时交付,并且能够满足质量和性能要求。
了解软件项目管理的方法和技巧可以提高项目的成功率和效率。
以上是软件工程中的一些重点内容和技术。
软件工程笔记软件工程是一门关于构建和维护软件系统的学科。
在这门学科中,我们需要掌握一系列的原理和方法,以确保软件的质量和可靠性。
本文将对软件工程的基本概念和常用工具进行笔记总结,帮助读者更好地理解并应用软件工程的知识。
一、软件生命周期软件开发的过程可以被看作是一个生命周期,其中包含了多个阶段。
常见的软件生命周期模型有瀑布模型、迭代模型和敏捷模型等。
1. 瀑布模型瀑布模型是最经典的软件开发模型之一,它将软件开发过程划分为需求分析、设计、编码、测试和维护五个阶段。
开发团队需逐个完成这些阶段,且每个阶段的结果是固定的,即前一阶段的输出作为后一阶段的输入。
2. 迭代模型迭代模型是在瀑布模型基础上发展而来的一种软件开发模型。
该模型将整个开发过程划分为多个迭代周期,每个迭代都包含需求分析、设计、编码、测试和维护等阶段。
每个迭代的输出可作为下一次迭代的输入,以此循环进行。
3. 敏捷模型敏捷模型强调快速迭代和反馈,鼓励团队协作和灵活性。
开发团队通过短周期的迭代,不断交付可用的软件版本,并根据用户反馈进行调整和改进。
敏捷开发方法有Scrum、XP等。
二、需求工程需求工程是软件工程的重要环节,它包括需求获取、需求分析、需求规格和需求验证等过程。
1. 需求获取需求获取是指通过各种技术手段和方法,从用户、领域专家和相关文档中获取软件系统的需求信息。
常用的需求获取技术包括访谈、问卷调查、原型设计和场景分析等。
2. 需求分析需求分析是对获取的需求进行理解和分类的过程。
分析人员需要识别出用户的需求,确定需求的优先级和约束条件,并将其转化为可操作的规格说明。
3. 需求规格需求规格是将需求写入规范文档的过程。
通常采用的规格化方法有自然语言、用例和面向对象建模等。
4. 需求验证需求验证是确保规格所描述的需求能够满足用户期望的过程。
常用的验证方法包括检查列表、原型演示和用户评审等。
三、软件设计软件设计是将需求转化为软件结构和组件的过程。
内蒙古民族大学软件工程课堂笔记复习指导徐睿昀2014/4/27软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
程序是按事先设计的功能和性能要求执行的指令序列。
数据是使程序能正常操纵信息的数据结构。
文档是与程序开发,维护和使用有关的图文材料。
需求将已经过分析的需求清晰、全面、系统、准确地描述成为正式的文档,这一步定义需求的工作就是编写需求规格说明。
功能建模的思想就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止。
功能模型用数据流图来描述。
软件危机暴发于上个世纪六十年代末。
主要表现为:软件的发展速度远远滞后于硬件的发展速度,不能满足社会日益增长的软件需求。
软件开发周期长、成本高、质量差、维护困难。
具体来说,软件危机主要有以下一些典型表现:1对软件开发成本和进度的估计常常很不准确。
2用户对“已完成的”软件系统不满意的现象经常发生。
3软件产品的质量往往靠不住。
4软件常常是不可维护的。
5软件通常没有适当的文档资料。
6软件成本在计算机系统总成本中所占的比例逐年上升。
7软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。
除了软件本身的特点,软件危机发生的主要原因有:1缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作的计划很难制定。
2软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。
3软件开发过程不规范。
如,没有真正了解用户的需求就开始编程序。
4随着软件规模的增大,其复杂性往往会呈指数级升高。
需要很多人分工协作,不仅涉及技术问题,更重要的是必须有科学严格的管理。
5缺少有效的软件评测手段,提交用户的软件质量不能完全保证。
如何摆脱软件危机? 1彻底消除“软件就是程序”的错误观念。
2充分认识到软件开发应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
第一章一、软件的特点1、软件:计算机程序及其说明程序的各种文档2、程序:是计算机任务的处理对象和处理规则的描述3、文档:是有关计算机程序功能、设计、编制、使用的文字或图形资料4、软件的特点:1)软件是一种逻辑产品2)软件产品的生产主要是研制3)软件产品不会用坏,不存在磨损、消耗问题4)软件产品的生产主要是脑力劳动5)软件费用不断增加,软件成本相当昂贵二、软件生产有几个阶段,各有何特征1、程序设计时代生产方式:个体手工劳动工具:机器语言、汇编语言开发方法:追求程序运行效率硬件特征:价格贵、存储容量小、运行可靠性差软件特征:只有程序、程序设计概念,不重视程序设计方法2、程序系统时代生产方式:作坊式的小集团合作生产生产工具:高级语言开发方法:个人技巧,开始提出结构法方法硬件特征:速度、容量、工作可靠跃居第一明显提高软件特征:程序员数量猛增加,导致软件危机出现。
3、软件工程时代生产方式:工程化的生产生产工具:数据库、开发工具、开发环境、网络、分布式、面向对象技术来开发软件硬件特征:向超高速、大容量、微型化以及网络化方向发展三、什么是软件危机,其产生的原因是什么?1、软件危机软件发展到第二阶段末期,一些复杂的、大型的软件开发项目提出来了,但是,软件开发技术进步一直不能满足发展的要求。
在软件开发中遇到的问题找不到解决办法,使问题积累起来,形成了尖锐的矛盾,因而导致了软件危机。
2、软件危机的表现1)经费预算经常突破2)开发的软件不能满足用户的要求3)开发的软件可维护性差4)软件的软件可靠性差3、原因1)软件的规模越来越大,结构越来越复杂2)软件开发管理困难而复杂3)软件开发费用不断增加4)软件开发技术落后5)生产方式落后6)开发工具落后四、什么是软件工程,其目标和内容是什么?1、软件工程用科学知识和技术原理来定义、开发、维护软件的一门学科2、目标建造一个大型软件系统,一般有以下几个目标1)付出较低的开发成本2)达到软件要求的功能3)取得较好的软件性能4)开发的软件易于移植5)需要较低的维护费用6)能按时完成开发任务及时交付使用7)开发的软件可靠性高3、内容软件开发技术:主要研究软件开发方法、软件开发过程、软件开发工具和环境软件开发管理:软件管理学、软件经济学、软件必理学4、面临的问题1)软件的费用2)软件的可靠性3)软件的维护4)软件的生产率5)软件的重用五、什么是软件的生存周期,它有哪几个活动1、软件的生存周期一个软件从提出开发要求开始直到该软件报废为止的整个日期。
软件⼯程笔记(完整版)第⼀章软件⼯程概述1.软件危机(software crisis):是指在计算机软件的开发和维护过程中所遇到的⼀系列严重问题。
即“两低⼀⾼”问题:质量低、效率低、成本⾼。
软件危机也成为“软件萧条(depression)”或“软件困扰(afflication)”2.软件危机主要表现1)开发成本和进度估计不准2)⽤户对“已完成的”软件系统不满意3)软件质量往往靠不住4)软件常常是不可维护的5)软件通常没有适当的⽂档资料6)软件成本逐年上升7)软件开发⽣产率滞后于硬件和计算机应⽤普及的趋势3.产⽣软件危机的原因1)与软件本⾝的特点有关a. 软件不同于硬件,是逻辑部件⽽不是物理部件缺乏可见性难于测试管理和控制开发过程困难不会因使⽤时间过长⽽被“⽤坏”难以维护b.软件不同于⼀般程序,规模庞⼤,⽽且程序复杂性随着程序规模的增加⽽呈指数上升2)和软件开发与维护的⽅法不正确有关a.对软件开发和维护有关的错误认识和作法忽视软件需求分析的重要性认为软件开发就是写程序轻视软件维护b. 对软件开发过程与⽅法的认识与应⽤软件开发要经历⼀个漫长的时期(编程占10-20%)程序仅是完成软件配置的⼀个组成部分软件开发⽅法要有利于软件维护4.软件的特点(1)软件是⽆形的(intangible)(2)软件副本的⼤批量⽣产轻⽽易举(3)软件业是劳动密集型的(4)⼀个没有经过充分训练的软件开发⼈员很容易编写出难以理解和修改的软件(5)软件本⾝很容易修改。
但由于它的复杂性,⼜很难正确地修改。
(6)软件不像其他的⼯业产品那样会因使⽤⽽磨损,随着反复修改,它的设计会逐渐退化5.消除软件危机的途径1)对计算机软件的正确认识2)认识到软件开发不是个体劳动的神秘技巧,⽽是⼀种组织良好、管理严密、各类⼈员协同配合、共同完成的⼯程项⽬3)推⼴使⽤成功的软件开发技术和⽅法4)开发和使⽤更好的软件开发⼯具总之, 为了消除软件危机,既要有技术措施(⽅法和⼯具),⼜要有必要的组织管理措施。
第1章软件工程基本观念1.1 软件工程的目标与常用模型1.2 软件开发的基本策略1.2.1 复用软件复用可以表述为:构造新的软件系统可以不必每次从零开始,直接使用已有(稳定)的软构件,即可组装(或合理修改)成新的系统。
1.2.2 分而治之分而治之是指把一个复杂的问题分解成若干个简单的子问题,然后逐个解决。
诸如软件的体系结构设计,模块化设计等都是分而治之的表象。
1.2.3 优化-折衷软件的优化是指优化软件的各个质量因素,比如提高软件运行速度,提高对内存资源的利用率,改善用户界面效果,使三维图形的真实感更强等等。
但是软件优化比较复杂,当所有因素不能都得到优化的时候,就需要“折衷”策略。
软件中的“折衷”策略是指通过协调各个质量因素,实现整体质量的最优。
在保证其他质量因素不变差的前提下,使某些质量因素变得更好。
第2章程序员与程序经理2.1 了解程序员2.2了解程序经理好的程序经理应具备以下品质:1)技术水平是程序员当中的最高级别2)能做最多且最难的工作3)有人格魅力程序员升为经理后一定要保持编程的习惯。
2.4 软件团队建设技术级别和管理级别都划分为四个等级:第3章项目计划与质量管理在可行性分析之后,项目计划与质量管理将贯穿需求分析,系统设计,程序设计,测试,维护等软件工程环节。
软件的高质量是“设计”出来的,不是“管”出来的。
3.1 项目计划只有知己知彼才能做出合理的项目计划。
“知己”是指了解有多少可用资源,包括:人;可复用的软构件;软硬件环境。
“知彼”是指了解项目的规模,难度与时间限制。
3.2 零缺陷质量管理的理念“零缺陷”质量管理有两个核心内容:高目标;可执行的规范。
3.3 软件的质量因素3.4 质量检查质量检查应该在每个实践环节(里程碑)都执行。
检查工作要预防被检查者弄虚作假。
检查工作要有科学的评审方式。
第4章可行性分析与需求分析可行性分析是要决定“做还是不做”。
需求分析是要决定“做什么,不做什么”。
CH0 概论本章重点:❖软件工程的定义❖什么是软件退化❖软件与程序的区别❖软件工程的组成❖客户和用户的定义❖常见的软件神话,他们错在何处?❖软件工程的目标有哪些?❖软件工程的目标中最重要的是哪个?❖软件过程是一种层次化的技术,其层次结构是什么样的?❖软件是想改就能改的吗?❖软件开发时是不是越早开始写代码越好1.为什么需要软件工程:个人、企业和政府在日常活动、管理和战略战术决策时越来越依赖于软件,因此必须确保软件的质量;鉴于软件开发成本巨大,因此必须确保开发出来的软件能够满足目标用户的真实要求;随着软件越来越复杂,其开发和实际也越来越复杂,必须确保开发活动的有序、有效;随着软件用户数量和寿命的增加,对其适应性、可扩展性的要求也在增加。
必须确保软件具备良好的可维护性。
2.软件工程定义最经典的定义:软件工程是对合理工程原则的建立和使用,其目的是为了经济地获得可靠的、可以在实际机器上高效运行的软件。
IEEE给出的定义:将系统化的、规X的、可量化的方法应用于软件的开发、运行和维护。
即将工程化方法应用于软件。
软件工程是为了经济的开发出高质量的软件,并有效的维护它,将工程、管理手段与技术手段相结合应用于软件的方法的集合目的:经济的开发出高质量的软件,并有效的维护它方法:将工程、管理手段与技术手段相结合3.软件工程要实现多个目标,这些目标之间的重要性不一样——价值观问题软件工程的目标如下:又好又快➢保证软件质量➢提升开发效率、降低开发成本➢提高维护效率、降低维护成本4.关文档的完整集合。
软件是逻辑的而非物理的系统元素。
5.软件的特点:➢没有物理实体➢设计开发成本高昂,生产复制则几乎是零成本的➢软件不会磨损、老化,但是也会退化件质量的下降,称为软件退化。
➢软件发展的速度落后于硬件和实际需求➢软件占计算机系统成本的比重越来越大➢软件开发尚未真正实现标准化软件不仅仅只是计算机程序7.软件工程组成:➢质量优先是整个软件工程的核心价值观〔以质量为中心〕➢〔软件〕过程:由为建造、维护高质量软件所需要完成的一系列相互关联的活动组成的框架,即形成软件产品的一系列步骤。
1:软件危机:问题1:如何开发软件,以满足对软件日益增长的需求。
问题2:如何维护数量不断膨胀的软件。
表现:对软件开发成本和时间估计不准,用户对已完成软件不满意,软件质量不可靠,软件不可维护,软件缺少文档,软件成本过高,软件跟不上硬件发展速度。
原因:与软件本身特点有关,缺乏可见性,质量难以评价,规模庞大难以维护。
与软件开发维护的不当方法有关,轻视需求分析和维护,对用户的要求没有完整准确的认识就编写程序,忽视程序,文档,数据等软件配置。
2:软件工程:采用工程的概念,原理,技术和方法开发与维护软件,把正确的管理技术和软件开发技术结合起来,经济的开发出高质量的软件并有效的维护。
即把系统化的,规范的,可度量的途径应用于软件开发,运行和维护的过程。
3:软件工程7条基本原理:用分阶段的生命周期计划严格管理,坚持进行阶段评审,实行严格的产品控制,采用现代程序设计技术,结果应能清楚地审查,开发小组的人员应该少而精,承认不断改进软件工程实践的必要性。
4:软件工程领域:软件需求,设计,构建(写代码),测试,维护,配置管理,工程管理,工程过程,工程工具,软件质量。
5:软件生命周期:软件定义(问题定义,可行性研究,需求分析),软件开发(概要设计,详细设计,编码和单元测试,综合测试),运行维护(改正性维护,适应性维护,完善性维护,预防性维护)。
、生命周期模型6:瀑布模型:就是把一个开发过程分成收集需求,分析,设计,编码,测试,维护六部分,只有完成前面一步才能开始后面一步,上一步的输出的文档就是这一步的输入文档,每一步完成都要交出合格的文档,每一步都会有反馈,如果反馈有错误就退回前一步解决问题。
瀑布模型的缺点:实际的项目开发很难严格按该模型进行;由于用户只能通过文档来了解产品,客户往往很难清楚地给出所有的需求,而瀑布模型不适应用户需求的变化;软件的实际情况必须到项目开发的后期客户才能看到。
7:快速原型模型:就是根据用户的需求迅速设计出一个原型系统,原型系统具有基本的功能,然后用户使用原型并对原型提出需求和改变,开发人员再对原型进行修改和完善知道用户满意。
软件工程5.1软件危机和软件工程5.1.1软件危机一、产生软件危机的历史背景1.计算机系统发展的早期(60年代中期以前)个体化的软件环境:软件规模小,编写者和使用者往往是同一个人,除程序清单外,无其它文档资料。
2.计算机系统发展的第2代时期(60年代中期到70年代)"软件作坊":比较广泛使用产品软件,仍沿用个体化开发方法。
软件维护工作很难进行,甚至不可维护(不能修改运行时发现的错误,不能适应新的硬件环境)由于软件的"不可维护",而导致了"软件危机"。
3.软件工程学诞生(1968年)北大西洋公约组织的计算机科学家,在联邦德国召开国际会议,讨论软件危机问题。
正式提出"软件工程"这个名词──新兴工程学诞生了。
二、软件危机的内涵:1.软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
主要是两个方面的问题:如何开发软件──怎样满足对软件日益增长的需求如何维护软件──数量不断膨胀的已有软件2.软件危机的内涵:(1)软件开发成本和进度的估计常常很不准确(2)用户对"已完成的"软件系统不满意的现象经常发生(3)软件产品的质量往往靠不住(4)软件常常是不可维护的(5)软件通常没有适当的文档资料(6)软件成本在计算机系统总成本中所占的比例逐年上升(7)软件开发生产率提高的速度远远跟不上计算机应用迅速及深入普及的速度三、产生软件危机的原因:1. 软件本身的特点:规模庞大,开发软件不仅涉及许多技术问题(诸如分析方法,设计方法,形式说明方法,版本控制等);更重要的是必须有严格而科学的管理。
2. 软件人员的主观原因:开发与维护的方法不正确。
早期软件开发个体化。
至今,忽视软件需求分析的重要性,轻视维护。
(切记:要充分、完整、准确地认识用户的要求,不要匆忙着手编写程序。
要做大量深入细致的调查研究工作,反复多次地与用户交流信息,准确具体了解用户的要求。