软件工程笔记1
第零章
引论
软件工程Software engineering
所有发达国家的经济依赖软件
发达国家在软件上的投入占了GNP很大一部分
越来越多的系统由软件控制
软件工程关注专业软件开发的理论、方法和工具
软件成本Software costs
软件成本常是计算系统成本中的大部分。PC上的软件成本比硬件大。
软件维护的成本比开发的成本大。对于长周期的系统,维护成本可能是开发成本的多倍。
软件工程关注高效的软件开发。
软件产品Software products
通用产品Generic products
独立系统,在市场上销售给任何希望购买它的客户.
例子:PC图形程序、项目管理工具、CAD软件、面向专门市场的医生预约系统.
定制产品Customized products
由特定客户提出的满足他们需要的软件.
例子嵌入控制系统、空中交通控制系统、交通监控系统
产品规格/描述Product specification
通用产品Generic products
软件开发者拥有产品规格,并决定软件更改
定制产品Customized products
软件客户拥有产品规格,并提出对软件的更改
软件工程的目的:支持专业化的软件开发,而不是个体编程。它包括支持程序描述
关于软件工程的FAQ
| 问题 | 答案 |
|---|---|
| 什么是软件 | 计算机程序和相关文档。软件产品可针对特定客户开发或为通用市场开发 |
| 什么是优良软件的特点 | 好的软件应具有用户所需的功能与性能,而且应该可维护、可用 |
| 什么是软件工程 | 软件工程是关于软件生产的各个方面的工程学科 |
| 什么是基本的软件工程活动 | 软件描述、软件开发、软件验证以及软件进化 |
| 软件工程和计算机科学有何区别 | 计算机科学侧重理论和基础,而软件工程侧重于软件开发和交付的实际活动 |
| 软件工程和系统工程有何区别 | 系统工程侧重就计算机系统的开发的所有方面,包括硬件、软件和过程工程。软件工程只是这个总体过程中的一部分 |
| 软件工程面临的主要挑战是什么 | 不断增长的多样性、减少交付时间以及开发可靠的软件的要求 |
| 什么是软件工程的成本 | 软件开发成本约占总成本的60%,测试成本在40%。对于定制软件而言,进化成本常常高于开发成本 |
| 什么才是最好的软件工程技术和方法 | 由于所有的软件项目都必须进行专业化的管理和开发,所以不同的技术应适用于不同类型的系统。例如,游戏开发需要一系列原型,而安全要求极高的控制系统开发需要一个完整的和可分析的描述。因此,你不能单纯地评判一种方法比另一种方法更好 |
| Web给软件工程带来了哪些不同 | Web带来了软件服务的可用性,已经开发高品质的基于服务的分布式系统的可能性。基于Web的系统开发极大地促进了编程语言和软件复用的发展 |
好软件的基本性质Essential attributes of good software
| 产品性质Product characteristic | 描述Description |
|---|---|
| 可维护性Maintainability | 软件的开发应能支持软件进化以满足客户变化的需求,这是个关键的性质,因为在一个变化的业务环境中软件变更是一个基本需求。 |
| 可靠性和安全Dependability and security | 软件可靠包括一系列特征,包括reliability, security and safety. 可靠的软件在出现系统故障时不应引起物理和经济上的损失。恶意用户不能访问和伤害系统。 |
| 高效Efficiency | 软件不应浪费系统资源,如内存和CPU时间。高效包括反应速度、处理时间和内存利用等方面。 |
| 可接受Acceptability | 软件应该对各种用户都可以接受。这意味着它必须可理解、可用和与其他系统兼容。 |
软件工程定义Software engineering
软件工程是一个工程学科,它关注软件生产的所有方面,从早期的系统描述到软件使用后的维护。
工程学科Engineering discipline
使用合适的理论和方法,根据机构和财务等各种约束解决问题.
软件生产的所有方面All aspects of software production
不仅是软件开发的技术过程,项目管理和支持软件生产的工具和方法的开发.
所有阶段
软件工程的重要性Importance of software engineering
个人和社会越来越依赖先进软件系统,我们需要经济和快速生产可靠和可信赖的系统.
长期来看,使用软件工程方法和技术开发软件系统比以个人编程项目方式写程序便宜。
对于大多数系统类型,成本的主要部分是它投入使用后的更改代价。
软件工程活动Software process activities
软件描述Software specification, 客户和工程师定义要生产的软件和它的操作的约束。
软件开发Software development,软件设计和实现
软件验证Software validation, 软件被检查以确保它们满足客户需要。
软件进化Software evolution, 更改软件以反映更改的客户和市场需求。
软件工程多样性Software engineering diversity
有许多类型的软件系统,没有一个一般的软件技术能够适用于所有类型。
软件工程方法和工具依赖开发的应用的类型、客户需求和开发团队的背景。
应用类型Application types
独立应用Stand-alone applications
这种类型的应用系统运行在本地计算机上,例如PC。它们包括所有必要功能,不需要连接网络。
交互式基于事务的应用Interactive transaction-based applications
应用在远程计算机上执行,用户通过他们自己的PC或终端访问应用,这种类型应用包括Web应用,例如电子商务应用。
嵌入式控制系统Embedded control systems
这些软件控制系统控制和管理硬件设备,数量上,它们可能比其他类型应用要多。
应用类型Application types
批处理系统Batch processing systems
这些系统是业务系统,设计来处理大批量数据。它们处理大量输入,产生相应的输出。
银行、电信
娱乐系统Entertainment systems
这些系统主要用于个人,目的是娱乐用户。
建模和仿真系统Systems for modeling and simulation
这些系统由科学家和工程师开发用来对物理过程或情形进行建模,这些情形通常包括许多单独的交互对象。
数据采集系统Data collection systems
这些系统使用传感器从环境中采集数据,并发送这些数据给其他系统处理。
集成系统Systems of systems
由多个系统构成的系统。
软件工程基本原理Software engineering fundamentals
有些基本原则适用于所有软件系统类型,不管使用什么开发技术:
系统应该使用一个可管理和理解的过程进行开发,当然,不同类型软件可以使用不同过程.
可靠性和性能对于所有软件都重要.
理解和管理软件描述和需求(软件应该做什么)很重要.
只要可能,应该复用那些已经开发的软件而不是写新的软件.
软件工程和Web Software engineering and the web
Web现在是运行应用的平台,机构开发越来越多基于Web的系统,而不是本地系统。
Web服务(Web services)允许应用功能通过Web发布和使用.
云计算(Cloud computing)是一种提供计算机服务(不仅仅软件功能)的方法,应用允许在远程的云中.
用户不购买软件,而是为使用付费.
软件即服务saas
Web软件工程Web software engineering
软件复用是构建基于Web的系统的主要方法.
当构建这类系统时,应该思考如何组合已有的软件组件或系统.
基于Web的系统应该渐进的开发和发布.
现在一般认为对这类系统事前定义所有需求是不实际的
用户接口受到Web浏览器的能力限制
类似AJAX的技术允许在Web浏览器中创建丰富的界面,但还是不好使用。带本地脚本的Web表单使用的更多
基于Web的软件工程Web-based software engineering
基于Web的系统是复杂的分布式系统
但是前面讨论的软件工程的基本原则和思想同样适用。
案例研究Case studies
个人胰岛素泵A personal insulin pump
糖尿病患者使用的胰岛素泵的嵌入式系统,用来维持血糖水平.
心理健康病人管理系统A mental health case patient management system
维护接受心理健康治疗的病人的记录的信息系统
野外天气站A wilderness weather station
从远方采集天气信息的数据采集系统
胰岛素泵控制系统Insulin pump control system
从血糖传感器采集数据,计算需要注射的胰岛素量
计算基于血糖水平变化率
向微型泵发送信号释放正确剂量的胰岛素
安全关键的系统,因为低血糖可能导致脑功能失常、休克和死亡。高血糖对视力和肾脏有长期影响。
胰岛素泵硬件架构Insulin pump hardware architecture
####胰岛素泵的活动模型Activity model of the insulin pump
基本高层次需求Essential high-level requirements
按照需要注射胰岛素.
系统可靠的注射正确剂量的胰岛素,以控制血糖水平.
系统必须设计和实现以满足这些需求
心理健康治疗病人信息系统A patient information system for mental health care
支持心理健康治疗的病人信息系统是一个医疗信息系统,维护有心理问题的病人信息和他们接受的治疗信息。
绝大多数心理健康病人不需要专门的住院治疗,但是需要周期性的看专门门诊,看具有专业知识的医生。
为了让病人容易看医生,这些诊所或门诊不在医院内,它们可能在当地卫生机构或社区中心。
MHC-PMS
MHC-PMS (Mental Health Care-Patient Management System,心理健康治疗-病人管理系统) 是一个在门诊中使用的信息系统。
它使用病人信息中央数据库,同时设计成可以在PC上运行,从而使得在没有安全网络连接的情况下还可以使用系统。
当本地系统有可到的网络连接时,它们使用数据库中的病人信息,但是它们可以下载病人记录,并在断开连接时使用本地病人记录。
MHC-PMS目标
产生管理信息,允许健康服务管理部门评价当地卫生机构和政府执行效果。
为医疗机构提供及时信息,以对病人及时治疗。
MHC-PMS的架构The organization of the MHC-PMS
MHC-PMS关键特性 MHC-PMS key features
**个人治疗管理Individual care management **
门诊人员给病人创建记录,编辑系统中的信息,查看病人历史,等等。系统支持数据摘要,使得医生可以快速知道主要问题和已经开出的治疗措施。
病人监护Patient monitoring
系统监视治疗中病人记录,如果发现可能的问题,及时发出警告。
管理报告Administrative reporting
系统产生月度管理报告,显示在每个门诊治疗的病人数量,进入和离开看护系统的病人数量,隔离的病人数量,开出的药以及成本等。
MHC-PMS关注点 MHC-PMS concerns
隐私Privacy
病人信息必须保密,不能透露给授权医务人员和病人外的其他任何人员。
安全Safety
有些心理疾病会导致病人自杀或危害其他人,只要可能,系统应该通知医务人员有自杀倾向和危险的病人。
医生“正确”工作
系统应该在需要的时候可用,否则安全可能折扣,给病人也可能无法开出正确的治疗。
野外气象站Wilderness weather station
拥有广大野外区域的国家政府决定在野外远程部署众多的气象站。
气象站从一些设备采集数据,这些设备度量温度、气压、光照、降雨、风速和风向等。.
设备被软件系统控制,软件周期性地从设备读取数据,并管理这些这些数据。
气象站上下文The weather station’s environment
天气信息系统Weather information system
气象站系统The weather station system
负责采集数据,执行一些基本数据处理,传输数据给数据管理系统。
数据管理和存储系统The data management and archiving system
从所有野外气象站系统收集数据,进行数据处理和分析,存储数据。
站点维护系统The station maintenance system
通过卫星通信和野外气象站通信,监视它们地状态,并报告问题。
额外软件功能Additional software functionality
自我管理,无人看管
监视设备、电源和通信硬件,向管理系统报告故障。
管理系统电源,环境允许时切换电池供电,当发生危险天气时,例如大风,关闭发电机。
支持动态配置,软件的部件替换为新版本,当发生系统故障时,切换到备份设备。
要点Key points
软件工程是一个关注软件产生所有方面的工程学科。
基本的软件产品特性包括可维护性、可靠性、安全性、高效和可接受性。
描述、开发、验证和进化等高层活动是所有软件过程的基本内容。
软件工程的基本概念适用于所有类型软件的开发。
有许多不同类型的系统,每种都需要合适的软件工程工具和技术。
软件工程的基本思想适用于所有类型的软件系统。
三个案例
嵌入式胰岛素泵控制系统
心理健康病人管理系统
野外气象站系统统故障时,切换到备份设备。
要点Key points
软件工程是一个关注软件产生所有方面的工程学科。
基本的软件产品特性包括可维护性、可靠性、安全性、高效和可接受性。
描述、开发、验证和进化等高层活动是所有软件过程的基本内容。
软件工程的基本概念适用于所有类型软件的开发。
有许多不同类型的系统,每种都需要合适的软件工程工具和技术。
软件工程的基本思想适用于所有类型的软件系统。
三个案例
嵌入式胰岛素泵控制系统
心理健康病人管理系统
野外气象站系统
进阶读物1:没有银弹,保持谦卑之心!