突然之间选了一门很迷的课,发现理解似乎不管用了,好多内容需要记忆,只好博客开个小号来整理一下内容:(
概念
- 何为软件工程(software engineering):软件工程是一门以设计(design),发展(development)以及维护保养(maintenance)软件的工程。
- 一个好的软件需要具备的几点特性:
- Easy to use
- Reliable
- Efficient
- Straightforward to maintain, adapt, and enhance
- Secure
- 软件工程具有两个层面,其一是技术层面(Technical Aspects),例如解释阐述,设计,编译,测试,数据或者动态分析,debug,维护保养等等;另一个方面属于非技术层面,例如项目管理,心理学层面(认知,表现,组织等),法律层面(合同,可靠性,知识产权)
- 对于软件工程来说最大的问题是复杂性(Complexity),有问题本身的复杂性,设计或者封装的难度复杂性,以及接入的平台的复杂性
- 由于复杂性的存在一个大型且复杂的系统需要时间以及一定难度来设计和维护。并且这个系统单个人很难全部理解。
- 由于大型系统很难满足每个人的全部需求,所以将时常会更新升级,有高度改写性(highly changeable)。并且其不可避免的会有残余缺陷(residual defects)存在。由于种种原因,很多软件完成时间会延迟并且超出预算,甚至有的根本无法完成。
软件工程法(software engineering methodology)是开发软件的核心技术方法
- 通过大量的技术手段来实现软件开发
- 不停更新换代(evolving)
- 对特定的subfields进行针对化处理,例如网页应用,实时系统,健康状况等
- 使用一些Influential methods,例如用面对对象的语言,”Agile” methods,设计图,Test-driven design